非線形曲線フィット

LabTalkの非線形フィットは、Xファンクションベースのコマンドです。3つのステップで操作し、各ステップで少なくとも1つのXファンクションを呼び出します。

  1. nlbegin: フィット処理を開始します。入力データ、フィット関数の種類、入力パラメータを定義します。
  2. nlfit: フィット計算を実行します。
  3. nlend どのパラメータをどのような形式で出力するかを選択します。

nlbeginではなく、以下のXファンクションでフィットモデルやデータにしたがってフィット処理を開始することもできます。

  • nlbeginr: 複数の従属/独立変数のモデルをフィットします。
  • nlbeginm: 行列をフィットします。
  • nlbeginz: XYZワークシートデータをフィットします。

スクリプトサンプル

以下は、上記で簡単に説明した手順のスクリプトサンプルです。

// 非線形フィットを開始、アクティブワークシートから 
// 列1 (X)と列2 (Y)の入力データを取り
// フィット関数を Gaussianとして指定し 
// ParamTreeという入力パラメータツリーを作成
nlbegin iy:=(1,2) func:=gauss nltree:=ParamTree;
  // 任意: ピークの中心をX = 5で固定 
  ParamTree.xc = 5;     // ピークの中心のXの値に5を割り当て
ParamTree.f_xc = 1;   // ピーク中心を固定(f_xc = 0は固定ではない)
// フィットを実行
nlfit;
// 任意: スクリプトウィンドウに結果を表示
type Baseline y0 is $(ParamTree.y0),; 
  type Peak Center is $(ParamTree.xc), and; 
  type Peak width (FWHM) is $(ParamTree.w);
// レポートシートなしでフィットセッションを終了
nlend;

パラメータツリーの注意

フィットパラメータを保存するデータツリーには、上記サンプルで述べた以外にも多くのオプションがあります。 以下のスクリプトコマンドは、ツリーノードのすべて(名前と値)を、スクリプトウィンドウに表示することで、同時に見ることができます。

// 値を持つ全ツリー構造を見るには
ParamTree.=;

Note: 計算を行うので、(パラメータツリーで固定オプションを0にセットして)固定でないフィットのパラメータ値は、初期値から変動します。 初期パラメータは、パラメータツリーの個々のノードにアクセスすることで、上記のサンプルで示すように、手動でセットしたり、Originで自動的にセットできます(下表のnlfn Xファンクションをご覧下さい)。

非線形フィットをサポートするXファンクションのテーブル

上記で与えられた3つに加え、非線形フィットを手助けするXファンクションがあります。 下表は、非線形フィットを制御するのに使用するXファンクションをまとめたものです。

名前 説明
nlbegin

ワークシートまたはグラフにあるXYデータに対してLabTalkのnlfitセッションを開始します。
Note:
このXファンクションは、独立/従属モデルのみをフィットします。複数の従属/独立関数に対しては、代わりにnlbeginr を使用します。

nlbeginr ワークシートデータに対してLabTalkのnlfitセッションを開始します。複数の従属/独立変数の関数をフィットに使用します。
nlbeginm

行列オブジェクトまたはグラフから行列データに対してLabTalkのnlfitセッションを開始します。

nlbeginz

ワークシートまたはグラフにあるXYZデータに対してLabTalkのnlfitセッションを開始します。

nlfn

パラメータ自動初期化オプションをセットします。

nlpara

パラメータ値と境界のGUI編集のためのパラメータダイアログを開きます。

nlfit

反復計算を実行してデータをフィットします。

nlend

フィットセッションを終了し、任意でレポートを作成します。

これらのXファンクションのそれぞれの説明については、Xファンクションリファレンスをご覧下さい。

線形フィットとの質の違い

線形フィットとは違い、非線形フィットは、分析解が無い方程式を反復計算によって、解きます。しかし、Xファンクションを呼び出して分析を実行するという考え方は同じです。 線形フィットが1つのXファンクション(線形フィットのセクションを参照)で1行のスクリプトを実行するのに対して、非線形フィットは少なくとも3つのXファンクションが必要です。