J'utilise OdePkg dans Octave pour résoudre un système d'EDO rigides, par exemple par 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);
Le solveur stocke les variables dépendantes Y dans une matrice par rapport au temps t (vecteur) :
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 ... ... ...
Je veux ajuster les paramètres dans param, de sorte que les variables Y résultantes correspondent le mieux à mes valeurs de référence, par exemple :
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
Quelle routine Octave/Matlab (d'autres langages sont les bienvenus) peut effectuer un ajustement multiparamétrique (moindres carrés / spline) ? Comment est-il possible de combiner des ensembles de paramètres pour différentes valeurs initiales Y0 dans l'ajustement ? Je serais heureux si vous pouviez me donner des indications et des possibilités.
Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées, Simon