【MATLAB第74期】#源码分享 | 基于MATLAB的ARX-ARMAX线性自回归移动平均外生模型(结合最小二乘思路)

【MATLAB第74期】#源码分享 | 基于MATLAB的ARX-ARMAX线性自回归移动平均外生模型(结合最小二乘思路)

根据ARX预测输出和实际输出的误差向量,采用ARMAX算法结合ARX误差建模,对预测值进一步细化。通过将误差描述为白噪声的移动平均值,
目前,该代码仅支持输入维度为1,输出维度为1的数据。

一、ARX模型

1.ARX公式

在这里插入图片描述
其中,Y代表输出向量,u代表输入向量。
参数𝑎1,𝑎2,…,𝑎𝑝 , 𝑏0,𝑏1,…,𝑏𝑚 使用最小二乘算法求解。

上述方程可以写成矩阵形式:
在这里插入图片描述

2.ARX代码实现

clc;
clear all;
close all;
data=xlsread('数据.xlsx');
u_in=data(:,1);
y_out=data(:,2);
% ARX Process-----------------------------
L=length(u_in);
u_in_ID=u_in;%用于标识的输入数据
u_in_vfy=u_in;%用于验证的输入数据
y_out_ID=y_out;%用于标识的输出数据
y_out_vfy=y_out;%用于验证的输出数据
m=5;%用于生成输入、输出和错误的延迟顺序的参数
n=length(y_out_ID)-m;I=eye(n,1)+1;% 
I(1)=I(1)-1; % 53 *1   ones(53,1)
A=I;%初始化矩阵A    53*1
Y=y_out_ID((m+1):end);%定义Y矢量  ,输出延迟m个值
na=1;
%将输出延迟1到m-na放入A矩阵
for k=1:1:m-na  %m-1A=[A y_out_ID((m-k+1):(end-k))]; % 53*1 5:57  4:56  3:55  2:54输出
end%将“当前输入——第m个延迟输入”输入到矩阵A
for p=1:1:mk=p-1; %0 1 2 3 4A=[A u_in_ID((m-k+1):(end-k))]; % 53*1 6:58 5:57 4:56 3:55 2:54输入
end  % A  53*10
A(:,1)=[]; %删除用于初始化矩阵A的第一列
parsol=inv(A'*A)*A'*Y  %最小二乘法求解 %基于先前生成已识别输出(预测秒数)矢量输出、当前和以前的输入和参数通过最小二乘法求解
%平方法
n=length(y_out_vfy)-m;  %53
I=eye(n,1)+1;
I(1)=I(1)-1; 
A=I;
for k=1:1:m-naA=[A y_out_vfy((m-k+1):(end-k))];
endfor p=1:1:mk=p-1;A=[A u_in_vfy((m-k+1):(end-k))];
end
A(:,1)=[]; %删除用于初始化矩阵A的第一列
y_out_sysID=A*parsol;% 预测结果T_sim1 =y_out_sysID';
T_train=y_out_vfy((m+1):end)';
vfy=y_out_vfy((m+1):end);
M=size(T_sim1,2);%%  均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);%%  绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'ARX训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid%%  相关指标计算
% R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;disp(['ARX训练集数据的R2为:', num2str(R1)])% MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;disp(['ARX训练集数据的MAE为:', num2str(mae1)])% MBE
mbe1 = sum(T_sim1 - T_train) ./ M ;disp(['ARX训练集数据的MBE为:', num2str(mbe1)])

在这里插入图片描述

二、ARMAX模型

1.ARMAX公式

在这里插入图片描述

2.ARMAX代码实现(部分)

