2016-03-28 3 views
0

Je suis la résolution d'un système d'équations différentielles avec Matlab comme celui-ciComment comparer les résultats de solveurs ode Matlab

tspan = [0 10];  
res = ode15s(@(t,x) func,tspan,x0); 

et moi avons un autre système qui est slighlty différent de celui spécifié dans @func, résolu comme

res2 = ode15s(@(t,x) func2,tspan,x0); 

Je voudrais comparer les résultats en calculant la différence à chaque pas de temps. Mais comme les solveurs de Matlab ont un pas de temps variable, les matrices res.y (solutions) ont un nombre de colonnes différent. Comment puis-je rendre les résultats comparables? J'ai essayé

tspan = [0:0.01:10]; 

Mais les solveurs semblent toujours utiliser un pas de temps variable. Alors, comment puis-je rendre les résultats comparables? Merci d'avance.

Edit: Je tiens à préciser, je n'ai pas besoin de forcer les solveurs à prendre des mesures spécifiques, juste besoin d'une méthode pour interpoler les résultats ou quelque chose. En d'autres termes, this ne m'aide pas.

Répondre

2

L'utilisation intégrée interpolation spline de Matlab:

tFine = 0:0.01:10; 
resFine = interp1(res.x,res.y,tFine,'spline'); 
res2Fine = interp1(res2.x,res2.y,tFine,'spline'); 
1

Si la vitesse n'est pas un problème, vous pouvez résoudre chaque équation plusieurs fois avec tspan réglé sur [0 tf], où tf est les éléments de [0:0.01:10]. Cela garantit que la dernière valeur de la solution est celle que vous avez besoin:

tsteps = [0:0.01:10] 
for tf in tsteps: 
    tspan = [0 tf]; 
    res = ode15s(@(t,x) func, tspan, x0); 
    res2 = ode15s(@(t,x) func2, tspan, x0); 
    % Extract whatever you need here 
end 
% Compare what you extracted here