我有一个大小为256行的数据文件。我想将数据拟合到二阶AR(2)过程,然后在拟合后模拟过程。我有以下代码,但它返回错误索引超出矩阵维度。
whos y1
Name Size Bytes Class Attributes
y1 1x1 1712 cell
whos coeff
is 1x3 24 double
请帮助解决错误。另外,如何用图表检查原始数据和拟合数据是否几乎相同并得到错误?
load('b1.dat');
y1=b1(:);
if ~iscell(y1); y1 = {y1}; end
model = ar(y1, 2, 'ls');
coeffs = model.a;
ar_coeff1=[coeff(2) coeff(3)]
%simulate
for i =3 : 256
y1(i) = coeff(2) *y1(i-1) +coeff(3)*y1(i-2) ; **% This line returns error**
end
答案 0 :(得分:2)
不允许发布索引操作,单元格添加和单元格/双乘法操作。
如果a
是一个如下生成的单元格数组(例如y1
):
>> a={1:256}
a =
[1x256 double]
>> whos a
Name Size Bytes Class
a 1x1 2108 cell array
Grand total is 257 elements using 2108 bytes
我无法索引到(2)因为它不存在:
>> a(2)
??? Index exceeds matrix dimensions.
我不能按如下方式添加一个单元格和另一个单元格:
>> a(1)+a(1)
??? Function 'plus' is not defined for values of class 'cell'.
我无法乘以单元格并按如下方式输入double:
>> a*3
??? Function 'mtimes' is not defined for values of class 'cell'.
Error in ==> mtimes at 16
builtin('mtimes', varargin{:});
例如,允许以下内容:
for ii =3 : 256
y1{1}(ii) = coeff(2) *y1{1}(ii-1) +coeff(3)*y1{1}(ii-2) ;
end
还请注意ARFIT
演示文件:
%... ARfit包含用于估计AR参数的模块 给定时间序列数据的模型;检查的充分性 估计的AR模型; ...
请查看ARfit
文档和演示。
修改:
通常,如果ydat
是源数据(以单元格数组格式)并且ysim
是适合数据(或建模操作)的结果,则可以绘制之间的残差。数据并与plot(ydat{1}-ysim{1})
拟合,并将RMS偏差计算为sqrt(sum(ydat{1}-ysim{1}).^2)/length(ysim{1})