2012-09-19 23 views
8

私は点のセットが(x,y)であり、MATLABを使用して原点を通過する線を見つける必要があります。原点(0,0)を通過する線をデータに合わせる

+1

を使用することができます"ベストフィット"?最小二乗誤差? –

+1

はい、そうです。重要なことを指摘してくれてありがとう。 –

答えて

14

短いと:機能はy=ax+0の形式である必要があり、polyfitは役に立たなくなります。しかし、あなたは最小二乗法を使用することができます。

a = x(:)\y(:); 

説明:

あなたはn方程式を持って発見される必要がある一つの変数a

a*x1 = y1; 
a*x2 = y2; 
... 
a*xn = yn; 

オペレータ\最小二乗解を求める。

また、手動で解決策を見つけることができます。

a = (x'*x) \ (x'*y); 

または擬似コードでは:あなたはMATLABを使用していない場合

 (x1*y1 + x2*y2 + ... xn*yn) 
a = ---------------------------- 
    (x1*x1 + x2*x2 + ... xn*xn) 

これは便利です - Cコードの例のために。


例とコードスニペット:あなたは "カーブフィッティングツールボックス" を持っている場合

enter image description here

function FindLSSolution() 
    a = 2.5; 
    x = rand(100,1)*10; 
    y = a*x + randn(100,1); 
    figure;scatter(x,y); 

    A = x(:)\y(:); 
    hold on;plot(x, A*x,'g'); 
end 
+0

'a = pinv(x)* y'これも機能しますか? –

+1

@dr_rk、はい。しかし、それは数値的に遅く、安定性が低いのでお勧めしません –

2

あなたはどのようにあなたがあなたの基準を定義します

f = fit(x, y, 'a*x'); 
関連する問題