У меня есть 6 разных наборов данных с датчика, и я хочу узнать среднеквадратическую ошибку, но ограниченный сигнал с ограничениями означает RMSE sig_diff_lim.
Я пытался применить цикл, но он не работает, может кто-нибудь сказать мне, в чем я виноват.
Спасибо в ожидании.
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
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
.
Похожие вопросы
Новые вопросы
matlab
MATLAB - это высокоуровневая языковая и интерактивная среда программирования для численных расчетов и визуализации, разработанная MathWorks. Не используйте оба тега [matlab] и [octave], если явно не задан вопрос о сходстве или различии между ними. При использовании этого тега, пожалуйста, укажите версию MATLAB, с которой вы работаете (например, R2017a).
square_error
? Это матрица 6 * n или 6 * 1? Какой результат неожиданный?