|
|
ode45 DGL 2 Ordnung lösen mithilfe Set von zwei DGLs 1 Ordn |
|
Feurigel |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 06.06.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.06.2015, 12:34
Titel: ode45 DGL 2 Ordnung lösen mithilfe Set von zwei DGLs 1 Ordn
|
 |
|
 |
|
Hallo liebe GoMatlab-Community !
Ich bin ein Matlab Anfänger und habe bei einer Aufgabe ein kleines Problem. Doch zuerst die Aufgabe und mein Ansatz bis dahin:
Man solle die DGL 2 Ordnung lösen, mithilfe von ode45:
q''(t) + w(t)*q(t) = 0
Zuerst stellt man diese "komplizierte" DGL als ein Set von zwei DGLs erster Ordnung dar:
i) p1'(t) - p2 = 0
ii) p2'(t) + w(t)*p1(t) = 0
(Wenn man also nun i) ableitet erhält man
p1''(t) + w(t)*p1(t) = 0. Somit ist p1(t) äquivalent q(t), und im
Endeffekt
kommt es nur darauf an, verstehe ich das richtig? )
Desweiteren lassen sich i) und ii) auch schreiben als:
i) p1'(t) = p2(t)
ii) p2'(t) = -w(t)*p1(t)
Vektoriell zusammengefasst ergibt sich somit:
d/dt [p1(t) ; p2(t)] = [p2(t) ; -w(t)*p1(t)]
(In Matrizen und Vektoren trennt man Zeilen mit ";" oder Zeilenumbruch ? )
Nun zur eigentlichen Programmierung:
1) Neue Funktion definieren.
2) ode45 verwenden, um DGL-System zu lösen.
1)
2) Anschließend, unter verwendung eines beliebigen Zeitintervalls und Anfangsbedingungen wende ich ode45 an:
Dies plottet mir die Lösungen des DGL-Systems also x(1) und x(2). Gibt es eine Möglichkeit, es so einzurichten, dass Matlab mir automatisch nur x(1) ausgibt (anstatt aus der Matrix X manuel eine Spalte zu löschen?)
Soweit mein Ansatz. Es folgen noch Aufgabenstellungen und die eigentlichen Fragen stellen sich erst jetzt:
1)
Wenn x(1) (ich nenne es jetzt "x1") die Lösung des ursprünglichen Systems ist, so soll ich nun eine
vektorielle Bahn plotten mit:
vec(t) = [x1(t) ; x1'(t)]
Diese ist parametrisch abhängig von t. Ich kann die Werte von x1 und T mithilfen von ode45 ausgeben lassen, aber wie bekomm ich die Ableitung von x1 nach T her (wenn ich dieses große T überhaupt verwenden kann und mir nicht eine separates klein t definieren muss).
2)
vec(t) (oder vec(T) ? ) soll ich zusammen mit dem w(t) plotten (das w(t) aus der function paraoszi(t,x) ). Kann ich als Argument für w auch das T als Ausgabe von ode45 benutzen? Und wenn ich mir ein klein t definiere (zB mit "linspace(-5,5) ), wird es im sleben Plot-Fenster gleich skaliert wie T (also dass gleiche Zeitabschnitte auch gleich lang auf dem Bildschirm erscheinen) ?
Sorry für den langen Text, aber danke für Hilfe !
Feurigel
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.06.2015, 17:16
Titel: Re: ode45 DGL 2 Ordnung lösen mithilfe Set von zwei DGLs 1
|
 |
|
 |
|
Hallo Feurigel,
Das sind viele Fragen auf einmal. Für das Beantworten ist es einfacher, wenn Du eine Frage nach der anderen stellst.
Zitat: |
Somit ist p1(t) äquivalent q(t), und im
Endeffekt
kommt es nur darauf an, verstehe ich das richtig? )
|
richtig.
Zitat: |
(In Matrizen und Vektoren trennt man Zeilen mit ";" oder Zeilenumbruch ? ) |
Richtig. Ein Zeilen-Umbruch reicht, aber ich würde niemals darauf verzichten es eindeutig zu schreiben:
[code]a = [1; ...
2];
Ich würde nicht innerhalb der Funktion eine zweite definieren. Kannst Du w(t) nicht direkt in paraoszi einfügen?
Zitat: |
Dies plottet mir die Lösungen des DGL-Systems also x(1) und x(2). Gibt es eine Möglichkeit, es so einzurichten, dass Matlab mir automatisch nur x(1) ausgibt (anstatt aus der Matrix X manuel eine Spalte zu löschen?)
|
Nein. Es wäre nicht nützlich solche ungewöhnliche Extra-Feature in ODE45 einzubauen. Es muss sowieso X berechnet werden.
x1' ist doch die zweite Komponente des Outputs, da Du ja eine DGL vom Grad 2 in zwei Gleichungen vom Grad 1 umgewandelt hast:
[code]p1'(t) = p2(t)[/code]
Klar?
Wenn Du aber z.B. die Ableitung beider Komponenten bekommen möchtest, hast Du doch genau dafür paraoszi geschrieben. Wenn man die Gleichungungen so schreibt, dass sie auch einen Vektor als Input verwenden können bekommst Du so die Ableitungen:
[code]D = paraoszi(T, X)[/code]
Zitat: |
Kann ich als Argument für w auch das T als Ausgabe von ode45 benutzen? |
Nein, das würde ODE45 verwirren. Wie wäre dies:
[code]function [d, w] = paraoszi(t,x)
w = <function> von t% beliebige Funktion von t
result = [x(:, 2).'; -w(t) .* x(:, 1).'];
[/code]
Zitat: |
Und wenn ich mir ein klein t definiere (zB mit "linspace(-5,5) ), wird es im sleben Plot-Fenster gleich skaliert wie T (also dass gleiche Zeitabschnitte auch gleich lang auf dem Bildschirm erscheinen) ? |
Das verstehe ich nicht.
Gruß, Jan
|
|
|
Feurigel |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 06.06.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.06.2015, 18:21
Titel:
|
 |
|
 |
|
Danke Jan!
Deine Antworten habe mir einiges klar gemacht.
Dennoch hätte ich noch Fragen:
1)
Somit berechnet man die Ableitung von X (als Vektor von x(1) und x(2) ) nach T
Das Plotten würde dann so gehen ?
2)
Was hast du gemeint mit "kannst du w(t) nicht direkt in paraoszi einfügen" ?
Es wäre also geschickter w(t) ebenfalls als separate function zu definieren (auf die selbe Art und Weise wie paraoszi) und dann in paraoszi einzubauen? Wie würde das gehen? (Und was ist der Vorteil gegenüber dem Definieren von w(t) innerhalb von paraoszi ? )
3)
Jan S hat Folgendes geschrieben: |
Nein, das würde ODE45 verwirren. Wie wäre dies:
|
Da ich im Grunde noch Anfänger bei Matlab bin muss ich fragen:
i) [d,w] ist der Output Vektor. Aber was ist dann result ?
ii) (soll zB die x(:,2).' die Ableitung von x(:,2) sein?)
iii) Kann ich diesen Code ebenso gut als Argument für ode45 benutzen wie
meinen alten ?
iiii) w würde ich dann mit plot(t,w) plotten oder wie?
Gruß, Feurigel
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.06.2015, 23:00
Titel:
|
 |
