首页 > 编程语言 >matlab练习程序(ARMA模型)

matlab练习程序(ARMA模型)

时间:2022-09-03 12:13:05浏览次数:82  
标签:par end 模型 练习 newe newx matlab ARMA

ARMA称为自回归移动平均模型(Autoregressive moving average model),由自回归模型(AR)和移动平均模型(MA)混合构成。

注意这里的移动平均模型和移动平均值平滑曲线不是一个概念。

AR模型是用自身的历史数据来预测未来数据,构成如下:

MA模型则利用历史噪声来预测未来数据,构成如下:

ARMA模型综合利用两种方法,构成如下:

其中beta为AR模型的系数,alpha为MA模型的系数,Y为系统测量值,epsilon为噪声。

如果有一些数据,想要利用AR、MA或者ARMA模型来做预测,就需要估计上述alpha,beta系数和epsilon噪声。

AR模型可以用线性最小二乘求解。

MA模型因为噪声数据也是未知量,列出的方程比未知量要少,矩阵奇异,则可以用非线性最小二乘方法迭代求解。

下面给一个ARMA模型求解系数的例子,具体如何优化,则可以参考历史文章

matlab代码如下:

clear;close all;clc;

n=50;
u = 3;
e = randn(n,1);
x = zeros(n,1);

%ARMA模型
for i=3:n
    x(i) = 0.2*x(i-1) + 0.1*x(i-2) + u + e(i) - 0.3*e(i-1) + 0.4*e(i-2);
end

newu = mean(x);
options.Algorithm = 'levenberg-marquardt';
lb = [];ub = [];
par = [newu;rand(4,1);rand(n,1)];
f = @(par) func(par,x);
par= lsqnonlin(f,par,lb,ub,options);        %执行优化

%生成拟合量
newe = par(6:end);
newx = zeros(n,1);
for i=3:n
    newx(i) = par(2)*newx(i-1) + par(3)*newx(i-2)+ par(1) + newe(i) + par(4)*newe(i-1) + par(5)*newe(i-2);
end

for i=n+1:n+2                   %预测两步
    newe(i) = randn(1);
    newx(i) = par(2)*newx(i-1) + par(3)*newx(i-2)+ par(1) + newe(i) + par(4)*newe(i-1) + par(5)*newe(i-2);
end

subplot(3,1,1);
plot(x,'r-o');
hold on;
plot(newx,'g-*');
title('原始序列与估计序列')

subplot(3,1,2);
plot(e,'r-o');
hold on;
plot(newe,'g-*');
title('原始随机序列与估计随机序列')

subplot(3,1,3);
plot(autocorr(x,length(x)-1),'r-o');
hold on;
plot(parcorr(x,'Method','yule-walker','NumLags',length(x)-1),'g-*');
title('自相关与偏相关')

function re = func(par,x)

e = par(6:end);
re = zeros(length(e),1);
for i=3:length(e)
    re(i) = x(i) - (par(2)*x(i-1) + par(3)*x(i-2) + par(1) + e(i) + par(4)*e(i-1) + par(5)*e(i-2));                         %损失量
end
end

结果如下:

参考:https://stats.stackexchange.com/questions/505873/how-to-manually-fit-ma1-model-with-ols

标签:par,end,模型,练习,newe,newx,matlab,ARMA
From: https://www.cnblogs.com/tiandsp/p/16652016.html

相关文章

  • matlab中数据结构之-cell array
    不同与matlab中的array数据结构中存储的都是一样的数据,cellarray中可以存储不同的数据类型,而且cellarray也可以是向量或矩阵,数组中不同的元素指向不同的数值。原来主......
  • for循环的练习题1-2
    练习1:计算0到100之间的奇数和偶数的和  练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个  ......
  • 算法题练习,Solo和koko分糖 ,整数拆分, Cookies 分饼干
    目录1.CandySolo和koko分糖2.整数拆分3=1+1+13=1+23=33.Cookies分饼干1.CandySolo和koko分糖如果可以分给弟弟,必定满足全部异或为0,找出最小的一个给弟弟......
  • 牛客练习赛102 B-C
    B清楚姐姐带带我 当数大于1e9的时候就取模//#defineintllconstintN=1e5+10,mod=19980829;intn,m;voidsolve(){llres=0;boolflag......
  • 牛客练习赛102
    A对所有消息做一下前缀和,对每个人的消息做一下前缀和,分别判断是否有长度为\(a,b\)的连续段B考虑当前已经算出来前\(i-1\)个操作的最大值\(x\),那么第\(i\)个操作......
  • Python练习题
    Python练习题练习题1练习题2猜数字:每次游戏开始生成一个0~100的随机数,猜中或10次后,询问用户是否继续,是继续,不是退出。importrandomcount=10#设定机会次数an......
  • Nodejs安装karma 出现 Cannot find module 'optimist'错误
    http://www.javashuo.com/article/p-pnrbedet-dc.html原文   https://segmentfault.com/a/119000001188388安装好nodejs、配置好cnpm、以及自动化测试所需的karma......
  • MATLAB R2019b安装 及其启动慢的解决方案
       MATLAB是一款商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。可以进行矩阵运算、......
  • 如果你能解决这 10 个练习,你就是 HTML DOM Pro
    如果你能解决这10个练习,你就是HTMLDOMPro从简单到艰苦的练习。Photoby斯科特·格雷厄姆on不飞溅众所周知,JavaScript是一种非常强大的语言,无论是在浏览器环......
  • MATLAB 读取csv文件效率对比
    1、读取文件18.9s[A,B,C]=xlsread('inv_5249_1_min.csv'); 2、读取文件5.34sCell_Datao=readtable('inv_5249_1_min.csv'); 3、读取文件1s以内file_id=fop......