ここに示す最小二乗近似(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つのアプローチよりも改善された、より正確な方程式ベースのアプローチの推奨事項を誰かが持っているかどうか疑問に思います。
コメントをいただければ幸いです。前もって感謝します。