1

我有一个大小为 256 行的数据文件。我想将数据拟合到二阶 AR(2) 过程,然后在拟合后模拟该过程。我有以下代码,但它返回错误索引超出矩阵尺寸。

whos y1
  Name      Size            Bytes  Class    Attributes

  y1        1x1              1712  cell  

谁的系数

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
4

1 回答 1

2

不允许发布的索引操作、单元格加法和单元格/双倍乘法操作。

Ifa是一个元胞数组(如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

我不能索引到 a(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})

于 2013-07-28T07:36:56.320 回答