|
|
Problem bei Fsolve - nichtlineares Gleichungssystem zu löse |
|
Pumuckl |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.01.2013, 22:47
Titel: Problem bei Fsolve - nichtlineares Gleichungssystem zu löse
|
 |
|
 |
|
Hallo, ich bekomme beim Lösen eines nichtlinearen Gleichungssystems einen Fehler, den ich nicht verstehe und wo ich auch unter Help nicht weiter komme:
ich habe die Datei f.m erstellt, in der die zu lösenden 4 Gleichungen abgebildet werden mit:
und dann die Datei x.m mit:
x=fsolve('f(x)',[1.1982;0.0354;1;0.0082])
Hierbei bekomme ich Ergebnisse, die aber sinnlos sind und eine Fehlermeldung:
Warning: Cannot determine from calling sequence whether to use new
(2.0 or later) FSOLVE function or grandfathered FSOLVE function.
Assuming new syntax; if call was grandfathered FSOLVE syntax,
this may give unexpected results.
To force new syntax and avoid warning, add options structure argument:
x = fsolve(@sin,3,optimset('fsolve'));
To force grandfathered syntax and avoid warning, add options array argument:
x = fsolve(@sin,3,foptions);
> In C:\Programme\MATLAB\toolbox\optim\fsolve.m (parse_call) at line 389
In C:\Programme\MATLAB\toolbox\optim\fsolve.m at line 101
In C:\Programme\Matlab\work\x.m at line 1
Maximum number of function evaluations reached:
increase options.MaxFunEvals
x =
1.0e+004 *
0.2078 - 0.1607i
0.0043 + 0.0005i
1.0756 + 1.0280i
-0.0002 - 0.0003i
Kann mir jemand sagen, was ich falsch gemacht habe? Ich habe mich an einem Beispiel aus einem Buch langgehangelt. Aber unter der Suche Help taucht "grandfather" nicht auf und ich weiss nicht, ob, was und warum ich etwas ergänzen könnte, das hilft zu sinnvollen Ergebnissen zu kommen.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.01.2013, 22:52
Titel:
|
 |
Hallo,
schau doch mal in die Dokumentation von fsolve.
Die Fehlermeldung lässt mich vermuten, dass du eine ältere MATLAB-Version verwendest.
Ich würde es mit
versuchen.
Grüße,
Harald
P.S. eine Datei x.m und eine Variable x führt schnell zu Verwirrungen. Ich würde etwas mehr Kreativität versuchen ;)
|
|
|
Pumuckl |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.01.2013, 19:30
Titel:
|
 |
|
 |
|
benutze Version 6.5. Habe nun den Dateinamen x geändert,
x=fsolve(@f,[1.1982;0.0354;1;0.0082])
entsprechend dem Vorschlag geändert, komme aber immer noch auf unrealistische Ergebnisse und die Warnung
>> Warning: Cannot determine from calling sequence whether to use new
(2.0 or later) FSOLVE function or grandfathered FSOLVE function.
Assuming new syntax; if call was grandfathered FSOLVE syntax,
this may give unexpected results.
To force new syntax and avoid warning, add options structure argument:
x = fsolve(@sin,3,optimset('fsolve'));
To force grandfathered syntax and avoid warning, add options array argument:
x = fsolve(@sin,3,foptions);
> In C:\Programme\MATLAB\toolbox\optim\fsolve.m (parse_call) at line 389
In C:\Programme\MATLAB\toolbox\optim\fsolve.m at line 101
In C:\Programme\Matlab\work\Loeser.m at line 1
Maximum number of function evaluations reached:
increase options.MaxFunEvals
x =
1.0e+004 *
0.2078 - 0.1607i
0.0043 + 0.0005i
1.0756 + 1.0280i
-0.0002 - 0.0003i
Was ich auch nicht verstehe ist, ich habe gar keine Line 101 und fsolve.m Datei. Legt er diese selbst an? Ich komm hier nicht wirklich weiter.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 13.01.2013, 20:12
Titel:
|
 |
Hallo,
6.5 ist eine sehr alte Version, da kann ich nur begrenzt weiterhelfen. Lies bitte (wie zuvor gesagt) die Dokumentation von fsolve
Zitat: |
ich habe gar keine Line 101 und fsolve.m Datei. |
natürlich nicht, aber hinter den meisten Funktionen stecken letztlich .m-Dateien, und du rufst ja fsolve auf.
Da ich nicht weiß, was "packing" macht, kann ich auch nicht sagen, ob du mit neueren MATLAB-Versionen mehr Glück hättest.
Grüße,
Harald
|
|
|
Pumuckl |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.01.2013, 22:56
Titel:
|
 |
