2013-06-12 35 views
3

使用MATLAB,我如何找到矩陣的特定列的3天移動平均線並將移動平均線附加到該矩陣?我正在嘗試計算從矩陣的底部到頂部的3日移動平均線。我提供我的代碼:使用MATLAB,我怎樣才能找到移動平均線?

考慮下面的矩陣和掩碼:

a = [1,2,3;4,5,6;7,8,9;10,11,12;13,14,15;16,17,18]; 
mask = ones(3,1); 

我曾嘗試實施CONV命令,但我收到一個錯誤。這裏是CONV命令我一直在試圖對矩陣A的第2列使用:

a(:,4) = conv(a(:,2),mask,'valid'); 

我希望在下面的表格中給出的輸出:

desiredOutput = [1,2,3,5;4,5,6,8;7,8,9,11;10,11,12,14;13,14,15,0;16,17,18,0;] 

如果您有任何建議,我將不勝感激。謝謝!

+0

是'[111]'的卷積移動平均內核? –

+0

是的,這是正確的。我認爲這是在調用conv時代表3日移動平均線的方式。 – Aaron

+1

您所需的輸出看起來不像移動平均值。你如何獲得這些價值? – Phonon

回答

4

一般來說,如果你會顯示錯誤,這將有所幫助。在這種情況下,你做錯了兩兩件事:

首先你卷積需要通過三個(或移動平均線的長度)可分爲

c = conv(a(:,2),mask,'valid')/3 

c = 

    5 
    8 
    11 
    14 

其次,注意的c大小。你不能只將c納入a。獲得移動平均的典型方式是使用same

a(:,4) = conv(a(:,2),mask,'same')/3 

a = 

    1.0000 2.0000 3.0000 2.3333 
    4.0000 5.0000 6.0000 5.0000 
    7.0000 8.0000 9.0000 8.0000 
    10.0000 11.0000 12.0000 11.0000 
    13.0000 14.0000 15.0000 14.0000 
    16.0000 17.0000 18.0000 10.3333 

但是,這並不像你想要什麼。

相反,你不得不使用幾行:

c = conv(a(:,2),mask,'valid')/3; 
a(1:length(c),4) = c 

a = 

    1  2  3  5 
    4  5  6  8 
    7  8  9 11 
    10 11 12 14 
    13 14 15  0 
    16 17 18  0 
+0

完美!非常感謝你。這正是我所尋找的,所以我不必使用循環。 – Aaron