错误:索引在模拟AR过程中超出矩阵维度

时间:2013-07-28 06:31:43

标签: matlab matrix

我有一个大小为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

1 个答案:

答案 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})