非線形最小2乗フィッティング

概要

 非線形最小2乗フィッティングは、フィッティング変数の一次結合式に帰着できないような評価式に対しても行える汎用的なフィッティング法です。 評価式はユーザが間数式の形で任意に与えることができます。 しかしiterationを用いて最小2乗誤差の極小値をサーチする手法をとるため、処理にある程度の時間がかかると同時に、フィッティング結果は思いもよらぬ極小値に収束する場合もあります。

フィッティング手順

 手順は少々複雑なので、以下実例に即してフィッティング手順を追ってみましょう。 ここでは、以下のようなデータを2つのGaussianでフィットを行うものとします。


 "Data | 一覧"でこの数値データを選択します。"Data | 曲線の生成 | 非線形最小2乗法"を選択し、以下の画面を開きます。


 「関数式」には評価式である2つのgaussianを、また変数dy/dAからdy/dGにはそれぞれのAからG変数で評価式を偏微分した間数式を以下のように入力します。
 

    function: A*exp(-((x-B)/C)^2)+D*exp(-((x-E)/F)^2)+G
    dy/dA:    exp(-((x-B)/C)^2)
    dy/dB:    A*exp(-((x-B)/C)^2)*2*((x-B)/C)*(1/C)
    dy/dC:    A*exp(-((x-B)/C)^2)*2*((x-B)/C)*(x-B)(1/C^2)
    dy/dD:    exp(-((x-E)/F)^2)
    dy/dE:    D*exp(-((x-E)/F)^2)*2*((x-E)/F)*(1/F)
    dy/dF:    D*exp(-((x-E)/F)^2)*2*((x-E)/F)*(x-E)(1/F^2)
    dy/dG:    1
 偏微分式は極力入力してください。iterationの効率が向上し計算速度が向上します。 偏微分式の入力がない場合、Topazは数値的に偏微分値を計算します。

 AからGにはiterationの初期値を入力します。初期値は収束性に大きく影響するだけでなく、iterationを正しい極小値に導くためにもできるだけ真の値に近い値を入力してください。

 今の場合、各パラメータには以下のような意味があります。

    A:    1番目のgaussianのピーク値
    B:    1番目のgaussianの中心x座標
    C:    1番目のgaussianの幅(厳密にはピーク値が1/eまで減少するときの中心x座標からのずれ)
    D:    2番目のgaussianのピーク値
    E:    2番目のgaussianの中心x座標
    F:    2番目のgaussianの幅(厳密にはピーク値が1/eまで減少するときの中心x座標からのずれ)
    G:    バックグラウンド値
 これらの値をグラフから大まかに読み取ってみましょう。 この作業を行うに当り、"Axis | 座標のウォッチング"を用いると座標値を速やかに読み取ることができます。
 "Axis | 座標のウォッチング"を選択するとビューアに赤色の十字カーソルが表示されます。 このカーソルは、キーにより移動可能であり、現在のカーソル位置をターミナルに表示します。 まず以下のようにデータのベースラインにカーソルを合わせてみます。


 この時のカーソルのy値(=0.38)から、以下の値が決定されます。

    A =     
    B =     
    C =     
    D =     
    E =     
    F =     
    G = 0.38
 次に下図のように2番目のピークにカーソルを合わせてみましょう。


 この時のカーソルのx値(=6.05)からEが決定され、y値(=2.36)からGを減じた値(=0.98)としてDが決定されます。

    A =     
    B =     
    C =     
    D = 0.98
    E = 6.05    
    F =     
    G = 0.38
 次に下図のように、ピーク値が約1/e(およそ1/3)まで減少したあたりにカーソルを合わせます。 この時のx値は6.73ですから、F = 6.73 - E(6.05) = 0.68となり、初期値の値は以下のようになります。


    A =     
    B =     
    C =     
    D = 0.98
    E = 6.05    
    F = 0.68
    G = 0.38
 同様の手順を小さな1番目のピークに対して行うことにより、最終的に以下の初期値テーブルが得られます。
    A = 0.51    
    B = 3.01
    C = 0.08    
    D = 0.98
    E = 6.05    
    F = 0.68
    G = 0.38
 Allowanceには収束を決める精度を入力します。(n+1)回目の最小2乗誤差とn回目の最小2乗誤差の差が、n回目の最小2乗誤差のAllowance (%)以下になったらiterationを終了します。 「FIT開始点」、「FIT終了点」、「出力開始X値」、「出力終了X値」、「分割数」、「スケーリング」の意味は 線形最小2乗法を参照してください。

 設定が終了したら、ESCを押してください。"フィッティングを行ないますか"と問い合わせがありますので、問題がなければyesを選択してください。 フィッティングが行われます。フィッティング結果はメッセージエリアに表示されます。 またこの結果は、生成された曲線と共に保存されます。 "Data | 一覧" でフィッティング曲線を選択し、"Data | 情報の表示"で表示できます。以下はフィット結果のグラフです。