京都工芸繊維大学工芸科学部 生命物質科学域高分子機能工学部門 高分子物性工学研究室

  • JP
  • EN
  • menu

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

    複数ファイルの自動解析: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 してみても面白いだろう。各自試みること。