关于循环的问题在MATLAB中找到均方根误差

时间:2017-07-24 18:18:44

标签: matlab sensor

我有6个不同的传感器数据集,我想找出均方根误差但有限信号有限制意味着sig_diff_lim的RMSE。

我试图应用循环,但它没有用,任何人都可以告诉我我的错。

感谢您的期待。

 clc

 drv(1)=load('a.mat');
 drv(2)=load('b.mat');
 drv(3)=load('c.mat');
 drv(4)=load('d.mat');
 drv(5)=load('e.mat');
 drv(6)=load('h.mat');

 for i= 1:numel(drv)
   t=drv(i).T;
   ref=drv(i).P;
   lws=drv(i).SWA;

   sig_diff(i,:) =lws(i)-ref(i);

   swvel_thres=10;
   vehvel=30;   
   SAmax=90;


   sig_diff_lim(i,:)=sig_diff((lws(i)<SAmax)&(lws(i)>-SAmax)&(swav(i)<swvel_thres)&(vel(i)>vehvel));



   square_error(i,:) = (sig_diff_lim(i)).^2;
   mse(i,:)=  mean(square_error(i));
   rmse(i,:) = sqrt(mse(i));

end
rmse 
mse

enter image description here

1 个答案:

答案 0 :(得分:1)

在我看来,虽然分配给sig_diff_lim(i,:)需要一个大小为1*n的行向量,但是

返回的矩阵
vec=sig_diff((lws_7(i)<SAmax)&(lws_7(i)>-SAmax)&(swav(i)<swvel_thres)&(vel(i)>vehvel))

的大小不同。

修改

  • 首先,您确定sig_diff((lws(i)...不应该是sig_diff(i,:)((lws(i)....在分配线上吗?
  • 现在,在sig_diff(或sig_diff(i,:))之间尝试元素明细乘法(运算符。*),具体取决于您对我之前的观点的回答)逻辑索引,如下所示:

    sig_diff.*((lws(i)<...   %%%% instead of sig_diff((lws(i)<...
    %%% or 
    sig_diff(i,:).*(lws(i)<...
    

我认为应该这样做。

  • 无论这是否有效,请尝试此示例以了解这种逻辑索引的内容:

    >> t=[1 2 3 5 7;1 5 6 8 10];
    >> t(1,:)(l<7  & l>-7)
    ans =
    
    1   2   3   5
    
    >> t(1,:)(l<7  & l>-2)
    ans =
    
    1   2   5
    

当然,在此示例中,t在阈值发生变化时是固定的,而在代码中,矩阵本身正在发生变化。但它向您显示您的索引将返回可变长度的矩阵。

但是,根据我上面提出的解决方案,

>> t(1,:).*(l<7  & l>-2)
>> t(1,:).*(l<7  & l>-7)

的大小均为5*1

相关问题