so, habe nun die frische Version 2012A drauf und es hat sich die Fehlermeldung geändert.
Solver stopped prematurely.
fsolve stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 400 (the default value).
x1 =
1.0e+05 *
1.8424 - 0.4667i
0.0001 + 0.0000i
-0.1388 + 0.0455i
-0.0000 - 0.0000i
EDU>>
Es klingt so als würde es abbrechen, bevor es konvergiert, interpretiere ich das richtig? Eigentlich sollte hier etwas ohne i drin rauskommen, sprich ganz normale Zahlen, nichts komplexes
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 14.01.2013, 23:01
Titel:
|
 |
Hallo,
du kannst die Anzahl der Iterationen erhöhen. Ich vermute aber, dass das Problem woanders liegt.
Kommt beim Startwert ein reeller Wert zurück? Wenn ja, sollte man die komplexen Ergebnisse über Nebenbedingungen (Schranken kann man z.B. in lsqnonlin angeben) abfangen.
Wie gesagt: wirklich weiterhelfen kann man dir nicht, wenn man nicht weiß, was "packing" macht.
Grüße,
Harald
|
|
|
Pumuckl |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.01.2013, 19:41
Titel:
|
 |
hallo,
das wort packing ist da nur reingerutscht, sollte mit einem % versehen sein und beeinflusst es nicht.
Wie ändere ich denn die voreingestellten 400?
Ich habe es unter options gesucht, aber offensichtlich mache ich die Syntax falsch, denn es sagt mir, es hätte jetzt zu viele/zu wenige Variablen, je nachdem, wo ich optimset einsetzen wollte und fval zum anzeigen.
|
|
|
Pumuckl |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.01.2013, 19:49
Titel:
|
 |
auch wenn ich fsolve durch lsqnonlin ersetze, ergibt sich ein Abbruch nach 400 Zyklen und es kommen komplexe Werte raus.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 15.01.2013, 21:33
Titel:
|
 |
Hallo,
gehe bitte immer gleich auf alle Fragen ein.
Da packing auskommentiert werden kann, konnte ich das nun reproduzieren.
Wenn du einen Startwert angibst, der komplexwertige Rückgabe liefert, ist es nicht weiter verwunderlich, wenn das auch so bleibt. Darauf hatte ich dich auch schon hingewiesen.
Die Optionen könntest du so setzen:
aber das hilft nicht gegen den schlechten Startwert.
lsqnonlin erlaubt das Setzen von Schrankenbedingungen, macht aber ansonsten nichts wesentlich anderes.
Grüße,
Harald
|
|
|
Pumuckl |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.01.2013, 20:34
Titel:
|
 |
vielen Dank, dies hat mir schon viel Verständnis gebracht, jetzt arbeite ich an den Startwerten, vielen Dank!
|
|
|
Pumuckl |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.01.2013, 18:41
Titel:
|
 |
jetzt werd ich verrückt. Als ich Deinen Vorschlag gestern eingegeben habe, ist es durchgelaufen. Jetzt passe ich die Ausgangswerte und Startwerte auf die aktuellen Messwerte an und es stoppt wieder nach 400 Iterationen, obwohl die Option noch drin ist. Ich kann mir das nicht erklären.
Ausserdem wollte ich mir gern die Iterationsergebnisse anzeigen lassen, habe die vermeintlich richtige Funktion gesucht und eingegeben. Diese zeigt mir nicht das, was ich wollte, nämlich die Funktionswerte, aber sie läuft wenigstens durch. Das erklärt mir das ganze noch viel weniger (aktuell ist diese Option wieder ausge%.
Könntest Du mir nochmals helfen hierbei?
Beschreibung: |
|
 Download |
Dateiname: |
hydrodynamics1_STEMMET_draft3.m |
Dateigröße: |
2.55 KB |
Heruntergeladen: |
270 mal |
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.01.2013, 18:26
Titel:
|
 |
Hallo,
Zitat: |
es stoppt wieder nach 400 Iterationen, obwohl die Option noch drin ist. |
Es gibt zwei Optionen, MaxFunEvals und MaxIter. Du setzt MaxFunEvals, überschritten wird MaxIter.
Zitat: |
Diese zeigt mir nicht das, was ich wollte, nämlich die Funktionswerte |
Bei mir sind in der dritten Spalte die Funktionswerte f(x), wenn ich 'Display' auf 'iter' setze.
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
|
|
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.
|
|