Y_actual=y_out_ID((m+1):end); %由于前m个值用于ARX中的延迟建模  53*1
u=u_in_ID((m+1):end);  %53*1 
Y_verify=y_out_vfy((m+1):end); %53*1
U_verify=u_in_vfy((m+1):end);%53*1
error =vfy- y_out_sysID;%误差矢量由实际错误组成
......
%基于先前生成已识别输出(预测秒数)矢量
%解决了输出、以前的错误、当前和以前的输入和参数
%通过最小二乘法
n=length(Y_verify)-m;
I=eye(n,1)+1;
I(1)=I(1)-1; %是一个哥伦布矢量,所有元素都是Unity
A=I;
Y=Y_verify((m+1):end);
for k=1:1:m-naA=[A Y_verify((m-k+1):(end-k))];
endfor p=1:1:mk=p-1;A=[A U_verify((m-k+1):(end-k))];
endfor p=1:1:mk=p;A=[A error((m-k+1):(end-k))];
end
A(:,1)=[];
Y_sysID=A*parsol;T_sim11 =Y_sysID';
T_train11=Y_verify((m+1):end)';
M11=size(T_sim11,2);%%  均方根误差
error11 = sqrt(sum((T_sim11 - T_train11).^2) ./ M11);%%  绘图
figure
plot(1: M11, T_train11, 'r-*', 1: M11, T_sim11, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'ARMAX训练集预测结果对比'; ['RMSE=' num2str(error11)]};
title(string)
xlim([1, M11])
grid%%  相关指标计算
% R2
R11 = 1 - norm(T_train11 - T_sim11)^2 / norm(T_train11 - mean(T_train11))^2;disp(['ARMAX训练集数据的R2为:', num2str(R11)])% MAE
mae11 = sum(abs(T_sim11 - T_train11)) ./ M11 ;disp(['ARMAX训练集数据的MAE为:', num2str(mae11)])% MBE
mbe11 = sum(T_sim11 - T_train11) ./ M11 ;

在这里插入图片描述

三、代码获取

CSDN后台私信“74期”即可获取下载方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/128126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享 8 个 VSCode 插件,提升你的编码体验

大多数开发者都在不断寻找让开发工作更轻松的方法,我也是如此。合适的工具可以帮助你实现这一目标。 在本文中,我们将探讨我个人使用的八个扩展,以优化我的编码体验。让我们来看看这些扩展的列表,亲自体验它们如何改善你的编码体验…

Feign负载均衡写法

