Thu, July 15, 2004
Igor Pro lecture No. 7
Functionの作成例:フィッティング関数
Igor によるプログラミングは、主にMacro, Proc, Functionで始めます。Macroは、IgorのMacrosメニューから呼び出しが可能であり、メニューに表示させたくないマクロは、Procで書き始めます。MacroとProcによって、自由度の高いプログラム作成が可能ですが、速度が遅いことが欠点です。後日説明するSilent命令である程度の高速化が行えますが、スピード勝負のサブルーチンは、Functionを使って書くべきです。ただし、Functionにはいろいろな制約があり、変則的にExecute命令を使うこともあります。これについても後日説明します。さて、今回はプログラミングのためのFunctionではなく、むしろ前回作ったノイズ入りデータを、ユーザーが作成した関数に対してフィッティングする事を試みます。Windowsメニューから、Procedure Window(コマンド+Mキー)を開いておいて下さい。
■Functionの基本は、
Function myFunction(x)
variable x
プログラム命令をここに書く
必要に応じて Return命令をおく
End
です。y=f(x)と記述したとき、「fという関数は、xの関数である」という意味だったと思います。それと同じように、myFunctionは、xの関数なのです。
■フィッティングには未知の係数があって、それを求めるのが目的であるため、フィッティング用の関数は、
Function myFunction(w,x): FitFunc
wave w
variable x
return 式をここに書く
end
と書くのが基本です。前回作成したデータをフィットするための関数を作ってみましょう。
Function TestFunc(w,x): FitFunc
wave w
variable x
return w[0]*x^2+w[1]*x
end
ここで、w[0]とw[1]は、xの2次と1次の係数です。今回の場合は、すでに答えはわかっていますが、通常はこのw[0], w[1]を決定する事がフィッティングの目的です。
■Igorにはじめから組み込まれている関数は、それぞれの係数が全く未知でもよいのですが、ユーザー定義関数にはある程度近い値(推測値)が必要です。またこの推測値は適切な値でないと真の値に収束せず、場合によってはとんでもない解析結果がはじき出されます。
フィッティング結果を返すためのwaveを作成しましょう。今回は結果も既知であるので、
make/O/D/N=2 w={1,3}
でよいでしょう。
■次にグラフの方も準備が必要です。Graphメニューから"Show Info"を呼び出し、グラフの下に現れた○と□のマーカーカーソルをグラフの両端にマウスでセットしてください。
■いざフィッティング(その1) Analysisメニューから、"CurveFitting..." を選んで、以下の手順でフィッティングを行って下さい。 (1)Functionメニューから関数を選ぶ(今回はTestFunc) (2)Y Data と X Data を選ぶ(今回は、それぞれ wave1 とwave0) (3)Data optionsの欄にある、Rangeで、Cursorsボタンを押して、カーソルをセットする。(カーブフィッティングはこの範囲で実行される。) (4)Coefficientsの欄にある、Coefficient Waveから係数設定用のwaveを選ぶ(今回は、w) (5)Do Itでフィッティングを実行する。
実行した結果はどうだろうか?今回はわざと意地悪しており、xの小さいところでフィッティングがうまくいかないはずだ。縦軸のデータの変化がlogスケールであるため、1+gnoise(0.1)で加えた揺らぎ幅が、データ点にかなり依存した結果、ずれが生じるのだ。このような場合には、フィッティングの重みwaveを作成する。
■makeが「新規wave作成」であるのに対して、duplicateは、「waveの複製」である。
Duplicate/O wave1 wave2
によって、wave2という新たなコピーが作成される。
さてカーブフィッティングを呼び出し、Data Optionsパネルの"Weighting"から、先ほど作成したwave2を選ぼう。これにより、縦軸のレベルに対応してカーブフィッティング重み付け(大きなyほど解析で重視する)が行われる。以下は、その結果である。
フィッティングがうまくいった。
posted at July 15, 2004 05:22 PM
« Igor Pro lecture No. 6 | ホームに戻る | Igor Pro lecture No. 8 »
さんのサイン・インを確認しました。 (サイン・アウト)
(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)