关于在 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
。
我有 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
。