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.
-
サンプルデータ |
Results |
X |
Y |
2 |
0.7868954118 |
2.080808081 |
0.8133022141 |
2.161616162 |
0.8178216765 |
2.242424242 |
0.8427866729 |
2.323232323 |
0.8315815363 |
2.404040404 |
0.8484657180 |
2.565656566 |
0.8618233553 |
2.646464646 |
0.8745962570 |
2.727272727 |
0.8921620316 |
2.808080808 |
0.8687399759 |
|
|
|