Verfasst am: 20.04.2017, 15:00
Titel: Berechnen von DGL mit zeitabhängigem Parameter
Ich bin neu hier (jedenfalls als Fragesteller - sonst habe ich hier fast immer eine gute Antwort gefunden ohne die Frage nochmal zu stellen. Diesmal leider nicht)
Ich muss eine DGL lösen die eine zeitabhängige Variable enthält. Hierzu habe ich zwei Ansätze probiert und somit zwei Fragen.
1. Ansatz: Interpolieren der zeitabhängigen Variable mit interp1 und lösen der DGL mit ode45
--> Frage: kann man das zeitlich noch verbessern?
2. Ansatz: inkrementelle Lösung über for-Schleift
--> Frage: Die Geschwindigkeit ist zwar schon gut, aber das Beispiel ist auch stark vereinfacht. Kann man diese for-Schleife irgendwie durch eine sinnvolle Vektor/ Matrix-Operation ersetzen um die Performance noch weiter zu steigern
Gibt das keine Fehlermeldung wegen des "lienar"?
interp1
ist überraschend ineffizient geschrieben. Eine hand-kodierte lineare Interpolation wird da deutlich schneller sein. Allerdings sind lineare Interpolationen nicht stetig differenzierbar und deshalb stören sie die Schrittweiten-Kontrolle von ODE45. Man kann nicht vorhersagen, welche Auswirkungen das hat: Vielleicht bricht ODE45 mit einem Fehlermeldung ab, oder die Eregebnisse werden von Rundungsfehlern dominiert, da die Schrittweite solange runtergefahren wird, bis der Knick wegen der begrenzten Precision nicht mehr erkannt wird.
Ich habe viele Codes gesehen, in denen Forscher unstetige Funktionen mit Standard-Integratoren behandelt haben. Man bekommt tatsächlich eine Zahl heraus, aber aus wissenschaftlicher Sicht ist das kein "Ergebnis", da die Einflüsse zufälliger Rundungs-Effekte nicht abgeschätzt werden. Wenn soetwas in Doktor-Arbeiten auftaucht, bezeichne ich es als "Pfuschen".
Eine Vereinfachung bleibt: Eine lineare Interpolation besteht doch aus abschnittweisen Polynomen. Die zu integrieren ist trivial, da das doch Trapez-Summen sind. Wozu benötigst Du dann überhaupt ODE45?
Doch, natürlich gibt das eine Fehlermeldung. Da habe ich wohl beim Kopieren einen Fehler gemacht.
Zitat:
Eine lineare Interpolation besteht doch aus abschnittweisen Polynomen. Die zu integrieren ist trivial, da das doch Trapez-Summen sind. Wozu benötigst Du dann überhaupt ODE45?
Meinst Du das so oder schwebt dir noch eine "bessere" Lösung vor?
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.