D2MatE Top

実行例: [tkprog_X_path]/optimize/optimize_peakfit1/optimize_peakfit1.py

以下に典型的な実行例を示す。代表的なmode引数は、--modeが不要。

実行ディレクトリ: [tkprog_X_path]/optimize/optimize_peakfit1/test
入力データ: [tkprog_X_path]/optimize/optimize_peakfit1/test/peaks.xlsx
 入力ファイルのデフォルトは peaks.xlsx になっている。
 変更する場合は、起動時引数 --infile=path名 で指定する。

特徴: もっとも簡単な最小二乗法の例。線形最小二乗法は実装していないので、
optimize_peakfit1_fit_config.xlsx で与えられている初期値から非線形最小二乗法でフィッティングを行う

  1. 既に実行したファイルがある場合は削除する
    test> python ..\optimize_peakfit1.py clean
     ファイルを削除するかどうか聞いてくるので、
     ・ すべて削除する場合は all
     ・ 聞かれているファイル群だけ削除する場合は yes
     ・ 削除しない場合は no
     を入力し、ENTERを押す
     
  2. 初期化: 設定ファイル peaks.in、フィッティング変数ファイル peaks_parameters.csv を作成
    実行に必要なファイル: peaks.xlsx
    test> python ..\optimize_peakfit1.py init
    initの前段でcleanを実行するため、1と同じことを聞かれるので、all/yes/noを回答する。
     
    このプログラムでは線形最小二乗法を実装していないため、初期値は optimize_peakfit1_fit_config.xlsx から取得する。
     
    出力例(抜粋):
    config parameter file : D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks.in
    fitting parameter file: D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks_parameters.csv
    history file : D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks-history.xlsx

    Fitting configuration
    method : nelder-mead
    jac : 3-points
    tol : 1e-05
    nmaxiter: 1000
    nmaxcall: 10000
    y_scale :
    Fitting parameters red from [D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks_parameters.csv]:
    00: bg_c0= 0 (id=1) (linear=1) penality: 1 * (-1e+10 - 1e+10)
    01: bg_c1= 0 (id=1) (linear=1) penality: 1 * (-1e+10 - 1e+10)
    02: I0= 1 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
    03: xc= 0 (id=1) (linear=0) penality: 1 * (0 - 200)
    04: w= 0.5 (id=1) (linear=0) penality: 1 * (0.01 - 10)

    Save configuration parameters to [D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks.in]

    Error in tkfile.open(): [D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks.in] does not exist
    Warning in tkinifile.WriteString: Can not read [D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks.in]
    Save fitting parameters to [D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks_parameters.csv] (save_parameters)
    time at startup: 24/11/19 12:10:22
    time at end: 24/11/19 12:10:29
    Elapsed time from startup to end: 6.8875 sec
     
    作成されるファイル:
    config parameter file : D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks.in
    fitting parameter file: D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks_parameters.csv
     
  3. 入力データの確認: 入力データファイル peaks.xlsx を読み込み、プロットする
    test> python ..\optimize_peakfit1.py plot

     
  4. フィッティング変数の初期値の確認: 入力データファイル peaks.xlsx とフィッティング変数ファイル peaks_parameters.csv を読み込み、
    入力データとシミュレーション結果をプロットする
    test> python ..\optimize_peakfit1.py sim

     
  5. フィッティング: 非線形最小二乗法を実行する
    test> python ..\optimize_peakfit1.py fit

     
    1. コンソール出力 (peaks-out.txt):
      Final parameters:
      00: bg_c0= 0.11091 (id=1) (linear=1) penality: 1 * (-1e+10 - 1e+10)
      01: bg_c1= 0.00687364 (id=1) (linear=1) penality: 1 * (-1e+10 - 1e+10)
      02: I0= 1.39069 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
      03: xc= 0.288756 (id=1) (linear=0) penality: 1 * (0 - 200)
      04: w= 0.601388 (id=1) (linear=0) penality: 1 * (0.01 - 10)
      fmin= 1e+300

      Save configuration parameters to [D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks.in]
      Save fitting parameters to [D:\git\tkProg\tkprog_COE\optimize\optimize_peakfit1\test\peaks_parameters.csv] (save_parameters)


      Final data:
      x y initial final
      -2 0.07569 0.0972 0.09716
      -1.75 0.1288 0.09893 0.0989
      -1.5 0.06223 0.1008 0.1008
      -1.25 0.1321 0.1043 0.1043
      -1 0.09614 0.1182 0.1181
      -0.75 0.1369 0.1762 0.1761
      -0.5 0.3105 0.3565 0.3565
      -0.25 0.7091 0.7326 0.7325
      1.207e-15 1.232 1.215 1.215
      0.25 1.497 1.498 1.498
      0.5 1.333 1.344 1.344
      0.75 0.8256 0.8883 0.8883
      1 0.4527 0.4611 0.4612
      1.25 0.3241 0.2276 0.2276
      1.5 0.198 0.1453 0.1453
      1.75 0.1815 0.1268 0.1267
      2 0.1379 0.1251 0.1251
      2.25 0.06318 0.1264 0.1264
      2.5 0.09922 0.1281 0.1281
      2.75 0.07795 0.1298 0.1298
      3 0.03183 0.1315 0.1315
      Save input, initial, and final data to [peaks-fit.xlsx]

      Plot optimized

      *** fit.last_message: {fit.last_message}

      time at startup: 24/11/19 12:18:19
      time at end: 24/11/19 12:19:29
      Elapsed time from startup to end: 70.3096 sec
       
  6. フィッティング結果が不十分であれば、フィッティング変数ファイル peaks_parameters.csv を編集して変数名を調整し、再度 fit を実行する
     
  7. 変数の誤差: フィッティングが終了したら、尤度関数を計算し、フィッティング結果の精度を確認する
    test> python ..\optimize_peakfit1.py error
     

     
    コンソール出力 (peaks-out.txt):
    Accuracy within one sigma:
    000: bg_c0 : 0.11091 -0.004535 + 0.004521 in ( 0.106375 - 0.115431)
    001: bg_c1 : 0.00687364 -0.002937 + 0.00294 in ( 0.00393708 - 0.00981401)
    002: I0 : 1.39069 -0.01171 + 0.01173 in ( 1.37898 - 1.40242)
    003: xc : 0.288756 -0.005047 + 0.005091 in ( 0.283709 - 0.293846)
    004: w : 0.601388 -0.006012 + 0.00602 in ( 0.595376 - 0.607408)
     例えば最後の行は、
      ・ w の フィッティング最適値が 0.601388
      ・ 尤度関数が exp(-S2 / 2Δw2) = 0.5 を満たす w の範囲 (正規分布の標準偏差) が 0.601388 - 0.006012 ~ 0.601388 + 0.00602
     であることを示している。
      尤度関数の最大値が赤線 (フィッティング最適値) からずれている場合は、最適解に到達していないことを意味している。
      尤度関数の幅が広い場合は、その変数を精度よく決定できないことを示している。