我笛卡爾點陣列的標準偏差(列1 x值和第2列是y值),就像這樣:Matlab的 - 笛卡爾點
308 522
307 523
307 523
307 523
307 523
307 523
306 523
我將如何去獲得的標準偏差點?它將與平均值相比較,這將是一條直線。這些點不是那條直線,因此標準偏差描述了線段的直線與波浪或「離基點」的關係。
我真的很感謝幫助。
我笛卡爾點陣列的標準偏差(列1 x值和第2列是y值),就像這樣:Matlab的 - 笛卡爾點
308 522
307 523
307 523
307 523
307 523
307 523
306 523
我將如何去獲得的標準偏差點?它將與平均值相比較,這將是一條直線。這些點不是那條直線,因此標準偏差描述了線段的直線與波浪或「離基點」的關係。
我真的很感謝幫助。
如果您確定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);
我們現在所做的是找到m
和c
的值,以便等式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
+1 - 很好的答案。我唯一不同的做法是測量直線和點之間的歐幾里德距離,而不是Y軸的距離。 –
@Andrey:你說得對,看編輯。 –
非常感謝您的回答。它給了我標準偏差(我正在做直線部分)。它會更適合用確定係數來確定直線(ish)線嗎? – intl
一組二維值的平均值是另一個二維值,即它是一個點,而不是一條線。我相信這一點也被稱爲質量中心。
在這種情況下標準偏差是什麼並不完全清楚,但我認爲用離平均值的距離來定義它是有意義的。
井,你是否需要「std deviation」(不是那個在2D中定義的)?因爲在這種情況下更自然的是繪製最佳擬合線並使用R^2值(確定係數)來描述數據與直線之間的「非基礎」。 –
你能否給我舉個例子說明我會怎麼做?說最合適的線將在300,500和310,550點之間。 – intl
對不起,額外的回覆,但基本上我試圖確定是否通過這些點的線段是直的或彎曲的,並找到一種方法來量化它。 – intl