2017-07-24 52 views
0

我有6個不同的傳感器數據集,我想找出均方根誤差,但限制信號的限制意味着sig_diff_lim的RMSE。有關在MATLAB中找到均方根誤差的循環問題

我試圖申請循環,但它不工作可以有人告訴我,我在哪裏有錯。

感謝您的期待。

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

+0

究竟是什麼錯誤? 'square_error'應爲多大?它是6 * n矩陣還是6 * 1?什麼輸出是意外的? – Ash

+0

非常感謝您的回覆。請看上面的附圖,實際上是我面對的維度問題,所以我很困惑我是否正確應用了矩陣維度的循環內的命令。 – Peter

+0

並且Square錯誤應該是6 * 1,以便它爲數據集1,2,3,4,5,6的每個數據集均值找到平​​方誤差,然後在命令窗口中單獨顯示它們。 – Peter

回答

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)....在assignemnt行?
  • 現在,嘗試逐元素乘法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的。

+0

signal_diff_lim(i,:)= sig_diff((lws -SAmax)&(swav vehvel));實際上,每當加載新驅動器數據時,我都希望將數據保存在某個矩陣中。我會說實話與你不幸上面提到的解決方案沒有奏效沒有任何方式sig_diff_lim計算每個數據手段爲數據1,2,3,4,5,6,因爲我得到尺寸不匹配。 – Peter

+0

對不起,因爲我正在嘗試一些東西,但仍未成功。 – Peter

+0

@彼得對不起,沒有把握這句話「沒有任何sig_diff_lim計算出來的方式......」。你打印了sig_diff的大小嗎?你何時/何地/你是如何初始化它的? – Ash