|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.04.2022, 15:55
Titel: DGL mit ode45 lösen
|
|
Hallo zusammen,
ich verzweifle gerade an der Lösung zweier DGL 1. Ordnung mittels ode45.
Meine DGL hat folgende Form siehe Anhang:
wobei a_nm aus Variablen abhängig von (Iq/Id) besteht und
b1 b2 eine Konstante Zahl ist.
Beide Gleichungen Id* & Iq* sind gleichzeitig abhängig von Id UND Iq.
Ich habe versucht die Gleichung in folgendem Code möglichst übersichtlich darzustellen. Die Funktionen sind Beispiele.
Die DGL möchte ich Lösen mit den Anfangswerten Iq = 0 & Id = 0;
Ich möchte also die Lösung für dId & dIq über die Zeit berechnen, wo ist mein Denkfehler?
Vielen Dank für die Hilfe im Voraus!
Beschreibung: |
|
Download |
Dateiname: |
Differentialgleichung.PNG |
Dateigröße: |
17.4 KB |
Heruntergeladen: |
216 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 03.04.2022, 17:29
Titel:
|
|
Hallo,
mir scheint hier einiges durcheinandergeraten zu sein.
Die zahlreichen Warnungen im Editor deuten ja auf einige Probleme hin.
Generell würde ich so vorgehen:
Es kann einfacher sein, mit dieser Vorlage anzufangen und dann die benötigten Teile nach Bedarf hineinzukopieren.
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 ;)
|
|
|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.04.2022, 07:09
Titel:
|
|
Hallo Harald, danke für die Antwort.
Ich habe eine Vorlage von hier genutzt, in dieser gab es aber nur eine Variable (x) daher war ich nicht sicher welche Teile ich ändern muss um nach zwei verschiedenen Variablen lösen zu können.
Entspricht dann mein I(1) & I(2) den DGLS wie sie im Anhang als Matrix aufgestellt waren?
Gruß
|
|
|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.04.2022, 07:30
Titel:
|
|
Ich habs jetzt nochmal deutlich vereinfacht und kommentiert, die Gleichungen sind ja im Prinzip egal bis das Skript läuft.
Kann ich in der 1. Zeile mehrere unbekannte angeben (t,Id,Iq) oder gebe ich nur t und den Vektor I an?
Wie wird aus Id & Iq, dId & dIq? Passiert das alles in der ode45 Funktion?
Gebe ich hier die Anfangswerte für Id & Iq (jeweils 0) korrekt an?
Danke nochmal!
|
|
|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.04.2022, 07:53
Titel:
|
|
Selbstversuch macht klug...
Ich hab die Benennung angepasst und deutlich vereinfacht.
die letzte Zeile mit dI = ist hier nicht unbedingt nötig, oder?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.04.2022, 09:34
Titel:
|
|
Hallo,
ja, man muss sich an die Schnittstelle halten. Der letzte Beitrag sieht syntaktisch gut aus.
Die Zeilen
und dann mit Id und Iq weiterarbeiten trägt gerade bei vielen Komponenten zur Lesbarkeit des Codes bei.
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 ;)
|
|
|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.04.2022, 13:56
Titel:
|
|
Hallo Harald,
danke für deine Rückmeldung.
Ich habe noch zwei Fragen:
Kann ich die Ableitung von der rechten Seite der Gleichung:
im rechten Teil der Gleichung ebenfalls benutzen?
Beispiel::
Außerdem möchte ich in der Gleichung abkürzungen benutzen um die Übersicht zu erleichtern, wenn ich aber die Abkürzungen vorher anlege und I(1) oder dI(1) benutze bekomme ich eine Fehlermeldung da Matlab diese Variablen noch gar nicht kennt.
umgehe ich das mit einem leeren I-Vektor oder muss ich die Abkürzungen statt im Funktions-Teil besser in den Lösungsteil mit ode45 packen?
Ich hoffe du verstehst was ich meine.
Grüße
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.04.2022, 14:52
Titel:
|
|
|
|
|
Hallo,
Zitat: |
kann ich die Ableitung von der rechten Seite der Gleichung [...]
im rechten Teil der Gleichung ebenfalls benutzen? |
Aus syntaktischer Sicht müssten dI(1) und dI(2) vorher bestimmt worden sein. Praktisch kann ich mir selbst dann nicht vorstellen, dass das sinnvoll ist. Wenn dI(1) und dI(2) sich aus einer nichtlinearen Gleichung ergeben sollen, dann könnte man z.B. fsolve nutzen.
Wenn es aber noch um das ursprüngliche Problem geht: dort ist das nicht nötig, weil du ja schon geschrieben hast, wie du das lineare Gleichungssystem lösen kannst.
Zitat: |
wenn ich aber die Abkürzungen vorher anlege und I(1) oder dI(1) benutze bekomme ich eine Fehlermeldung da Matlab diese Variablen noch gar nicht kennt. |
Wie legst du diese Abkürzungen an und wie versuchst du sie zu verwenden?
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 ;)
|
|
|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.04.2022, 19:53
Titel:
|
|
Hallo Harald,
ich habe oben in dem ersten Code die ausführliche Gleichung angegeben (siehe auch Anhang).
Hier ist sowohl in der letzten Zeile zu sehen welche Abkürzungen ich verwende (a_Matrix, a_Nenner, etc.) als auch dass ich dId in der Gleichung selbst verwende.
Ich habe erst einen numerischen Ansatz gewählt, mit solve, würde es aber lieber als DGL lösen. Daher meine Fragen.
Ich hoffe du verstehst was ich meine.
Gruß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.04.2022, 20:12
Titel:
|
|
Hallo,
wie gesagt: in dem ersten Code ist so viel durcheinander geraten, dass ich basierend auf meiner Vorlage von vorne anfangen würde.
Ich hoffe, dass dir zwischenzeitlich einiges klarer geworden ist. Um dir bei deinen momentanen Problemen zu helfen, wäre es hilfreich, den momentanen Code zu kennen.
Wenn du Abkürzungen zuweist bevor du sie verwendest, sollte es kein Problem geben.
Sollen die a_ij tatsächlich auch von den Ableitungen abhängen? Dann ist die Formulierung als lineares Gleichungssystem irreführend und vor allem könntest du deinen momentanen Ansatz vergessen, weil du ja eben nicht nach den Ableitungen auflösen kannst. Ich würde die Gleichungen erst mal mit dId und dIq durchmultiplizieren und schauen, was dann herauskommt.
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 ;)
|
|
|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.04.2022, 20:45
Titel:
|
|
Das mit den Abkürzungen hat jetzt doch geklappt, ich hatte sie zuerst glaube ich an der falschen Stelle angegeben.
Bleibt nur noch das Problem mit der Ableitung.
Ich probiere das morgen mal aufzulösen und melde mich wenn ich nicht weiter komme.
Vielen Dank bis hier hin
|
|
|
GastLAB |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.04.2022, 15:30
Titel:
|
|
Nabend!
Also das Skript läuft und das Ergebnis ist auch im groben plausibel.
Nur erwarte ich für Id ein negatives Vorzeichen, und für Iq ein positives, aktuell sind beide Positiv.
Die Gleichungen greifen auf Kennfelder hinzu, welche ich wiederum als Matlab surface in eine Gleichung 5en Grades umgewandelt habe. Es ist gültig für Id = -925 bis 0 und Iq 0 bis 925. Was außerhalb dieser Grenzen passiert weiß ich nicht und liefert definitiv ein falsches Ergebnis.
Meine Frage ist jetzt also: Kann ich dem ODE45 Solver eine "Richtung" vorgeben in die er lösen soll? Wenn ich die Startwerte mit Id = -1 & Iq = +1 festlege wird aus dem Id nach kurzer Zeit trotzdem ein positiver Wert.
ODE45:
Auschnitt aus der Funktion mit Beispiel für ein Kennfeld:
Danke!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.04.2022, 15:45
Titel:
|
|
Hallo,
deine Funktion legt diese Richtung fest. Ich kann da nur empfehlen, jedes Detail der Funktion nochmal zu prüfen.
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.
|
|