2016-03-28 15 views
0

Ich bin ein Differentialgleichungssystem mit Matlab Lösung wie dieseWie vergleichen Sie die Ergebnisse von Matlab ode Solver

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

und ich habe ein anderes System, das in @func, gelöst wie

slighlty anders als die angegebenen
res2 = ode15s(@(t,x) func2,tspan,x0); 

Ich möchte die Ergebnisse durch Berechnung der Differenz bei jedem Zeitschritt vergleichen. Aber da Matlab-Löser variable Zeitschritte sind, haben die res.y (Lösungen) -Matrizen eine unterschiedliche Anzahl von Spalten. Wie kann ich die Ergebnisse vergleichbar machen? Ich habe versucht

tspan = [0:0.01:10]; 

Aber die Löser scheinen immer noch einen variablen Zeitschritt zu verwenden. Wie kann ich die Ergebnisse vergleichbar machen? Vielen Dank im Voraus.

Edit: Ich möchte klarstellen, ich brauche die Löser nicht zwingen, bestimmte Schritte zu machen, brauchen nur eine Methode, um die Ergebnisse oder etwas zu interpolieren. Mit anderen Worten, this hilft mir nicht.

Antwort

2

mit Matlab eingebauten in Spline-Interpolation:

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

Wenn die Geschwindigkeit kein Problem ist, können Sie lösen jedes mehrfach mit tspan Satz zu [0 tf] Gleichung, wo tf die Elemente [0:0.01:10] ist. Dadurch wird gewährleistet, dass der letzte Wert der Lösung das ist, was Sie brauchen:

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