Hallo Feurigel,
Zitat: |
Das Plotten würde dann so gehen ?
|
Probiere es mal aus.
Zitat: |
Was hast du gemeint mit "kannst du w(t) nicht direkt in paraoszi einfügen" ? |
Zitat: |
[d,w] ist der Output Vektor. Aber was ist dann result ? |
Das war ein Tippfehler von mir. Ich musste den Grill anfeuern, weil die Gäste kamen. Und dann habe ich schnell auf "Absenden" geklickt, statt noch mal nach zu lesen.
Zitat: |
ii) (soll zB die x(:,2).' die Ableitung von x(:,2) sein?) |
Nein. Der Quote-Operator ist eine Abkürzung für TRANSPOSE(). Ob Du hier eines brauchst oder nicht, musst Du mal ausprobieren.
Zitat: |
iii) Kann ich diesen Code ebenso gut als Argument für ode45 benutzen wie
meinen alten ? |
Ja. ODE45 verwendet nur den ersten Output.
Zitat: |
iiii) w würde ich dann mit plot(t,w) plotten oder wie? |
Probiere es einfach aus. Wenn Du diese Grafik benötigst: Ja.
Viele Grüße, Jan
|
|
|
Feurigel |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 06.06.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.06.2015, 12:11
Titel:
|
 |
Vielen Dank Jan.
Deine Tipps werde ich in Kürze ausprobieren !
(Ich kann Matlab nur auf den Uni Rechnern benutzen wozu ich im Moment keine Zeit hatte)
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|