Pythonでユーザ定義フィット関数を作成

Originではユーザが作成したフィット関数を使ってフィットを行うことができますが、フィット関数の作成にPythonを使用することもできます。ここではPythonを使ったフィット関数の定義方法をご紹介し、その関数を使ってフィットを実行してみます。

Pythonでフィット関数を定義

Pythonコードの実行方法は下記リンクを参照してください。

作成手順

事前準備

ここで作成する関数ではPythonパッケージの「mpmath」「numpy」を使用しますのであらかじめインストールしてください。パッケージインストール後はOriginを再起動してください。パッケージが認識されずエラーになることがあります。
詳しいインストール方法については下記ページをご覧ください。

フィット関数の作成

フィット関数ビルダーを使ってフィット関数を作成します。今回作成する関数は下記の関数です。

作成する関数
  1. Origin上部のメニューから「ツール:フィット関数ビルダー」を選択してビルダーを起動します。
  2. 「新しい関数の作成」を選択して「進む」ボタンで次へ進みます。
  3. 新しい関数の作成を選択
  4. 関数名を"MassDiffusion"に設定、関数モデルは「陽関数」、関数形式は「Python関数(Vector)」に設定して「進む」で進みます。
  5. 関数名・関数モデル・関数形式を設定
  6. 独立変数を「x」、従属変数を「y」、パラメータを「y0,D,L」に設定し、「進む」で進みます。
  7. 変数・パラメータを設定
  8. Python関数(Vector)のテキストボックスに下記コードを入力します。
  9. from mpmath import nsum, exp, inf
    import numpy as np
    
    def MassDiffuse(x, y0, D, L):
    	#シグマ部分から8/π^2を外に出しておいて計算
    	sm = [float((nsum(lambda ii: 1/(2*ii+1)**2*exp(-D*(2*ii+1)**2*np.pi**2*t/(4*L**2)),[0, inf]))) for t in x]
    	#外に出した部分も含めて計算して返す
    	return [y0*(1-8/np.pi**2*t) for t in sm]
  10. 関数式(従属変数:y)のテキストボックスには下記の関数式を入力し、「進む」で進みます。
  11. y = MassDiffuse(x, y0, D, L)
    Pythonで関数を記述
  12. Pythonパッケージ確認(LabTalkスクリプト)には下記コードを入力し、「進む」で進みます。
  13. if(Python.chk("mpmath numpy") > 1)
    	return 1;
    return 0;
    パッケージ確認コードを記述
  14. 最後にこの画面まで来たら「完了」ボタンをクリックしてフィット関数作成を完了させます。
  15. 完了ボタンで作成終了

作成したフィット関数を使用してみる

作成した関数が問題なく動くかどうか確認します。
データは下記のものを利用します。

0.00	-0.078
0.20	 0.604
0.40	 0.842
0.60	 1.101
0.80	 1.029
1.00	 1.083
1.20	 0.828
1.40	 0.884
1.60	 0.991
1.80	 1.005
2.00	 0.915
  1. データを選択した状態でOrigin上部メニューから 「解析:フィット:非線形曲線フィット」を選択します。
  2. カテゴリを「UserDefined」にし、関数を作成した「MassDiffusion」に設定します。
  3. MassDiffusion関数を選択
  4. 「パラメータ」タブに移動し、各パラメータの初期値をy0=1,D=0.5,L=0.5に設定します。
  5. パラメータの初期値を設定
  6. 「フィット」ボタンでフィットを実行すると下記のバラメータ値に収束します。
  7. y0 = 0.97846, D = 0.37563, L = 0.43781

    フィットレポート

補足

プログラミングのコードを使ったフィット関数の作成方法としてOriginCを使うこともできますが、同じ関数であればPythonで定義したフィット関数のほうが高速に動作します。
詳しくは下記Origin開発元のブログにて紹介されておりますのでご関心がありましたらご覧ください。

PythonとOriginCの比較

"originpro"パッケージに導入されているクラスの一覧やリファレンスは下記リンクから確認できます。

前回の連載はこちら

Python連載企画一覧ページ

page_top_icon