Ich beschäftige mich seit längerem damit, die numerische Lösung eines DGL-Systems mit Euler-Verfahren in Matlab zu implementieren.
Das Euler-Verfahren ist dabei nicht das Problem, das habe ich mit anderen DGLs ohne Probleme implementieren können.
Hier der Link zu dem Artikel, in dem das DGL-System vorkommt:
http://www.math.utah.edu/~bresslof/publications/15-6.pdf
Es geht um die Gleichungen 17a, 17b, 18a und 18b.
In den Gleichungen 17a und 17b sind zwei Greens-Funktionen gegeben, die in das DGL-System eingehen, das durch 18a und 18b gegeben ist.
Ich benötige die Lösung U_E und U_I.
function y = G1(t,sigma)
y = 0;
for l=1:1:summands
y = y + exp(-(D*lambda(l)+v^2/(4*D))*(t-sigma))*exp(v/(2*D)*L)*(sin(sqrt(lambda(l))*L)+2*D*sqrt(lambda(l))/v*cos(sqrt(lambda(l))*L))*2*D*sqrt(lambda(l))/v;
end end
F1 = @(t,sigma, UI) G1(t,sigma)*(IE - WI*(UI^4/(2^4+UI^4)));
function y = integralF1(t)
y = 0;
for n = 0:1:ntimepoints
y = y + F1(t*tstepwidth,-n*tstepwidth,0)*tstepwidth;
end for n=1:1:t
y = y + F1(t*tstepwidth,n*tstepwidth,UI(n))*tstepwidth;
end end
function y = integralF2(t)
y = 0;
for n = 0:1:ntimepoints
y = y + F1(t*tstepwidth,-n*tstepwidth,0)*tstepwidth;
end for n=1:1:t
y = y + F2(t*tstepwidth,n*tstepwidth,UE(n))*tstepwidth;
end end
Es muss in jedem Zeitschritt eine numerische Integration durchgeführt werden, wodurch das ganze sehr lange dauert. Die Ergebnisse, die ich so erhalte, liegen allerdings weit entfernt von dem erwarteten Ergebnis.
Habt Ihr vllt. irgendwelche Fehler gefunden?
Euler-Verfahren sind recht ineffizient.
Es ist durchaus möglich, dass du gar keinen Fehler gemacht hast, sondern dass die Schrittweite zu klein ist.
Meine Empfehlung wäre,
ode45
und
integral
zu versuchen. Damit die Schrittweitensteuerung sinnvoll funktionieren kann, ist es wichtig, die Toleranz bei integral deutlich enger zu wählen als die von ode45.
Vielen Dank für Deine Antwort.
Ich habe bereits versucht die Schrittweite kleiner zu machen, allerdings hatte dann Matlab damit ein Problem.
Ich denke aber eine Implementierung mit ode45 und integral wäre in der Tat zielführender.
Leider glaube ich aber, dass das nicht ohne Weiteres möglich ist, da die numerische Integration über die Funktion geht, die ich berechnen will.
Das bedeutet, dass ich keine explizite Funktion angeben kann. Ich kenne nur deren Werte an den entsprechenden Stützstellen.
Vielen Dank! Ich werde das gleich mal ausprobieren.
Viele Grüße,
Freddy2400.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.