Feign主要为了面向接口编程 feign是web service客户端,是接口实现的,而ribbon是通过微服务名字访问通过RestTemplate调用的,如下: 在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(类似…

成都瀚网科技有限公司:抖音商家怎么免费入驻?

随着抖音成为全球最受欢迎的短视频平台之一,越来越多的商家开始关注抖音上的商机。抖音商家的进驻可以帮助商家扩大品牌影响力和销售渠道。那么,如何免费进入抖音成为商家呢?下面就为大家介绍一下具体步骤。 1、抖音商家如何免费注册&#xf…

C++信息学奥赛1191:流感传染

一开始的代码自己运行测试代码怎么测试都是正确&#xff0c;但是一直提示答案错误 #include <iostream> using namespace std; int main() {int n;cin >> n;char arr[n][n];for (int i 0; i < n; i){for (int j 0; j < n; j){cin >> arr[i][j];}}in…

js如何实现数组去重的常用方法

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Set&#xff08;ES6&#xff09;⭐ 使用 filter 和 indexOf⭐ 使用 reduce⭐ 使用对象属性⭐ 使用 includes 方法&#xff08;ES6&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方…

ElMessageBox.prompt 点击确认校验成功后关闭

ElMessageBox.prompt(, 验证取货码, {inputPattern: /^.{1,20}$/,inputErrorMessage: 请输入取货码,inputPlaceholder: 请输入取货码,beforeClose: (action, instance, done) > {if (action confirm) {if (instance.inputValue) {let flag false;if (flag) {done()} else …

css transition 指南

css transition 指南 在本文中&#xff0c;我们将深入了解 CSS transition&#xff0c;以及如何使用它们来创建丰富、精美的动画。 基本原理 我们创建动画时通常需要一些动画相关的 CSS。 下面是一个按钮在悬停时移动但没有动画的示例&#xff1a; <button class"…

OpenCV(十九):模板匹配

1.模板匹配&#xff1a; OpenCV提供了一个模板匹配函数&#xff0c;用于在图像中寻找给定模板的匹配位置。 2.图像模板匹配函数matchTemplate void matchTemplate( InputArray image, InputArray templ, OutputArray result, int method, InputArray mask noArray() ); image…

Golang复习

golang的特点 Golang 针对并发进行了优化&#xff0c;并且在规模上运行良好 自动垃圾收集明显比 Java 或 Python 更有效&#xff0c;因为它与程序同时执行 golang数据类型 基本数据类型&#xff08;值类型&#xff09; 布尔类型 数字类型 整型 根据有符号分为&#xff1a;…

C++this指针

本文旨在讲解C中this关键字&#xff0c;以及其相关作用&#xff01; 定义 this 是 C 中的一个关键字&#xff0c;也是一个 const 指针&#xff0c;它指向当前对象&#xff0c;通过它可以访问当前对象的所有成员。 this的介绍 下面来看一下关于this这个关键字的实例&#xff0…

input子系统框架、外设驱动开发

一、input子系统基本框架 Linux内核为了两个目的&#xff1a; 简化纯输入类外设&#xff08;如&#xff1a;键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等&#xff09;的驱动开发统一输入类外设产生的数据格式&#xff08;struct input_event&#xff09;&#xff0c;更加方…

深入学习与探索:高级数据结构与复杂算法

文章目录 学习高级数据结构B树&#xff1a;数据库引擎的骨干线段树&#xff1a;高效的区间查询Trie树&#xff1a;高效的字符串检索 探索复杂算法领域图算法&#xff1a;解决复杂网络问题字符串匹配算法&#xff1a;处理文本搜索近似算法&#xff1a;在NP难题上取得近似解 结论…

Autojs 小游戏实践-神农百草园

概述 最近一直再写刷视频软件脚本&#xff0c;比如手机视频软件太多&#xff0c;每天都需要手动提现羊毛&#xff0c;太累&#xff0c;使用使用Autojs来帮助我提现&#xff0c;签到&#xff0c;扯远了&#xff0c;因为做刷视频脚本感觉有点无聊&#xff0c;所以试着做小游戏找…

ESP32C3 LuatOS RC522②写入字符串

编写了字符串转16进制表函数 -- 将字符串转换为十六进制表 local function stringToHexTable(str)local hexTable {}local maxLength 16 -- 最大长度为16个元素-- 将字符串转换为十六进制for i 1, #str doif i > maxLength thenbreakendlocal hex string.format("…

HarmonyOS实现几种常见图片点击效果

一. 样例介绍 HarmonyOS提供了常用的图片、图片帧动画播放器组件&#xff0c;开发者可以根据实际场景和开发需求&#xff0c;实现不同的界面交互效果&#xff0c;包括&#xff1a;点击阴影效果、点击切换状态、点击动画效果、点击切换动效。 相关概念 image组件&#xff1a;图片…

d435i 相机和imu标定

一、IMU 标定 使用 imu_utils 功能包标定 IMU&#xff0c;由于imu_utils功能包的编译依赖于code_utils&#xff0c;需要先编译code_utils&#xff0c;主要参考 相机与IMU联合标定_熊猫飞天的博客-CSDN博客 Ubuntu20.04编译并运行imu_utils&#xff0c;并且标定IMU_学无止境的…

百度抓取香港服务器抓取超时是什么情况?

​ 网络延迟导致抓取超时 网络延迟是指从发送请求到接收响应之间的时间延迟。如果网络延迟过高&#xff0c;服务器可能无法及时响应请求&#xff0c;导致超时。在香港服务器上抓取数据时&#xff0c;如果网络延迟过高&#xff0c;可能会出现抓取超时的情况。 服务器负载过高可能…

业务安全及实战案例

业务安全 关于漏洞&#xff1a; 注入业务逻辑信息泄露 A04:2021 – Insecure Design 在线靶场PortSwigger 1. 概述 1.1 业务安全现状 1.1.1 业务逻辑漏洞 ​ 近年来&#xff0c;随着信息化技术的迅速发展和全球一体化进程的不断加快&#xff0c;计算机和网络已经成为与…

【补】代码随想录算法训练营day38|动态规划 |509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯

动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推…

[SICTF 2023 #Round2] Crypto,PWN,Reverse

似乎很久没写了。 周五到周日&#xff0c;两天的这个比赛&#xff0c;有些东西还真是头回用&#xff0c;值得纪录一下。 Crypto 密码这块这届还是比较简单的&#xff0c;没有复杂的题&#xff0c;但量大分多。 【签到】古典大杂烩 给了一堆emoji的图 &#x1f429;&#x…