鋭いピークの関数を積分でフィットする

内容

  1. 1 サマリー
  2. 2 学習する項目
  3. 3 サンプルとステップ
    1. 3.1 データをインポート
    2. 3.2 フィット関数を定義する
    3. 3.3 曲線をフィットする
    4. 3.4 フィット結果
    5. 3.5 サンプルデータ


サマリー

このチュートリアルでは積分関数内に鋭いピークを持つ積分フィット関数を定義し、その関数でデータをフィットする方法を示します。

積分関数内に鋭いピークを含んでいるので、それを狭い間隔で積分する必要があります。そのため、このピークを3つの部分に区分けして積分を行います。

必要なOriginのバージョン:Origin 9.0 SR0

学習する項目

このチュートリアルでは、以下の項目について説明します。

  • 積分フィット関数を定義する
  • 鋭いピークの関数を積分する
  • 積分の区間を複数に区分けする

サンプルとステップ

データのインポート

  1. 新規ワークブックを作成します。
  2. サンプルデータ の内容をワークブックにコピーします。
  3. 列Bを選択し、作図:シンボル図:散布図と操作します。グラフは次のようになります。
 
Fit Integral Peak G1.png

フィット関数を定義する

フィットする積分関数は次の式で表されます。

y=\log (\int_{0}^{1} \frac{1}{\sqrt{2\pi}b}e^{-\frac{(t-a)^2}{2b^2}-xt}\, dt)

aとbはフィット関数内のパラメータです。

初期パラメータ値は、a=1e-4, b=1e-4となります。積分関数内には中心がaにあり、太さが2b程度のピークがあります。そして、ピークの幅(2e-4)は積分の範囲から見ても、とても狭いことが分かります。正しくピークの中心あたりで積分される事を確認するために、積分範囲である[0,1] は3つの区分に分けられています。[0,a-5*b], [a-5*b,a+5*b], [a+5*b,1].この区分内で積分が施され、最終的に合計します。

フィット関数ビルダーツールでフィット関数を定義します。

  1. ツール:フィット関数ビルダーをメニューから選択します。
  2. フィット関数ビルダーダイアログの処理のゴールページで進むのボタンをクリックします。
  3. 関数名と関数形式のページでは関数カテゴリーの選択/新規名称のドロップダウンリストからUser Definedを選択します。次に関数名のエリアにfintpeakと入力し、関数形式算術式を選びます。最後にフィット中に積分を実行のチェックを付けます。それから、進むボタンをクリックします。
  4. 被積分関数ページでは被積分関数名の編集ボックス内にmyintと入力します。そして、被積分関数の変数の編集ボックスにはtを、引数の編集ボックスにはa, b, xを入力します。被積分関数ボックスに次のスクリプトを入力します。
    return 1/(sqrt(2*pi)*b)*exp(-(t-a)^2/(2*b^2)-x*t);
            
    

    それから、進むボタンをクリックします。

  5. 変数とパラメータのページでは、パラメータエリアにa, bを入力します。進むボタンをクリックします。
  6. 式形式の関数ページのパラメータタブでは、パラメータaとbの初期値を1e-4に設定します。それから被積分関数タブをクリックし、下限上側限界をそれぞれ0と1に設定し、abxはそれぞれa、b、xと入力してください。
  7. 式形式の関数ページで挿入ボタンをクリックします。クイックチェックのグループではx=編集ボックスに0を入力し、評価ボタンをクリックします。すると、y=9.3e-21と表示されるはずです。x=0の時にyは1へ近づかないといけないので、このピークが正しく積分されなかったことが分かります。積分を3つに区分し、関数内容ボックスに次のスクリプトを入力します。
    integral(myint, 0, a-5*b, a ,b ,x)+integral(myint, a-5*b, a+5*b, a ,b ,x)+
    integral(myint, a+5*b, 1, a ,b ,x)
            
    

    もう一度評価ボタンをクリックするとy=0.84が表示され、今回は正確にピークが積分されたことが分かります。

  8. 式形式の関数ページの関数内容ボックスを次のスクリプトで更新します。
    log(integral(myint, 0, a-5*b, a ,b ,x)+integral(myint, a-5*b, a+5*b, a ,b ,x)
    +integral(myint, a+5*b, 1, a ,b ,x))
            
    

    完了ボタンをクリックします。

曲線をフィットする

  1. 解析:フィット:非線形曲線フィットをメニューから選択します。NLFitダイアログで、設定タブを選択します。関数選択を選び、カテゴリドロップダウンリストからUser Definedを選びます。そして関数ドロップダウンリストではfintpeak関数を選びます。Note: 初期パラメータはフィット関数の定義中に設定されています。
  2. フィットボタンをクリックし、フィットを行います。

フィット結果

フィット曲線のグラフは次のようになります。

 
Fit Integral Peak G2.png

フィットパラメータは以下の通りです。

パラメータ 標準誤差
a 4.98302E-4 1.07593E-5
b 1.94275E-4 8.21815E-6

補正R二乗値は 0.99799です。つまり、このフィット結果はとても良いことを示しています。

サンプルデータ

x y
0 -0.00267
60 -0.01561
240 -0.05268
500 -0.10462
1000 -0.22092
1500 -0.31004
2000 -0.40695
3000 -0.61328
4000 -0.75884
5000 -0.9127
6000 -0.98605
7000 -1.18957
9000 -1.43831
10000 -1.41393
12000 -1.61458
15000 -1.88098
20000 -2.07792