DGL-System für Solver umformen (Matlab)

Hallo zusammen,

ich hab hier ein System von gewöhnlichen Differentialgleichungen, das ich mit Matlab lösen möchte (ode45 & Co.).

geg.

x’’ = f(z, z’, x’)
z’ = g(z, x’)
(nicht-linear übrigens)

ges.

x1’ = f1(x1, x2, x3…)
x2’ = f2(x1, x2, x3…)
x3’ = f3(x1, x2, x3…)

Wo ich gerade anstehe: z’ wird in f() verwendet, in der DGL-Funktion, welche der Solver aufruft, krieg ich das mit der offensichtlichen Substitution (x1 = x, x2 = x’, x3 = z) aber nirgends her. x3’ muss ich ja berechnen, nun könnte ich das einfach zuerst tun und das Ergebnis dann für die Berechnung von x2’ verwenden, aber würde ich damit nicht ein Wert aus dem falschen Zeitschritt verwenden? (jedenfalls dauert das Lösen auch für kürzeste Zeitfenster eine Ewigkeit, wenn ich das mache)

Kann mir jemand erklären, wie man das richtig macht?

lg, operator

Guten Morgen,

definierst du y := (x,x’,z), so erhältst du:
y’= ( y2 , f( y3 , g(y3,y2) , y2) , g(y3,y2) )
also eine GDG erster Ordnung. Wie viel Zeit dein Programm benötigt ist in erster Linie von f, g und den verwendeten Verfahren zur (numerischen) Lösung nichtlinearer Gleichungen abhängig. Ohne nähere Angaben dazu kann ich dir keine weitere Hilfestellung bieten.

Abhängig von f und g kann ein solches Problem beliebig ekelhaft werden, du solltest also keine Wunder erwarten.

Grüße
steaky