Wed, November 03, 2004

Igor Pro lecture No. 36

複数ファイルの自動解析:CurveFit(中級)

前回、ファイルの自動読み込みを実現するプログラムを作成した。今回は、数行のプログラムを書き足し、自動的に解析するプログラムを作成しよう。まずは、以下のプログラムをProcedure Windowを開いて入力しよう。前回のファイルを保存している人は、それを開いて足りない部分を書き足すだけでよいだろう。

前回と今回の例題は、あるスペクトル測定において、特性緩和時間が徐々に変化していく結果を想定している。計測時間(tt)が計測回数に比例するとして、緩和スペクトルの特性時間(tau)の経時変化を分析してほしい。

Macro LoadTest()
PauseUpdate
Silent 1
Make/O/D/N=30 tau, tt
tt=p

loadwave/Q/G/N
variable i=0
do
LoadWave/Q/G/N S_path+S_filename[0, 3]+num2str(i+1)+".txt"
duplicate/O wave1 $("spec"+S_filename[0, 3]+num2str(i+1))
CurveFit/N/Q exp, wave1 /X=wave0
tau[i]=1/K2

i+=1
while(i<30)
duplicate/O wave0 lagtime
killwaves wave0, wave1
end

まずはじめに30回分の解析結果を格納するためのwave、tt および tau を用意した。tt は測定時刻だが、今回は測定回数に比例するとして、tt=p とした。

do ループの中身を見て欲しい。CurveFitというコマンドは、Analysis メニューからCurve fitting... を呼び出したのと等価なコマンドだ。/Nは、回帰中の途中結果を表示しないオプションで、/Qはヒストリに記録を残さないオプションだ。その後は、組み込み関数の略号(expは単一指数関数)、フィッティングしたい y wave をコンマで区切って続ける。x wave を割り当てるのは、/Xフラッグだ。余談だが、自作の関数でフィットしたい場合には、CurveFit ではなく、FunctionFit という命令を用いる。CurveFit が使えるのは、sin, cos, gauss, line など13個の組み込み関数だ。この場合、フィッティング結果はK0, K1, K2, ...といったグローバル変数に返される。この変数はもちろん定義不要だ。y = K0+K1*exp(-K2*x) という関数にフィットしたのだから、特性緩和時間 tau は K2の逆数に対応する。

 以上、プログラムが完成したらMacros メニューから実行してみよう。そして得られた tau を tt に対してプロットしてみよう。下図のようなグラフができたら完成だ。30個のデータは、筆者がこのような特性時間の経時変化を想定して作ったファイルだったのだ。得られた結果を sigmoid 関数を使ってCurveFit してみても面白いだろう。各自試みること。

posted at November 3, 2004 12:37 AM

« Igor Pro lecture No. 35 | ホームに戻る | Igor Pro lecture No. 37 »

さんのサイン・インを確認しました。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?


Polymer Molecular Engineering Laboratory
Department of Polymer Science and Engineering,
Kyoto Institute of Technology,
Matsugasaki, Sakyo-ku, Kyoto 606-8585, JAPAN