2015-11-16 79 views
0

我最近遇到用作Matlab的光滑函數來如下:解釋MATLAB函數平滑的(X,Y,跨度, '移動')

ans = smooth(x, y, span, 'moving'); 

Matlab的文檔狀態

YY =平滑(x,y,...)另外指定x個數據。如果未提供x,則需要x數據的方法假定x = 1:length(y)。當數據不是均勻間隔或排序時,應該指定x數據。如果x不統一併且您沒有指定方法,則使用lowess。如果平滑方法要求對x進行排序,則排序會自動進行。

但是,我不清楚這實際上意味着什麼'移動'的平均情況。 x是y數據的索引,如果是的話,x的非整數值如何影響y的'移動'平均值?

回答

0

移動平均裝置(你的情況或ans)的yy的每個值是所述n最近點的平均值。 https://en.wikipedia.org/wiki/Moving_average 有幾種方法來計算它 - 這取決於我們將使用哪些點。例如:

((i-1) + (i-2) + ... + (i-n))/n; 

其中n - 是一個span線性過濾水平。 這意味着前三個點不能計算(沒有數據)。有時結果必須改變(因爲前4個點的真正平均值並不與第4個元素相對應)。

所以Matlab的使用另一種方法:

yy(1) = y(1) 
yy(2) = (y(1) + y(2) + y(3))/3 
yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5 
yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5 
... 

更爲有用。

關於xy - 通常是2d數據:每個x對應於每個y。你可以避免設置x,那麼matlab將使用[1, 2, 3, ..., length(y)]這個序列。但是如果你有一些非均勻分佈的數據,你必須設置它以獲得正確的結果。所以,如果你有非整數值,它將正常工作,縮放x軸。在這裏,從我頭上的最簡單的例子:enter image description here

+0

爲了確保我能理解您的意思:非整數x'與移動平均值僅用於排序,並且生成的平滑y與將該順序投影到整數索引時相同? – hanna

+0

Sry,我不明白什麼是'非整數編入整數索引',但看看我的繪圖 - 結果平滑函數(紅色)的點與使用的數據具有相同的非整數x值(藍色) 。 這意味着'平滑'考慮了x軸點之間的不同長度,但是得到的點不會有整數x值,但是與路由到'平滑'的x數據相同。 –

0

假設你有數據Ÿ被噪聲干擾和假設Ÿ = [2.1, 3.2, 1.7, 4.5, 5.8, 6.9]。假設您已決定使用3窗口過濾器的移動平均值來平滑

smoothedY1 = (2.1 + 3.2 + 1.7)/3 = 2.3333 
smoothedY2 = (3.2 + 1.7 + 4.5)/3 = 3.1333 
smoothedY3 = (1.7 + 4.5 + 5.8)/3 = 4.0000 
smoothedY3 = (4.5 + 5.8 + 6.9)/3 = 5.7333 

注意損壞的數據每次迭代向左移動一個元素的方式。現在讓我們在Matlab中使用smooth()

y = [2.1, 3.2, 1.7, 4.5, 5.8, 6.9]; 
smooth(y, 3, 'moving') 

上述腳本將產生以下結果

ans = 
    2.1000 
    2.3333 <---- 
    3.1333  | (smoothed data) 
    4.0000  | 
    5.7333 <---- 
    6.9000 
0

要回答你原來的問題,在「X」的數據只是用於排序,但在方法「移動」否則將被忽略:

>> x = rand(10, 1); 
>> y = (1:10)' + 0.1*randn(10,1); 
>> isequal(smooth(x,y,'moving'), smooth(y,'moving')) 
ans = 
    0 
>> z = sortrows([x y], 1); 
>> isequal(smooth(z(:,1),z(:,2),'moving'), smooth(z(:,2),'moving')) 
ans = 
    1 

的「X」值實際上並沒有考慮爲平均,它們只是用來排序「Y」通過增加指標。