Lösung von Aufgabe 22
- Alle Berechnungen können mit dem
Matlab-Skript ex22.m ausgeführt werden.
-
ode23t ohne Jacobimatrix
- Zur Implementierung der Differentialgleichung wird
zunächst die Systemfunktion f(t, y, mu) mit
dem zusätzlichen Parameter mu definiert. In
gewohnter Weise wird daraus die Funktion f1(t,y) abgeleitet. Um die Ergebnisse der drei Lösungen
einfacher vergleichen zu können, wird dem Solver statt des
Zeitintervalls [0 te] ein ganzer Vektor
0:h:te mit Ausgabezeitpunkten übergeben. Man
erhält als Lösung
-
ode23t mit Jacobimatrix
- Die Jacobimatrix wird gemäß obiger Formel als Matrixfunktion
J(t, y, mu) definiert, J1 hat den festen Parameterwert für mu. Mit Hilfe der Optionsstruktur
- options = odeset("Jacobian",
J1);
- wird sie dem Solver mitgeteilt. Der Unterschied zu
den Ergebnisse aus a. ist mit 3.8e-9
deutlich kleiner als die Genauigkeit des Solvers.
- mit eigenem Solver odeTrapez
- Zur Lösung des nichtlinearen Gleichungssystems wird
solveNewton.m verwendet.
- Damit ausgerüstet kann das Trapezverfahren programmiert
werden. Die nach y(t+h) aufzulösende Gleichung war ja
- Nennt man zur Übersicht die gesuchte Größe in x um, kann
man die Gleichung schreiben als
- mit der Funktion
- Die zugehörige Funktionalmatrix lässt sich bei bekannter
Jacobimatrix J von f leicht berechnen, sie ist
- Der Solver odeTrapez(f, tSpan, y0, h,
J) benötigt neben den üblichen Argumenten noch eine feste
Schrittweite
h und die Funktion J(t,y) für die Jacobimatrix von f. Er definiert in jedem Zeitschritt die Hilfsfunktionen
F und DF für das
Newtonverfahren und bestimmt mit solveNewton
den nächsten Wert von y. Alle Details findet
man in odeTrapez.m .
- Plottet man die damit erhaltene Lösung, sieht man, dass
die von odeTrapez erzeugte Lösung leicht hinterher
hinkt
- Die Abweichungen an den Sprungstellen werden dadurch zunehmend
größer