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

Issue regarding loop to find Root mean square error in MATLAB

我有 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

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

编辑的矩阵
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,:)) 之间尝试 element-wise 乘法(运算符 .*)到我之前的观点)与你的逻辑索引,像这样:

    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 在阈值变化时是固定的,而在您的代码中矩阵本身在变化。但它向您表明您的索引将 return 可变长度的矩阵。

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

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

尺寸均为 5*1