次のページ 前のページ 目次へ

12. fit

このコマンドによって,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 コマンドや あるファイルの読み込みなどが便利でしょう)を実行するかの選択ができます.

特別なGNUPLOTの変数:

FIT_INDEX:

実行中は,この変数には常に1から始まる現在のデータ点の番号が 入ります.多岐推定を実装するために,これをモデルの関数の中で 使うことができます.

FIT_SKIP:

推定の際にi個のデータ点をいつも読み飛ばすために,正の整数を 指定することができます.これによって,結果の厳密さを 下げる代わりに,実行速度が向上します.

FIT_LIMIT:

デフォルトのイプシロン限界(1e-5)の変更を指定することが できます.2回の繰り返しのステップの間で残差二乗和が, この数字の割合より小さく変化した時に,推定'収束した' と見なします.

環境変数:

FIT_LOG

ログファイルのパスを'./fit.log' から変更する (書き込みの許可が必要).

FIT_SCRIPT

ユーザ割り込みの後に実行するコマンドの指定.

例:

    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

12.1 functions

GNUPLOT で使える関数は,引数として,特に断らない限り,整数,実数,複 素数をとれることを除いては, Unix の数学ライブラリの対応する関数と同 じものです.BASIC で使われているような `sgn` 関数も利用可能です.

abs

関数は引数の絶対値を返します.戻り値は引数と同じ型を持ちます. 複素数引数については,abs(x) は複素平面における x の長さと定義されて います.(つまり,sqrt(real(x)**2 + imag(x)**2) )

acos

関数は引数のアークコサイン(逆余弦)をラジアン単位で返します

arg

関数は複素数の偏角をラジアン単位で返します.

asin

関数は引数のアークサイン(逆正弦)をラジアン単位で返します.

besj0

関数は引数のj0次ベッセル関数を返します.引数はラジアン単位で 与えます.

besj1

関数は引数のy1次ベッセル関数を返します.引数はラジアン単位で 与えます.

besy0

関数は引数のy0次ベッセル関数を返します.引数はラジアン単位で 与えます.

besy1

関数は引数のy1次ベッセル関数を返します.引数はラジアン単位で 与えます.

ceil

関数は引数よりも小さくない最小の整数を返します.複素数引数に対 しては,`ceil` は引数の実部よりも小さくない最小の整数を返します.

cos

関数は引数の余弦を返します.引数はラジアン単位で与えます.

cosh

関数は引数の双曲余弦を返します.引数はラジアン単位で与えます.

erf

関数は引数の誤差関数の実部を返します. 引数が複素数の場合は,虚部は無視されます.

erfc

関数は1から引数の誤差関数を引いたものを返します. 引数が複素数の場合は,虚部は無視されます.

exp

関数は引数の指数関数(`e`の引数乗)を返します.

floor

関数は引数よりも大きくない最大の整数を返します.複素数引数に 対しては,`floor` は引数の実部よりも大きくない最大の整数を返します.

gamma

関数は引数の実部のガンマ関数を返します.整数 n については gamma(n+1) = n!です.引数が複素数の場合は,虚部は無視されます.

ibeta

関数は引数の実部の不完全ベータ関数を返します.p, q > 0 かつ x は [0:1] をとります.引数が複素数の場合は,虚部は無視されます.

inverf

関数は引数の実部の逆誤差関数を返します.

igamma

関数は引数の実部の不完全ガンマ関数を返します.a > 0 かつ x >= 0. 引数が複素数の場合は虚部は無視されます.

imag

関数は引数の虚部を実数として返します.

invnorm

関数は引数の実部の逆正規分布関数を返します.

int

関数は引数を0に近くなるように丸めた整数を返します.

lgamma

関数は引数の実部のガンマ関数の自然対数を返します.

log

関数は引数の( e を底とする)自然対数を返します.

log10

関数は引数の 10 を底とする対数を返します.

norm

関数は引数の実部の正規分布(ガウス分布)関数を返します.

rand

関数は,引数の実部を乱数種(seed)として,[0:1] 区間の疑似乱数を 返します.乱数種が負の場合(x < 0)は,系列は(再)初期化されます. 引数が複素数の場合,虚部は無視されます.

real

関数は引数の実部を返します.

sgn

関数は引数が正ならば1,負ならば-1,ゼロならば0を返します. 引数が複素数の場合には,虚部は無視されます.

sin

関数は引数の正弦を返します.引数はラジアン単位で与えます.

sinh

関数は引数の双曲正弦を返します.引数はラジアン単位で与えます.

sqrt

関数は引数の平方根を返します.

tan

関数は引数の正接を返します.引数はラジアン単位で与えます.

tanh

関数は引数の双曲正接を返します.引数はラジアン単位で与えます.

12.2 operators

GNUPLOTにおける演算子(operators)は対応するC言語の演算子と同じものです. ただし,引数としては,特に断わらない限り,整数,実数,複素数のいずれ も利用可能です.またFORTRANにある冪(べき)乗演算子**が利用可能です.

括弧を使うことによって演算の順序を変更できます.

binary

以下は利用可能な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!        * 階乗

説明欄に星印(*)のついた演算子の引数は整数でなければなりません.

階乗演算子(!)は大きな値を返せるように実数を返します.


次のページ 前のページ 目次へ