2

ここに示す最小二乗近似(LSF)アルゴリズムを実装する2つの方法を試しました。

最初のコードは、LSFのWolframのページで説明されているように、単に教科書のアプローチです。2番目のコードは、マシンエラーを最小限に抑えるために方程式を再配置します。どちらのコードも、私のデータに対して同様の結果を生成します。これらの結果をMatlabのp=polyfit(x、y、1)関数と比較し、相関係数を使用して適合度を測定し、3つのルーチンのそれぞれを比較しました。3つの方法すべてで良好な結果が得られましたが、少なくとも私のデータでは、Matlabのルーチンが最適でした(他の2つのルーチンは互いに同様の結果でした)。

Matlabのp=polyfit(x、y、1)関数は、ファンデルモンド行列、V(nx 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つのアプローチよりも改善された、より正確な方程式ベースのアプローチの推奨事項を誰かが持っているかどうか疑問に思います。

コメントをいただければ幸いです。前もって感謝します。

4

1 に答える 1

0

多項式フィッティングの場合、すでに行ったように、ヴァンデルモンド行列を作成して線形システムを解くことができます。

もう 1 つの解決策は、 Gauss-Newtonなどの方法を使用してデータを適合させることです (システムは線形であるため、1 回の反復でうまくいくはずです)。方法には違いがあります。考えられる理由の 1 つは、ルンゲ現象です。

于 2010-12-28T14:16:19.173 に答える