我有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
答案 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
。