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
で与えられている初期値から非線形最小二乗法でフィッティングを行う
- 既に実行したファイルがある場合は削除する
test> python ..\optimize_peakfit1.py clean
ファイルを削除するかどうか聞いてくるので、
・ すべて削除する場合は all
・ 聞かれているファイル群だけ削除する場合は yes
・ 削除しない場合は no
を入力し、ENTERを押す
- 初期化: 設定ファイル 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
- 入力データの確認: 入力データファイル peaks.xlsx
を読み込み、プロットする
test> python ..\optimize_peakfit1.py plot
- フィッティング変数の初期値の確認:
入力データファイル peaks.xlsx
とフィッティング変数ファイル peaks_parameters.csv
を読み込み、
入力データとシミュレーション結果をプロットする
test> python ..\optimize_peakfit1.py sim
- フィッティング: 非線形最小二乗法を実行する
test> python ..\optimize_peakfit1.py fit
- コンソール出力 (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
- フィッティング結果が不十分であれば、フィッティング変数ファイル
peaks_parameters.csv を編集して変数名を調整し、再度 fit
を実行する
- 変数の誤差:
フィッティングが終了したら、尤度関数を計算し、フィッティング結果の精度を確認する
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
であることを示している。
尤度関数の最大値が赤線 (フィッティング最適値)
からずれている場合は、最適解に到達していないことを意味している。
尤度関数の幅が広い場合は、その変数を精度よく決定できないことを示している。