2016-06-11 14 views
-1

Dies ist der Test für die Gleichung Differential Runge-kutta45 Verwendung: f (x, y) = (-5 * x - y/5)^1/8 + 10Warum ist das numerische Ergebnis anders (RK45)?

enter image description here

warum die numerischen Ergebnis ist anders? Früher habe ich:

function Rk_JL() 
f(x,y)= (-5*x - y/5)^1/8 + 10 
tspan = 0:0.001:n 
y0 = [0.0, 1.0] 
return ODE.ode45(f, y0,tspan); 
end 

und

function [X1,Y1] = RK_M() 
f = @(x,y) (-5*x - y/5)^1/8 + 10; 
tspan = 0:0.001:n; 
y0 = 1 
[X1,Y1]= ode45(f,tspan,1); 
end 
+2

Wissen Sie, wie viel Toleranz in beiden Fällen angenommen wird? – Jagte

+2

cross-gepostet zu https://groups.google.com/forum/#!topic/julia-users/tNbuR8xOGXo. –

+0

tatsächlich gibt es eine Beziehung mit der Toleranz zwischen den Methoden. –

Antwort

1

Die Programme haben leicht unterschiedliche Standardeinstellungen, wie zum Beispiel Standardtoleranzen und Schritt/Ablehnung Verhalten. Daher sollten Sie nicht erwarten, dass sie "genau" gleich sind.

dazu hinzuzufügen, ist ODE.jl nicht Inkrementieren bzw. Dekrementieren Stabilisierung verwenden (was jede optimierte Bibliothek wie DifferentialEquations.jl, ODEInterface.jl oder MATLAB-Bibliothek verwendet), so würde ich erwarten, dass es erheblich schlechter Schrittgrßenregister Entscheidungen haben (nach Hairer Buch , etwa 2x-4x weniger effizient nur aus dem Schritt Verhalten). Selbst wenn Sie die gleichen Toleranzen verwenden, wird ODE.jl andere Ergebnisse liefern, da es nicht den standardoptimierten Algorithmus verwendet.