NAG特殊関数でフィットする
サマリー
Originで、NAG特殊関数を使ったOrigin Cフィット関数を定義することができます。特殊関数を評価するのにNAGルーチンを呼ぶことができます。
必要なOriginのバージョン:8.0 SR6
学習する項目
このチュートリアルでは、以下の項目について説明します。
- フィット関数オーガナイザでフィット関数を作成する
- NAG特殊関数を使ったフィット関数を作成する
サンプルとステップ
次のモデルをフィットします。
この場合、
、
、
はデータをフィットすることで求めるモデル用のパラメータです。そして、
と
は、それぞれ次数0と次数1の第一種修正ベッセル関数です。このサンプルでは、このチュートリアルの最後にあるサンプルデータを使用します。フィットの手順は、次のステップに沿って行います。
F9 を押し、フィット関数オーガナイザを開き、 FittingWithNAGSpecialFuncという名前の新しいカテゴリーを作成します。この新しいカテゴリーに、新しいフィット関数 FittingWithBessel を以下のように定義します。
-
関数名: FittingWithBessel 実現方式: ユーザ定義 独立変数: t 従属変数: inorm パラメータの名前: A,t0,td 定義形式: Origin C 関数:
「関数」ボックスの近くにあるボタン(アイコン)をクリックしてコードビルダを開き、次のようにフィット関数を定義して、コンパイルします。
#include <origin.h> // ここにincludeファイルを追加します。 // 例えば、NAGライブラリからの関数でフィットする場合、 // ここにNAG関数のヘッダファイルを追加します。 #include <oc_nag8.h> // このファイルに定義したい他のOrigin C関数に対するコードをここに追加し、 // フィット関数でアクセスできるようにします。 // 他のファイルがワークスペースにロードされ、コンパイルされていれば、そのファイルで定義されている // C関数にアクセスでき、関数は上記でインクルードしたヘッダファイルに // プロトタイプがあります。 // 関数コード内でNLSFオブジェクトのプロパティとメソッドにアクセスできます。 // 関数の定義には、C言語のシンタックスを使います。 // 例えば、パラメータ名がP1の場合、関数定義に p1 と使うことはできません。 // 分数を使用する場合には、1/2のような整数の除算は0になり、0.5ではありません。 // 正しい値にするには、0.5または1/2.0を使います。 // より詳細な情報およびサンプルは、Originヘルプファイルの「ユーザ定義フィット関数」 // を参照してください。 //---------------------------------------------------------- // void _nlsfFittingWithBessel( // フィットパラメータ: double A, double t0, double td, // 独立変数: double t, // 従属変数: double& inorm) { // 編集可能部分の開始 //inorm= A* exp(-td/2.0/(t-t0)) * ( s18aec(td/2.0/(t-t0),NAGERR_DEFAULT)+s18afc(td/2.0/(t-t0),NAGERR_DEFAULT) ); static NagError fail1; static NagError fail2; double dtemp = td/2.0/(t-t0); inorm= A* exp(-dtemp) * ( s18aec(dtemp,&fail1)+s18afc(dtemp,&fail2) ); if(fail1.code !=NE_NOERROR) printf("%s\n",fail1.message); if(fail2.code !=NE_NOERROR) printf("%s\n",fail2.message); // 編集可能部分の終了 }
関数をシミュレーションする
関数本体のコードを入力したら、コードビルダの「コンパイル」ボタンをクリックして、シンタックスにエラーがないかチェックすることができます。そして、「ダイアログに戻る」ボタンをクリックして、フィット関数オーガナイザダイアログボックスに戻ります。「保存」ボタンをクリックして、FDFファイル(関数定義ファイル)を生成します。
FDFファイルがあれば、「シミュレート」ボタンをクリックして、曲線のシミュレーションを行うことができ、これは初期値を求めるのに役立ちます。「simcurve」ダイアログで、適切なパラメータ値やX範囲を入力すると、「プレビュー」パネルに曲線がどのように表示されるのかが表示されます。
パラメータの初期値をセットする
これはユーザ定義のフィット関数なので、データのフィットを実行する前に、パラメータの推定初期値を与える必要があります。「非線形曲線」フィットダイアログの「パラメータ」タブで手動でセットすることができます。以下のサンプルデータで示す内容では、パラメータの初期値を A = 1, td = 1, t0 = 1のようにセットします。パラメータが初期化されると、サンプルデータの右側で示すようにフィットを実行して、フィット結果を取得することができます。
サンプルデータ
以下のサンプルデータをコピーし、インポートウィザードを使用してクリップボードからデータをインポートします。そして、指定の初期値を使ってパラメータの設定を行ってください。A = 1, td = 1, t0 = 1.