|
|
Nullstellensuche eines nichtlinearen Gleichungssystems |
|
nurnocheinname |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.01.2011, 20:42
Titel: Nullstellensuche eines nichtlinearen Gleichungssystems
|
 |
|
 |
|
Hallo,
ich stehe vor folgendem Problem:
Ich habe ein nichtlineares Gleichungssystem mit 12 Gleichungen und 12 Variablen.
Die Variablen sind Konzentrationen und haben folglich den Wertebereich [0:1]. Einige Konzentrationen sind sehr niedrig (~1e-20), während andere groß sind (~1e-1).
Da das Gleichungssystem Konzentrationen ausrechnen soll, weiß man von der Lösung, das sie relativ "glatt" ist. Sie sollte keine Knicke haben und hat mit Sicherheit keine Sprünge, was ja für ein Newton-Verfahren spricht.
Ich habe die Aufgabe mit fsolve() umgesetzt. TolFun und TolX sind angepasst. Leider konvergiert fsolve() wenn überhaupt nur bei sehr vielen Iterationen ('MaxFunEvals' 100000 statt 1200, 'MaxIter', 4000 statt 400) und oft gar keine Lösung. Fsolve() findet teilweise leider auch negative Werte und komplexe Werte der Konzentrationen.
Das Gleichungssystem ist relativ einfach aufgebaut, aber nichtlinear. Die Jacobi- und Hessematrix können einfach angegeben bzw auch analytisch von Matlab berechnet werden.
Ich probier jetzt schon 2 Tage lang rum und hab auch schon ewig gesucht.
1.) Ist fsolve() überhaupt die richtige Funktion für diese Aufgabe, oder gibt es ein geeigneteres Verfahren?
Bei Verwendung der analytischen Ableitung müsste ein Newton-Verfahren doch viel schneller sein, oder?
2.) Wie kann man den Wertebereich der Variablen einstellen?
Das müsste die Konvergenz doch auch erheblich beschleunigen, oder?
Mit freundlichen Grüßen,
Clemens
|
|
|
|
|
nurnocheinname |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.01.2011, 22:24
Titel:
|
 |
Hat wirklich keiner eine Idee?
Mir fehlt da einfach die Erfahrung, ob das mit fsolve geht, oder ob ich besser eine Optimierung mit z.B. fmincon() mache.
|
|
|
|
|
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.
|
|