2012-10-04 40 views
1

我笛卡爾點陣列的標準偏差(列1 x值和第2列是y值),就像這樣:Matlab的 - 笛卡爾點

308 522 
307 523 
307 523 
307 523 
307 523 
307 523 
306 523 

我將如何去獲得的標準偏差點?它將與平均值相比較,這將是一條直線。這些點不是那條直線,因此標準偏差描述了線段的直線與波浪或「離基點」的關係。

我真的很感謝幫助。

+3

井,你是否需要「std deviation」(不是那個在2D中定義的)?因爲在這種情況下更自然的是繪製最佳擬合線並使用R^2值(確定係數)來描述數據與直線之間的「非基礎」。 –

+0

你能否給我舉個例子說明我會怎麼做?說最合適的線將在300,500和310,550點之間。 – intl

+0

對不起,額外的回覆,但基本上我試圖確定是否通過這些點的線段是直的或彎曲的,並找到一種方法來量化它。 – intl

回答

3

如果您確定xy數據描述了一條直線,那麼您需要執行以下操作。

尋找最佳擬合直線等於解決最小二乘法意義上的超定線性系統Ax = b,其中

xy = [ 
308 522 
307 523 
307 523 
307 523 
307 523 
307 523 
306 523]; 

x_vals = xy(:,1); 
y_vals = xy(:,2); 

A = [x_vals ones(size(x_vals))]; 
b = y_vals; 

這可以在Matlab完成,像這樣:

sol = A\b; 

m = sol(1); 
c = sol(2); 

我們現在所做的是找到mc的值,以便等式y = mx+c所描述的線最符合您提供的數據。這條最適合的線條並不完美,所以它有錯誤w.r.t.在Y數據:

errs = (m*x_vals + c) - y_vals; 

這些錯誤的標準差,可以計算像這樣:

>> std(errs) 
ans = 
    0.2440 

如果你想使用的垂直距離的線(歐氏距離),你會必須包括幾何因素:

errs = (m*x_vals + c) - y; 
errs_perpendicular = errs * cos(atan(m)); 

使用TRIG身份這可以修改,以

errs_perpendicular = errs * 1/sqrt(1+m*m); 

,當然還有,

>> std(errs_perpendicular) 
ans = 
    0.2182 

如果你不能確定一條直線,通過數據擬合和/或您的xy數據基本上是圍繞描述了一些常見中心的點雲,你會做以下。

查找質量中心(COM):

COM = mean(xy); 

所有點的距離到COM

dists = sqrt(sum(bsxfun(@minus, COM, xy).^2,2)); 

和其標準偏差:

>> std(dists) 
ans = 
    0.5059 
+0

+1 - 很好的答案。我唯一不同的做法是測量直線和點之間的歐幾里德距離,而不是Y軸的距離。 –

+0

@Andrey:你說得對,看編輯。 –

+0

非常感謝您的回答。它給了我標準偏差(我正在做直線部分)。它會更適合用確定係數來確定直線(ish)線嗎? – intl

1

一組二維值的平均值是另一個二維值,即它是一個點,而不是一條線。我相信這一點也被稱爲質量中心。

在這種情況下標準偏差是什麼並不完全清楚,但我認爲用離平均值的距離來定義它是有意義的。