このコマンドによって,Marquardt-Levenbergアルゴリズムによる非線形最小二乗 推定の機能が組み込まれます.これを使えば,任意のデータの組(x, y)の 集まりに対して,どのようなユーザ定義関数を推定することもできます. x,y と関数の返り値の型は実数である必要があります.関数の本体の中に現れる 全ての変数は推定パラメータとして使っても構いません(調整可能なパラメータの ないモデル関数には意味がありません).書式は:
fit <関数> '<データファイル>' {using x:y{:dy}} '<パラメータファイル>' or fit <関数> '<データファイル>' {using x:y{:dy}} via <変数1>, <変数2>, ...
と書きます.<関数>は,f(x)という形式のあらかじめユーザが定義した関数です. <データファイル>はplotコマンドのように扱われます.デフォルトでは,xが第1列, yが第2列です.これらは,`using x:y` によって変更することができます. オプションのdyは,各yの値に対する個別の不確定性を含む列を指定します. これらは,推定の時に重みとして使われます.もし,これらが与えられてい なければ,全ての不確定性は均等に分布していると仮定されます. 開始パラメータはファイルのなかで指定することができます. そのファイル中,各行は
変数 = 値
という形式です('#'で分けられた注釈や空行も可能です).
変数 = 値 # FIXED
という形式は,この変数を `固定パラメータ` ,つまり,初期化されるが 変更はされない,として扱うことを意味します.これを指定することは, 必ずしも必要ではありませんが,意味をはっきりさせるために時として役に 立ちます.開始値を指定する他の方法はGNUPLOTのセッション中の変数の現在の 値を開始パラメータとして使うことです.この場合は,`via` キーワードを含む 形式が使われます.そこでは調節可能な変数の名前だけを与える必要があります.
各繰り返しのステップの後で,推定の状態についての詳しい情報が,画面と ログファイル "fit.log" の両方に与えられます.推定の履歴が失われない ように,このファイルは決して消されずにいつも追加されます.各繰り返しの ステップの後でキーを押すことによって,推定処理に割り込むことができます. そして,推定を止める(パラメータの現在の値を採用する)か,推定を続けるか, 環境変数FIT_SCRIPTで指定されたgnuplotのコマンド(例えば,plot コマンドや あるファイルの読み込みなどが便利でしょう)を実行するかの選択ができます.
実行中は,この変数には常に1から始まる現在のデータ点の番号が 入ります.多岐推定を実装するために,これをモデルの関数の中で 使うことができます.
推定の際にi個のデータ点をいつも読み飛ばすために,正の整数を 指定することができます.これによって,結果の厳密さを 下げる代わりに,実行速度が向上します.
デフォルトのイプシロン限界(1e-5)の変更を指定することが できます.2回の繰り返しのステップの間で残差二乗和が, この数字の割合より小さく変化した時に,推定'収束した' と見なします.
ログファイルのパスを'./fit.log' から変更する (書き込みの許可が必要).
ユーザ割り込みの後に実行するコマンドの指定.
f(x) = a*x**2 + b*x + c fit f(x) 'measured.dat' 'start.par' fit f(x) 'measured.dat' using 3:7 'start.par' fit f(x) './data/trash.dat' using 1:2:3 via a, b, c
update
GNUPLOT で使える関数は,引数として,特に断らない限り,整数,実数,複 素数をとれることを除いては, Unix の数学ライブラリの対応する関数と同 じものです.BASIC で使われているような `sgn` 関数も利用可能です.
関数は引数の絶対値を返します.戻り値は引数と同じ型を持ちます. 複素数引数については,abs(x) は複素平面における x の長さと定義されて います.(つまり,sqrt(real(x)**2 + imag(x)**2) )
関数は引数のアークコサイン(逆余弦)をラジアン単位で返します
関数は複素数の偏角をラジアン単位で返します.
関数は引数のアークサイン(逆正弦)をラジアン単位で返します.
関数は引数のj0次ベッセル関数を返します.引数はラジアン単位で 与えます.
関数は引数のy1次ベッセル関数を返します.引数はラジアン単位で 与えます.
関数は引数のy0次ベッセル関数を返します.引数はラジアン単位で 与えます.
関数は引数のy1次ベッセル関数を返します.引数はラジアン単位で 与えます.
関数は引数よりも小さくない最小の整数を返します.複素数引数に対 しては,`ceil` は引数の実部よりも小さくない最小の整数を返します.
関数は引数の余弦を返します.引数はラジアン単位で与えます.
関数は引数の双曲余弦を返します.引数はラジアン単位で与えます.
関数は引数の誤差関数の実部を返します. 引数が複素数の場合は,虚部は無視されます.
関数は1から引数の誤差関数を引いたものを返します. 引数が複素数の場合は,虚部は無視されます.
関数は引数の指数関数(`e`の引数乗)を返します.
関数は引数よりも大きくない最大の整数を返します.複素数引数に 対しては,`floor` は引数の実部よりも大きくない最大の整数を返します.
関数は引数の実部のガンマ関数を返します.整数 n については gamma(n+1) = n!です.引数が複素数の場合は,虚部は無視されます.
関数は引数の実部の不完全ベータ関数を返します.p, q > 0 かつ x は [0:1] をとります.引数が複素数の場合は,虚部は無視されます.
関数は引数の実部の逆誤差関数を返します.
関数は引数の実部の不完全ガンマ関数を返します.a > 0 かつ x >= 0. 引数が複素数の場合は虚部は無視されます.
関数は引数の虚部を実数として返します.
関数は引数の実部の逆正規分布関数を返します.
関数は引数を0に近くなるように丸めた整数を返します.
関数は引数の実部のガンマ関数の自然対数を返します.
関数は引数の( e を底とする)自然対数を返します.
関数は引数の 10 を底とする対数を返します.
関数は引数の実部の正規分布(ガウス分布)関数を返します.
関数は,引数の実部を乱数種(seed)として,[0:1] 区間の疑似乱数を 返します.乱数種が負の場合(x < 0)は,系列は(再)初期化されます. 引数が複素数の場合,虚部は無視されます.
関数は引数の実部を返します.
関数は引数が正ならば1,負ならば-1,ゼロならば0を返します. 引数が複素数の場合には,虚部は無視されます.
関数は引数の正弦を返します.引数はラジアン単位で与えます.
関数は引数の双曲正弦を返します.引数はラジアン単位で与えます.
関数は引数の平方根を返します.
関数は引数の正接を返します.引数はラジアン単位で与えます.
関数は引数の双曲正接を返します.引数はラジアン単位で与えます.
GNUPLOTにおける演算子(operators)は対応するC言語の演算子と同じものです. ただし,引数としては,特に断わらない限り,整数,実数,複素数のいずれ も利用可能です.またFORTRANにある冪(べき)乗演算子**が利用可能です.
括弧を使うことによって演算の順序を変更できます.
以下は利用可能な2項演算子とその使い方の一覧です.
記号 使用例 説明 ** a**b 冪(べき)乗 * a*b 積 / a/b 商 % a%b * 剰余 + a+b 和 - a-b 差 == a==b 等しい != a!=b 等しくない & a& b * ビット毎の AND ^ a^b * ビット毎の exclusive OR | a|b * ビット毎の inclusive OR & & a& & b * 論理的 AND || a||b * 論理的 OR ?: a?b:c * 3項演算
説明欄に星印(*)のついた演算子の引数は整数でなければなりません.
論理演算子 AND(&&) と OR(||) は,C 言語同様に必要最小限の評価しか行い ません.すなわち,&& の第2引数は第1引数が偽なら評価されませんし,|| の第2引数は第1引数が真なら評価されません.
3項演算子はまず第1引数(a)を評価します.これが真(ゼロでない)ならば, 第2引数(b)を評価し,その結果を返します.それ以外の場合には第3引数 (c)を評価し,その結果を返します. 4 unary 以下は利用可能な単項演算子とその使い方の一覧です.
記号 使用例 説明 - -a 負符号 ~ ~a * 1の補数 ! !a * 論理的否定 ! a! * 階乗
説明欄に星印(*)のついた演算子の引数は整数でなければなりません.
階乗演算子(!)は大きな値を返せるように実数を返します.