以下に典型的な実行例を示す。代表的なmode引数は、--modeが不要。
実行ディレクトリ: [tkprog_X_path]/optimize/optimize_decay/test
入力データ: [tkprog_X_path]/optimize/optimize_decay/test/decay.xlsx
入力ファイルのデフォルトは decay.xlsx になっている。
変更する場合は、起動時引数 --infile=path名 で指定する。
特徴: 複数の緩和時間 τ
をもつ時系列データを指数関数の和でフィッティングする。
緩和時間の数 ntau
を引数で与え、時系列データからτの最大値、最小値を見積もり、緩和時間の対数で均一に分布するように
τの初期値を決める。係数の初期値は線形最小二乗法で決める。
varname | unit | pk_scale | optid | linid | pk | dx | kmin | kmax | kpenalty |
bg_c0 | 1 | 1 | -1.05E-06 | 5.20E-09 | 0 | 1.00E+10 | 1 | ||
I01 | 1 | 1 | 5.12E-07 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau1 | 1 | 0 | 1.2158 | 0.12158 | 1.00E-15 | 1.00E+10 | 1 | ||
I02 | 1 | 1 | -4.14E-07 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau2 | 1 | 0 | 3.821957 | 0.382196 | 1.00E-15 | 1.00E+10 | 1 | ||
I03 | 1 | 1 | 7.91E-07 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau3 | 1 | 0 | 12.0146 | 1.20146 | 1.00E-15 | 1.00E+10 | 1 | ||
I04 | 1 | 1 | -1.71E-06 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau4 | 1 | 0 | 37.76875 | 3.776875 | 1.00E-15 | 1.00E+10 | 1 | ||
I05 | 1 | 1 | 2.38E-06 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau5 | 1 | 0 | 118.7288 | 11.87288 | 1.00E-15 | 1.00E+10 | 1 |
注:
一部の係数が負になっているが、decay.pyでは負の係数は物理的にあり得ない
varname | unit | pk_scale | optid | linid | pk | dx | kmin | kmax | kpenalty |
bg_c0 | 1 | 1 | -1.05E-06 | 5.20E-09 | 0 | 1.00E+10 | 1 | ||
I01 | 1 | 1 | 5.12E-07 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau1 | 0 | 0 | 1.2158 | 0.12158 | 1.00E-15 | 1.00E+10 | 1 | ||
I02 | 1 | 1 | -4.14E-07 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau2 | 0 | 0 | 3.821957 | 0.382196 | 1.00E-15 | 1.00E+10 | 1 | ||
I03 | 1 | 1 | 7.91E-07 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau3 | 0 | 0 | 12.0146 | 1.20146 | 1.00E-15 | 1.00E+10 | 1 | ||
I04 | 1 | 1 | -1.71E-06 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau4 | 0 | 0 | 37.76875 | 3.776875 | 1.00E-15 | 1.00E+10 | 1 | ||
I05 | 1 | 1 | 2.38E-06 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau5 | 0 | 0 | 118.7288 | 11.87288 | 1.00E-15 | 1.00E+10 | 1 |
test> python ..\optimize_decay.py fit
(ii) tauのoptidを 1 に戻す
decay_parameters.csv
varname | unit | pk_scale | optid | linid | pk | dx | kmin | kmax | kpenalty |
bg_c0 | 1 | 1 | 0 | 5.20E-09 | 0 | 1.00E+10 | 1 | ||
I01 | 1 | 1 | 6.13E-07 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau1 | 1 | 0 | 1.2158 | 0.12158 | 1.00E-15 | 1.00E+10 | 1 | ||
I02 | 1 | 1 | 1.11E-09 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau2 | 1 | 0 | 3.82196 | 0.382196 | 1.00E-15 | 1.00E+10 | 1 | ||
I03 | 1 | 1 | 9.60E-08 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau3 | 1 | 0 | 12.0146 | 1.20146 | 1.00E-15 | 1.00E+10 | 1 | ||
I04 | 1 | 1 | 1.70E-08 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau4 | 1 | 0 | 37.7688 | 3.77688 | 1.00E-15 | 1.00E+10 | 1 | ||
I05 | 1 | 1 | 6.78E-08 | 5.20E-08 | 0 | 1.00E+10 | 1 | ||
tau5 | 1 | 0 | 118.729 | 11.8729 | 1.00E-15 | 1.00E+10 | 1 |
フィッティング (Launcher:Decay:[nonlinear
fit]): 全パラメータで非線形最小二乗法を実行する
test> python ..\optimize_decay.py fit
コンソール出力:
Final parameters:
00: bg_c0= 1.60874e-08 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
01: I01= 2.95598e-07 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
02: tau1= 0.385099 (id=1) (linear=0) penality: 1 * (1e-15 - 1e+10)
03: I02= 4.28512e-08 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
04: tau2= 5.84325 (id=1) (linear=0) penality: 1 * (1e-15 - 1e+10)
05: I03= 5.86409e-08 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
06: tau3= 5.78897 (id=1) (linear=0) penality: 1 * (1e-15 - 1e+10)
07: I04= 5.41549e-08 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
08: tau4= 52.2003 (id=1) (linear=0) penality: 1 * (1e-15 - 1e+10)
09: I05= 5.27982e-08 (id=1) (linear=1) penality: 1 * (0 - 1e+10)
10: tau5= 125.93 (id=1) (linear=0) penality: 1 * (1e-15 - 1e+10)
fmin= 0.008608171905248157
Save configuration parameters to [D:\yoshikawa-sigmaph.in]
Save fitting parameters to [D:\yoshikawa-sigmaph_parameters.csv] (save_parameters)
Final data:
t I initial final
0 5.204e-07 7.95e-07 5.201e-07
2 1.968e-07 2.83e-07 1.938e-07
4 1.66e-07 1.728e-07 1.684e-07
6 1.487e-07 1.418e-07 1.509e-07
8 1.369e-07 1.274e-07 1.377e-07
10 1.281e-07 1.173e-07 1.277e-07
12 1.21e-07 1.09e-07 1.2e-07
14 1.152e-07 1.019e-07 1.139e-07
16 1.103e-07 9.569e-08 1.089e-07
18 1.061e-07 9.023e-08 1.048e-07
20 1.023e-07 8.542e-08 1.013e-07
22 9.903e-08 8.116e-08 9.826e-08
24 9.599e-08 7.737e-08 9.555e-08
26 9.331e-08 7.399e-08 9.31e-08
28 9.078e-08 7.095e-08 9.085e-08
30 8.847e-08 6.82e-08 8.876e-08
32 8.633e-08 6.572e-08 8.679e-08
34 8.435e-08 6.345e-08 8.492e-08
36 8.25e-08 6.138e-08 8.314e-08
38 8.075e-08 5.947e-08 8.143e-08
40 7.91e-08 5.77e-08 7.979e-08
42 7.757e-08 5.606e-08 7.821e-08
44 7.608e-08 5.454e-08 7.668e-08
46 7.47e-08 5.31e-08 7.52e-08
48 7.338e-08 5.176e-08 7.377e-08
50 7.212e-08 5.048e-08 7.238e-08
Save input, initial, and final data to [decay-fit.xlsx]
十分に収束するまで、フィッティング (Launcher:Decay:[nonlinear
fit]) を繰り返す。
必要があれば decay_parameters.csv の値 (pk)
を修正したり、一部パラメータを固定 (optid=0)
したりして
最適解を求める。