27 Fit

fit コマンドはユーザ定義関数を (x,y) または (x,y,z) の形式のデータ点の 集合への当てはめを可能にします。それには Marquardt-Levenberg 法による 非線形最小自乗法 (NLLS) の実装が用いられます。関数内部に現われるユーザ 定義変数はいずれも当てはめのパラメータとして使うことができます。ただ、 その関数の返り値は実数である必要があります。

書式:

     fit {[xrange] {[yrange]}} <function> '<datafile>'
         {datafile-modifiers}
         via '<parameter file>' | <var1>{,<var2>,...}

範囲 (xrange,yrange) は、当てはめられるデータ点を一時的に制限するのに 使うことができ、その範囲を超えたデータは全て無視されます。その書式は plot コマンド同様

     [{dummy_variable=}{<min>}{:<max>}],

です (plot ranges 参照)。

< function> は通常はあらかじめユーザ定義された f(x) または f(x,y) の形 の関数ですが、gnuplot で有効な任意の数式を指定できます。

< datafile> plot コマンドと同様に扱われます。plot datafile の修 飾子 (using, every,...) は、smooth とあまり勧められない thru を除いて、全て fit に使うことができます。plot datafile を参照して ください。

当てはめる 1 変数関数 y=f(x) へのデフォルトのデータの書式は {x:}y か x:y:s で、これらはデータファイルへの using 指定子で変更できます。こ の 3 番目の項目 (列番号、または数式) が与えられた場合は、それは対応す る y の値の標準偏差として解釈され、それはそのデータへの重み (=1/s**2) を計算するのに使われます。そうでなければ、全てのデータは同じ重み (1) で計算されます。using オプションを全く指定しなかった場合、3 列目のデ ータがあった場合でもデータから y の偏差は読まれませんので、その場合は 重み 1 になります。

2 変数関数 z=f(x,y) を当てはめる場合、データの書式は using による 4 つの項目 x:y:z:s が要求されます。これは完全に全てが与えられなければな りません-不足する項目に対してはどの列もデフォルトは仮定されていません。 各データ点の重みは上と同様に 's' から計算されます。もし誤差評価を持っ ていなければ、定数値を定数式として指定すればいいでしょう (plot datafile using 参照)。例えば using 1:2:3:(1) のように。

複数のデータ集合も複数の 1 変数関数に同時に当てはめることも、y を '仮 変数' とすれば可能です。例えばデータ行番号を使い、2 変数関数への当ては め、とすればいいでしょう。fit multi-branch を参照してください。

via 指定子はパラメータの調節を直接か、またはパラメータファイルを参照 することによって行うかを指定します。

例:

     f(x) = a*x**2 + b*x + c
     g(x,y) = a*x**2 + b*y**2 + c*x*y
     FIT_LIMIT = 1e-6
     fit f(x) 'measured.dat' via 'start.par'
     fit f(x) 'measured.dat' using 3:($7-5) via 'start.par'
     fit f(x) './data/trash.dat' using 1:2:3 via a, b, c
     fit g(x,y) 'surface.dat' using 1:2:3:(1) via a, b, c

反復の個々のステップの後で、当てはめの現在の状態についての詳細な情報が 画面に表示されます。そし最初と最後の状態に関する同じ情報が "fit.log" というログファイルにも書き出されます。このファイルは前の当てはめの履歴 を消さないように常に追加されていきます。これは望むなら削除、あるいは別 な名前にできます。コマンド set fit logfile を使ってログファイルの名 前を変更することもできます。

gnuplot が、set fit errorvariables を使えるようにインストールされて いて、そのコマンドを使用した場合、各当てはめパラメータの誤差は、そのパ ラメータと似た名前 ("_err" が追加された名前) の変数に保存されます。よ ってその誤差を更なる計算の入力として使用することができます。

当てはめの反復は Ctrl-C を押すことで中断できます (MSDOS と Atari マル チタスクシステムでは Ctrl-C 以外の任意のキー)。現在の反復が正常に終了 した後、(1) 当てはめを止めて現在のパラメータの値を採用する, (2) 当ては めを続行する, (3) 環境変数 FIT_SCRIPT で指定した gnuplot コマンドを 実行する、のいずれかを選ぶことができます。FIT_SCRIPT のデフォルトは replot であり、よってもしデータと当てはめ関数を一つのグラフにあらか じめ描画してあれば、現在の当てはめの状態を表示することができます。

fit が終了した後は、最後のパラメータの値を保存するのに update コマ ンドを使います。その値は再びパラメータの値として使うことができます。 詳細は update を参照。


竹野茂治@新潟工科大学
2007年8月27日