2

gnuplot を使用して、多くの曲線の 1 次多項式 (F(x)=a*x+b) の適合パラメーターを取得したいと考えています。一部の曲線は、正確に直線で表されます。

たとえば、私のデータが次のように見える場合

1 1
2 2
3 3
4 4

これは、f(x)=x (パラメーター a=0、b=0) で表すことができます。

しかし、次のgnuplotコード

# regression line
f(x) = a*x + b
fit f(x) './test.dat' u 1:2  via a, b

以下のメッセージを表示して、適合パラメータを計算できません

Singular matrix in Invert_RtR

更新: fit 関数の反復回数を定義すると、gnuplot が「クラッシュ」しないようです

FIT_MAXITER = 1
# regression line
f(x) = a*x + b
fit f(x) './test.dat' u 1:2  via a, b

a=1 かつ b=0 である必要があります。しかし、gnuplot は

Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = 0.989067         +/- 0.004339     (0.4387%)
b               = 0.0761393        +/- 0.02692      (35.36%)

gnuplot に a と b の正しい値を計算させるにはどうすればよいですか?

4

3 に答える 3

4

私は2つの解決策を見つけました:

1) フィット関数に小さなオフセットを追加します。

f(x) = a*x + b + 1e-9

これにより、特異点の問題が回避され、完全に正しい適合が得られます (a = 1、b=-1e-9)。

2) b パラメータを完全に削除する

f(x) = a*x

これは、フィット ラインがすべて 0 を通過することを前提としていますが、これはもちろん希望どおりではない可能性があります。

于 2012-07-03T16:31:26.207 に答える
3

私が見ているように、問題はおそらくf(x)データに正確に適合できることです。データにゼロ以外の値を追加しても、エラーは発生しません。実際には、この正確なフィッティングは単純に発生しません (ノイズがあります)。とにかく、gnuplot が「フィット中のエラー」と言っているにもかかわらず、gnuplot は関数に正しくフィットしているようです。

追加によるソリューションFIT_MAXITER = 1は回避策になる可能性があります。FIT_MAXITER に定義する値が高いほど、フィッティングが向上します。ただし、値が高すぎると、フィッティングは正確になります (誤差は数値の精度よりも小さくなります)。

実際のデータに当てはめf(x)てみて、得られた結果を教えてください!

于 2013-01-13T16:24:11.293 に答える
0

いくつかのオプションがあります:

  • b変数をに置き換え、(b+1)後で結果から 1 を引きます。そうすれば、変数は消えず、gnuplot アルゴリズムは正常に適合し、数値エラーがゼロに達したときにエラーメッセージなしで終了します。

  • に非常に小さい開始値を与えますb

フィッティングの一般的な規則: パラメータは同じ大きさである必要があり、正しい大きさになるように初期化する必要があります。

于 2015-08-12T09:15:11.313 に答える