|
|
ODE45 Numerische Lösung eine diff. Gleichung |
|
Chebbi |
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 13.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.01.2019, 15:18
Titel: ODE45 Numerische Lösung eine diff. Gleichung
|
|
Guten Tag,
ich habe eine DGL die ich numerisch lösen möchte, ich versuche seit paar Tagen komme ich aber nicht voran. Hoffentlich könnt ihr mir weiter helfen.
Die Gleichung ist:
wobei A, B, C, D sind Konstanten und p(t), m(t) und m_dot(t) sind Variablen die iteratif mit y(t) gerechnet werden in den nächsten Schritten.
Anfangswerte für y(t), m(t), m_dot(t) und p(t) habe ich.
mein Ansatz war:
Danke für jede Hilfe!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.01.2019, 08:52
Titel:
|
|
Hallo,
wo ist nun die konkrete Frage?
Ich blicke hier noch nicht so recht durch. Du gibst eine DGL an, verwendest aber x(1) bis x(4), was auf 4 DGLen hindeutet und dxdt(1) und dxdt(2), was auf 2 DGL hinweist.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Chebbi |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 13.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.01.2019, 09:37
Titel:
|
|
Hallo Harald,
Danke für deine Antwort, mein Ansatz ist möglicherweise fehlerhaft. Es wäre sehr nett basierend auf meine DGL einen anderen Ansatz mir vorzuschlagen.
ich hab das so verstanden das falls ich in der Gleichung 3 Variablen die Zeitlich sich ändern habe, muss ich die mit x(1), x(2)... benennen.
die dxdt(2) sollte für die zweite ableitung die in der Gleichung ist (m_dot).
Es sieht so aus das ich auf die falsche Spur bin. Muss ich vier Funktioen/Gleichungen schreiben?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.01.2019, 11:42
Titel:
|
|
Hallo,
um dir helfen zu können, müsste ich das besser verstehen:
Zitat: |
p(t), m(t) und m_dot(t) sind Variablen die iteratif mit y(t) gerechnet werden in den nächsten Schritten. |
Du brauchst für jeden Zeitpunkt p, m und m_dot, um y' berechnen zu können.
Mich wundert auch das m und m_dot. Sollte es dafür dann für m nicht auch eine DGL geben?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Chebbi |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 13.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.01.2019, 12:06
Titel:
|
|
Hallo Harald,
Danke für die Hilfe!!
"Du brauchst für jeden Zeitpunkt p, m und m_dot, um y' berechnen zu können. "
das Stimmt, im ersten zeitpunkt brauche ich die Anfangswete von allen Variablen, dannach mit Y(t) rechne ich die nächste Variable (Beispiel P(T)), dannach m_dot(t) dann m(t). nachdem ich werte für alle Variablen habe rechne ich Y(t+delta t)
Habe ich ein Denkfehler?
die Funktion um m zu berechnen ist von m_dot abhängig: m(t2)=m(t1)+(m_dot(t1)*Delta t)
ansonsten wäre die 2te Gleichung die ich aufgeschrieben habe: dm(t)/dt=m_dot(t) unter
Grüße,
Chebbi
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.01.2019, 12:43
Titel:
|
|
Hallo,
wenn P(t), m_dot(t) und m(t) in Abhängigkeit von y(t) berechnet werden können, dann musst du genau das in der Funktion machen, die an ode45 übergeben wird.
Wenn m_dot vorgegeben ist, kannst du m "mit-integrieren" lassen.
Generell musst du dich entscheiden, ob du das Integrieren der DGL ode45 überlassen willst oder das mit dem Euler-Verfahren selber machst. Beides zu vermischen bringt nichts.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Chebbi |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 13.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2019, 10:02
Titel:
|
|
Hallo Harald,
danke für deine Hilfe, ich habe die Gleichungen vereinfacht und wie folgt geschrieben:
dann bekomme ich diese Fehlermeldung:
"Not enough input arguments."
Was mache ich nun falsch? und wie kann ich das beheben.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.01.2019, 12:14
Titel:
|
|
Hallo,
der Aufruf von ode45 muss außerhalb der Funktion sein (z.B. im Command Window) und sollte so aussehen:
evtl. muss das letzte Argument ein Spaltenvektor sein.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Chebbi |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 13.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2019, 12:36
Titel:
|
|
Hallo Harald,
danke für den Hinweis, leider trotz der Änderung habe ich immer noch die gleiche Fehlermeldung.
Fehlermeldung:
"Not enough input arguments.
Error in diffYm (line 7)
m = Ym(1);"
Ich habe zwei Variablen und zwei Gleichungen, warum beschwert er sich?
habe ich hier am Anfang falschgeschrieben: "diffYm(t, Ym)"
Grüße,
Chebbi
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.01.2019, 14:04
Titel:
|
|
Hallo,
ich kann die Fehlermeldung nicht nachvollziehen.
Du musst wie gesagt den ode45-Aufruf getrennt halten. Ausgeführt werden muss der ode45-Aufruf, nicht die DGL-Funktion.
Fehlt in der Zeile dYdt = (1/m)*(3-Y(6*Y*m-7)); noch ein * nach 3-Y?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Chebbi |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 13.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.01.2019, 15:06
Titel:
|
|
Hallo Harald,
vielen Dank für deine Unterstützung!
Harald hat Folgendes geschrieben: |
Ausgeführt werden muss der ode45-Aufruf, nicht die DGL-Funktion. |
Es lag tatsächlich daran. Mann muss die Funktion nicht ausführen, warum ein verwirrender Fehler bei der Ausführung trotzdem entsteht verstehe ich nicht, ist aber nicht wichtig. (Ausgeführt habe ich die Funktion um sicher zu sein das erstmal kein Fehler da war)
Harald hat Folgendes geschrieben: |
Fehlt in der Zeile dYdt = (1/m)*(3-Y(6*Y*m-7)); noch ein * nach 3-Y? |
Danke für den Hinweis, stimmt ein Zeichen hat in diesem Beispiel gefehlt.
Sehr hilfreich waren deine Antworte, vielen Dank nochmal!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.01.2019, 17:30
Titel:
|
|
Hallo,
Zitat: |
warum ein verwirrender Fehler bei der Ausführung trotzdem entsteht verstehe ich nicht, ist aber nicht wichtig |
So verwirrend ist das eigentlich gar nicht: eine Funktion benötigt Eingabeargumente. Wenn du das über ode45 aufrufst, übernimmt es ode45, die Funktion mit Argumenten zu füttern. Wenn du die Funktion testen willst, ginge das z.B. so:
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
|
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 - 2024
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.
|
|