私はOctaveでOdePkgを使用して、たとえばode5rによる硬いODEのシステムを解いています。
function yprime = myODEs(t,Y,param)
yprime = [
- param(1) * Y(1); # ODE for Y(1)
param(1) * Y(1) - param(2) Y(2) * Y(3); # ODE for Y(2)
param(2) Y(2) * Y(3) # ODE for Y(3)
# etc.
];
time_span = [1, 24] # time span of interest
Y0 = [1.0, 1.1, 1.3] # initial values for dependent variables Y
param = [7.2, 8.6, 9.5] # parameters, to be optimized
[t, Y] = ode5r(@myODEs, time_span, Y0, ..., param);
ソルバーは、従属変数Yを時間t(ベクトル)に関する行列に格納します。
t Y(1) Y(2) Y(3)
0.0 1.0 1.1 1.3
0.1 ... ... ...
0.5 ... ... ...
0.9 ... ... ...
... ... ... ...
4.0 ... ... ...
... ... ... ...
24.0 ... ... ...
パラメータをparamに適合させたいので、結果の変数Yは私の参照値に最もよく適合します。例:
t Y(1) Y(2) Y(3)
0.5 1.1 N/A N/A
1.0 1.9 N/A N/A
4.0 2.3 2.7 2.1
5.0 N/A 2.6 2.2
24.0 0.9 1.5 2.0
どのOctave/Matlab(他の言語も歓迎)ルーチンがマルチパラメーター(最小二乗/スプライン)フィットを実行できますか?フィットで異なる初期値Y0のパラメーターセットを組み合わせるにはどうすればよいですか?ヒントや可能性を教えていただければ幸いです。
よろしく、サイモン