Verfasst am: 07.11.2015, 16:07
Titel: ODE: Änderung globale Variable nur bei Ausgabezeitpunkt
Hallo zusammen,
bin neu hier im Forum und habe ein Problem mit dem Solver ode15s.
Und zwar habe ich eine Differentialgleichung in eine Funktion gepackt und lasse sie mir dann von ode15s unter Vorgabe von Fehlertoleranzen lösen. Das funktioniert soweit auch ganz gut, nur stoße ich beim Verwenden von globalen Variablen auf das Problem, dass der solver bei jedem Rechenschritt eine globale Variable ändert, obwohl er noch nicht den richtigen Zeitwert zur Einhaltung der Toleranzen gefunden hat. Ich möchte aber, dass meine globale Variable e_norm_old nur bei allen Zeitpunkten meines Ausgabezeitvektor tsim geändert wird.
Ist das irgendwie möglich hinzubekommen?
Mein Befehl zum Lösen:
Code:
sim_options = odeset('RelTol',1e-5,'AbsTol',1e-8);
[tsim , xsim ] = ode15s(@(t,x) wurm3(t , x , par ),[tsim_start tsim_end],x,sim_options);
mir stellt sich die Frage, warum du hier überhaupt mit globalen Variablen arbeitest. Wäre es nicht viel einfacher, wenn du die benötigten Informationen nachträglich aus der Rückgabe von ode15s berechnest?
zunächst mal vielen Dank für deine Antwort. Ich arbeite mit der globalen Variable, weil ich die der folgenden Funktion prüfen muss, ob e_norm kleiner ist als e_norm_old:
es ist etwas schwer zu durchblicken, was der Code in der Gesamtheit erreichen soll.
Schau mal in der Doku von
ode45
und
odeset
nach Events und OutputFcn.
Wenn du beobachten möchtest, ob etwas größer oder kleiner wird, könntest du auch eine zusätzliche DGL definieren und schauen, ob die Ableitung größer oder kleiner 0 ist.
Diese Funktion wird nach jedem erfolgreichem Integrationsschritt ausgeführt. Normalerweise sind diese Funktionen dazu gedacht, um eine Integration abzubrechen (bei Erreichen des Abbruchkriteriums setzt man im Code die Ausgangsgröße status auf 1). Damit es zu keinem Abbruch kommt, setze ich status generell auf 0 und meine erforderliche Zeile e_norm_old = e_norm wird somit nach jedem erfolgreichen Integrationsschritt ausgeführt.
Vielen Dank für die Hilfe!
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
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.