我在 Octave 中使用 OdePkg 来解决僵硬的 ODE 系统,例如通过 ode5r:
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 的参数集?如果你能给我一些提示和可能性,我会很高兴。
最好的问候,西蒙