如何将iddata应用于计算?

时间:2012-03-18 20:51:12

标签: matlab

我试图弄清楚如何将输入和输出数据组合到ARX模型中,然后将其应用到BIC(贝叶斯信息准则)公式中。以下是我目前正在处理的代码:

for i=1:30; %% Set Model Order
    data=iddata(output,input,1);
    model = arx(data,[8 9 i]);
    yp = predict(model,data);
    ye = regress(data,yp{1,1}(1:4018,1));
    M(i) = var(yp);
    BIC(i)=(N+i*(log(N)-1))/(N-i)*log(M(i));
end

但它不起作用。它一直给我一个错误,如下所示:

“不支持语法”Data {...}“。使用”getexp“命令 从IDDATA对象中提取单个实验。“ 我不明白这是什么意思。有人可以向我解释一下,我的代码在哪里做错了吗?

更新: 我尝试做类似下面的事情,到目前为止,没有错误。但是这个BIC的图表总是直线的。我的回归部分有问题吗?我应该怎样做回归?

N=length(rainfall_model);
for i=1:20; % Set Model Order
    data=iddata(rainfall_model,tmax_model,1);
    %d1 = getexp(data,1);
    model = arx(data,[50 9 i]);
    yp=predict(model,data);
    y = yp.y ;
    d1 = data.y ;
    ye = (d1).^2 - (y).^2;
    M(i)= mse(ye);
    BIC(i)=(N+i*(log(N)-1))/(N-i)*log(M(i));
end

1 个答案:

答案 0 :(得分:1)

在您的代码示例中,从'predict'命令返回的yp是一个iddata对象,并且单元格符号'{...}'不能与它一起使用。如果要进行回归,则必须从中提取输入(yp.u)或输出(yp.y)数据。

此外,命令'regress'不适用于idddata对象,因为它不是系统识别工具箱功能。再次,您必须在调用之前从'data'和'yp'变量中提取输入或输出数据。

更新:要查看iddata对象(数据和yp)中的内容,请执行

get(data)
get(yp)

您会看到可以用两种等效的方式提取输出数据:

yp.y
yp.OutputData

同样,对于输入数据。