Verfasst am: 13.07.2011, 16:30
Titel: ode45 und fminsearch
Hallo zusammen,
ich bin sowohl ein MATLAB- als auch ein Forumneuling.
In meiner Masterarbeit muss ich ein Differenzialgleichungssystem entwickeln und lösen, was ja mit den ode-Solvern kein Problem darstellt.
Da das entwickelte Modell einige Konstanten enthält, sollen diese mit Hilfe eines Verfahrens zur nichtlinearen Regression (fminsearch) an Messdaten angeglichen werden.
Nun meine prinzipielle Frage:
Wieviele m.-files benötige ich hierzu?
Zur Lösung der Differenzialgleichungen benötigte ich bisher 2.
Muss ich ein zusätzliches m.file hinzufügen, um fminsearch ausführen zu können?
Hat jemand evtl. ein einfaches Programmierbeispiel für die Verwendung von fminsearch zusammen mit einem ode-Solver?
Ich bedanke mich für Eure Hilfe (,auf die ich dringend angewiesen bin ).
toll, dass du mir so schnell behilflich sein konntest. ich schau mir deinen vorschlag an und hoffe, dass ich das umsetzen kann
Die optimization toolbox bekomme ich auch demnächst.
Die enthält auch die Funktion lsqnonlin, die in Publikationen meistens für diesen Zweck verwendet wird.
Weiß zufällig jemand, was der Vorteil von lsqnonlin ist, oder hat Erfahrungen damit?
Danke nochmal an Harald und alle anderen hilfsbereiten MATLABsachkundigen.
1. die Anzahl der m-files ist sehr variabel, je nach deinem Programmierstil. Ich packe gern alles in eine Datei und arbeite insbesondere bei einer Optimierung nur noch mit "nested functions". Dazu findest Du auch hier im Forum einiges. Wenn Du lieber mit vielen m-files arbeitest, kannst Du Dein Programm natürlich auf beliebig viele Unterfunktionen aufteilen. Prinzipiell geht beides.
2. lsqnonlin ist ein Least-Squares-Verfahren für nichtlineare Gleichungen. Ein großes Anwendungsgebiet des Verfahrens sind Parameterschätzungen. Schau Dir doch schon mal die Online-Hilfe dazu an.
3. fmincon würde ich nicht unbedingt mit einem ode-Solver zusammen verwenden, da die Lösung der ODE ja nicht stetig von den Eingabewerten abhängen muss (von differenzierbar ganz zu schweigen). Die Stärke von fmincon liegt aber in der Verwendung von Gradienteninformation zur Bestimmung der Lösung. (In der Praxis funktioniert es meist trotzdem gut, aber in einer wissenschaftlichen Arbeit kann man in Erklärungsnot kommen, warum man gerade diese Kombination wählt!)
der Code, den du verlinkt hast funktioniert echt prima.
Zumindest bei einem Testfile mit simplen und wenigen odes.
Bin schon gespannt, wie das mit meinem Modell harmoniert.
Danke nochmal!
Eine Frage hätte ich noch:
Code:
%%% Optimierungsroutine fminsearch %%% function lsq=minimize(par) global x0 Messwerte tspan
%Lösung des DGL-Systems mit Startwerten alpha1, alpha2, beta1, beta2
[t,x] = ode45(@nature,tspan,x0,' ',par);
%Bewertungskriterium (wird immer minimiert!)aus der Fehlerquadratsumme
lsq = sum(abs(x(:,1)-Messwerte(:,2)))+sum(abs(x(:,2)-Messwerte(:,3)));
In der letzten Zeile (lsq=...) wird die Abweichung der Messergebnisse von den Simulationsergebnissen berechnet. Müssen diese Abweichungen nicht quadriert werden? Oder haldelt es sich hier nicht um eine LSQ-Methode?
Auch dir vielen Dank Bijick. Ich hab jetzt zwei m.files verwendet.
Ich hoffe lsq funktioniert dann auch problemlos.
ok danke nochmal!
Ich überleg mir noch, was da sinnvoller ist.
LG Stiffi
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.