2010-12-01 13 views
2

hereと表示されている最小二乗適合(LSF)アルゴリズムを実装する2つの方法を試しました。正確な最小二乗フィットアルゴリズムが必要

最初のコードは、LSFのWolframのページで説明されているように、単にテキストブックの手法です。 2番目のコードは、機械誤差を最小限に抑えるために方程式を再配置します。どちらのコードも私のデータに似た結果をもたらします。私はこれらの結果をMatlabのp = polyfit(x、y、1)関数と比較し、相関係数を使ってフィッティングの「良さ」を測定し、3つのルーチンをそれぞれ比較しました。私は3つの方法すべてが良い結果を生み出しましたが、少なくとも私のデータではMatlabのルーチンが最良の適合性を持っていました(他の2つのルーチンはお互いに同様の結果を出していました)。

Matlabのp = polyfit(x、y、1)関数は、最小二乗問題を解くためにVandermonde行列、V(n×2行列)およびQR分解を使用します。 MATLABコードでは、それは次のようになります。

V = [x1,1; x2,1; x3,1; ... xn,1] % this line is pseudo-code 
[Q,R] = qr(V,0); 
p = R\(Q'*y);  % performs same as p = V\y 

私は数学者でないんだけど、それがより正確だろう、なぜ私は理解していません。違いはわずかですが、私の場合、LSFからスロープを取得し、それを多数掛ける必要があるため、結果の精度が向上します。

私が入ることができない理由から、私は自分の仕事でMatlabのルーチンを使うことができません。だから、誰かがより正確な方程式に基づいたアプローチの推奨があるのだろうかと思っています。それは、上記の2つのアプローチよりも丸め誤差/機械の精度などの改善点です。

コメントありがとうございます。前もって感謝します。

+0

QRは方程式系を安定的に解く方法です。あなたのデータが縮退に近づいているならば、SVDはおそらくより良い方法です(計算上は高価ですが)。あなたが示したように、最小二乗問題は決して素朴に扱われるべきではありません。 –

答えて

0

多項式フィッティングの場合は、Vandermonde行列を作成し、線形システムを解くことができます。

もう1つの解決策は、Gauss-Newtonのような方法を使用してデータに適合させることです(システムは線形であるため、1回の反復は細かく行う必要があります)。メソッド間には違いがあります。おそらく理由の1つはRunge's phenomenonです。

+0

http://www.jstor.org/pss/2004623は両方のアプローチを組み合わせているようです。 –

+0

ガウス・ニュートンは、最小二乗適合よりも正確であるでしょうか?私はy = mx + b(1次)としてモデル化するだけなので、私はルンゲの現象を見るとは思わないでしょう。 – ggkmath

+0

私は最初の注文を見ていない、申し訳ありません。しかし、どのように精度を測定していますか?結果をMatlabと比較するだけですか? – Kknd

関連する問題