Verfasst am: 29.07.2012, 08:54
Titel: Differentialgleichung mit mehreren Variablen
Hallo liebe Leute,
könntet ihr mir vielleicht weiterhelfen? Ich habe eine Differentialgleichung erster Ordnung, wobei die Funktion aber von zwei Variablen abhängig ist. Sie sieht wie folgt aus:
mit E(x,0)=0 und E(0,t)=0 und g(k) ist eine Funktion, die ich schon ausgelagert habe und mir Werte aus den reellen Zahlen zurückgibt.
Kann Matlab sowas auch berechnen? Wenn ja, könnte mir dann vielleicht jemand bei der Implementierung helfen? Im Internet habe ich diesbezüglich nämlich nichts spezielles gefunden. Ich finde immer nur Beispiele für Differentialgleichungen, die nur von einer Variablen abhängen.
Der Graph, der als Lösung rauskommt wird ja bestimmt 3-dimensional sein? Kann ich dann auch einfach ein festes k nehmen und mir das in Abhängigkeit von nur t zeichnen lassen?
Vielen Dank schonmal im Voraus, falls mir jemand helfen kann.
Da habe ich mich ja total vertippt. Natürlich sind E und f das gleiche. k ist leider nicht beschränkt. Hat das irgendwelche Auswirkungen, auf das Verhalten von Matlab beim Lösen?
Also muss ich das System für jedes einzelne k lösen lassen. Wie kann ich denn dann das f(k-1,t) mit übergeben?
Danke erst einmal Harald. Du hast mir schon sehr geholfen. Ich habe es jetzt so gemacht, nur leider stimmt die Lösung, die damit ausgegeben wird nicht richtig. Zum Beispiel habe ich mir f(1,t) plotten lassen und habe es mit der Lösung verglichen, wenn ich mir die DGL für k=1 mit der symbolic math toolbox berechnen lassen möchte. Ab t=0.9 wird mit ode45 nicht mehr richtig gerechnet und der Graph hört dort einfach auf. Gerade diese Stelle ist aber interessant. Und wenn ich mir f(5,t) plotten lasse, fällt der Graph viel langsamer als er eigentlich soll.
Hier erstmal mein Code für das System der DGL (ich habe die Werte für g(k) jeweils schon eingesetzt):
Anbei habe ich noch die jeweiligen Plots angefügt.
Für das letzte Stück zwischen 0.9 und 1 wird mir immer NaN angezeigt bzw. Infinity. Aber es gibt ja eine Lösung.
f(1,t) mit ode45.jpg
Beschreibung:
Das ist die Lösung, wenn numerisch mit ode-solver gearbeitet wurde.
bei t = 1 wird der Term unter dem Bruchstrich Null. Das bringt ein Probleme mit sich. Wenn man die Fehlertoleranzen des solvers ändert wird es schon besser.
Code:
options = odeset('RelTol',1e-9);
dy = @(t,y) -(0.2*1.5811)^2./(1-exp(-0.2*(1-t)))*y;
Danke Thomas, somit wird wenigstens schonmal richtig gezeichnet.
Mich wundert es nur immer noch, dass die nachfolgenden f(k,t) k=2,... so flach am Anfang fallen. Die müssten viel schneller gegen 0 gehen und nicht erst am Ende. Wird der y-Wert eigentlich auch immer gleich aktualisiert? Also der richtige y(1) -Wert genommen, wenn ich dy(2) berechne oder muss man das nochmals gesondert betrachten? Die DGls sind auf jeden fall richtig ausfgestellt.
Sonst hätte ich noch die Idee, dass ich zuerst dy(1) löse. dy(2) dann gesondert löse, also dort dann nochmal den ode-solver für jeden einzelne t reinsetze. Das ist vielleicht nicht so toll gelöst, müsste doch aber eigentlich auch klappen?
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.