|
|
|
Anfangswert nach best Zeit ändern |
|
| Gast312 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.01.2012, 23:58
Titel: Anfangswert nach best Zeit ändern
|
 |
| |
 |
|
Hey,
ich bin ein absoluter Neuling bei MatLab und habe vermutlich eine ganz doofe Frage Allerdings finde ich darauf einfach keine Antwort.
Und zwar lernen wir gerade wie man die ODE Solver einsetzt, also schreiben wir eine Hauptfkt und eine Nebenfkt.
In der Hauptfkt gebe ich die Parameter ein und Anfangsbedingungen, sowie das Zeitintervall (t=[0,10])
Die Nebenfkt berechnet mir dann die DGL und in der Hauptfkt steht dann [t z]= ode45(@Nebenfkt, t, h, options,p)
Das klappt auch alles super und ich kann eine Grafik zeichnen, z.B. die Population von Fischen und Haien in einem See oder einen Schwingkreis.
Dann gibt es eine Zusatzaufgabe, dass bei t=4 eine Ölpest ist bzw eine Spannung zugeschaltet wird und sich dadurch ein Wert, der in der DGL (Nebenfkt) ist, ändert.
Ich denke, dass man das relativ einfach über eine if-Schleife darstellen kann. Habe mir das so vorgestellt:
if t==4
k=0.2
else
k=0.5
end
Aber das klappt nicht. Ich denke, dass das daran liegt, dass das t gar nicht in den DGL vorkommt, sondern nur das k??
Wir hatten so etwas schon mal, dass wenn eine bestimmte Höhe (y-Wert) erreicht wird, sich ein Anfangswert ändert. Aber die Zeit ist ja der x-Wert
und irgendwie funktioniert das nicht.
Weiß jemand wie das muss??
Vielen lieben Dank!!
|
|
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 21.01.2012, 17:50
Titel: Re: Anfangswert nach best Zeit ändern
|
 |
| |
 |
|
Hallo,
Es gibt keine "if-Schleifen".
Es ist nicht ersichtlich, was t und k in Deiner Nebenfunktion sind.
Falls t die Zeit ist, ist es unwahrscheinlich, dass t genau den Punkt 4.00000000 erreicht, da die Schrittweiten in ODE45 ja dynamisch geändert werden.
Eventuell meinst Du "if t > 4" statt "if t==4".
Das hätte aber einen deutlichen Nachteil:
ODE-Solver sind nur für stetig differnzierbare Funktionen definiert. Da für einen Schritt mehrere Zwischenwerte berechnet werden, könnte eine Hälfte der Werte vor t=4 liegen, die andere Hälft dahinter. Das bringt den Schrittweiten-Algorithmus aus der Fassung. Zwar berechnet ODE45 dann irgendetwas - wahrscheinlich wird die Schrittweite so weit herunter gefahren, dass diese Unstetigkeit in den Rundungsfehlern untergeht. Für die Genauigkeit der Lösung und die Rechenzeit ist das aber dramatisch!
Wenn Du bei t=4 einen Parameter ändern möchtest, ist es sinnvoll den Integrator zunächst bis t=4 laufen zu lassen und danach die End-Werte als Startwerte für die nächste Integration mit geändertem Parameter zu nehmen.
Leider können die event-Funktionen keinen direkten Einfluß auf die Parameter ausüben. Das wäre eine schöne Erweiterung der Integeratoren von Matlab, zur Zeit geht es aber nicht.
Gruß, Jan
|
|
|
|
|
|
|
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.
|
|