Verfasst am: 30.06.2015, 10:14
Titel: DGL System mit ode45 solven
Hallo Zusammen,
ich bin absoluter "Foren-Neuling", daher nur her mit konstruktiver Kritik
Ich bin kein totaler Matlab Anfänger aber allerdings auch kein Experte umso mehr ärgert es mich, dass ich folgendes Problem mit dem schon oft verwendeten ode45-Solver nicht in den Griff bekomme.
das Problem der NaN sollte aber nicht mit den Strukturen zusammenhängen?
Bitte auch den Code zur Verfügung stellen, mit dem die Parameterstruktur belegt wird, damit man das testen kann.
Das Problem dürfte sein, dass du in deiner Gleichung durch abs(z(4)) teilst, womit die Ableitung im Nullpunkt nicht definiert und somit NaN ist. Du kannst ja mal einen Haltepunkt am Ende der DGLs.m setzen und siehst, dass die NaNs schon beim ersten Schritt reinkommen.
Das "clear all" löscht alle Funktionen aus dem Speicher, alle Variablen, alle Breakpoints des Debuggers, alle definierten Objekte und PERSISTSENT Variablen. Gerade den Debugger zu behindern ist eine grundsätzlich schlechte Idee.
Es bleibt mir ein Rätsel, wer aus welchen Gründen solche Zeilen empfiehlt.
Ein
if
innerhalb der Integrierenden Funktion ist tückisch. ODE-Integratoren sind im Allgemeinen auf glatte Funktionen angewiesen, da sonst der Schrittweiten-Schätzer sehr durcheinander geraten kann. Solche Unstetigkeiten können dazu führten, dass ODE45 mit einem Fehler anhält oder dass die Schrittweite so klein wird, dass die Integration Jahre braucht, oder dass das Endergebnis von Rundungsfehlern dominiert wird.
Deshalb sind alle unstetigen Ausdrücke in den zu intergrierenden Funktionen zu vermeiden: if, max, min, abs, date, und auch tan, wenn der Wertebereich über die Unstetigkeit hinweg gehen kann.
Jan hat natürlich Recht, was ein Problem möglicher Unstetigkeiten angeht.
Wenn es sich bei den angegebenen Werten um eine stetige Fortsetzung handelt, sollte das jedoch problemlos sein.
Als kleinen Trick habe ich mal den Startwert von z(4) auf eps gesetzt. Damit läuft es zumindest durch. Im Falle einer Unstetigkeit bei 0 hat man so natürlich ein Problem, aber das hat man dann so oder so, sage ich mal so salopp.
Was mir noch auffällt: manche Parameter wie pp.C sind komplexwertig. Ist das wirklich beabsichtigt?
Es führt zumindest auch zu einer komplexwertigen Lösung.
Grüße,
Harald
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.