|
|
|
komplexes Nullstellenproblem lösen |
|
| Janine |

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 07.01.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.06.2012, 15:15
Titel: komplexes Nullstellenproblem lösen
|
 |
| |
 |
|
Hallo zusammen,
kaum ist ein Problem gelöst, bin ich schon aufs nächste gestoßen...
Ich habe ein recht komplexes nichtlineares Nullstellenproblem, das ich einfach nicht gelöst bekomme.
Wenn ich solve benutze bekomme ich folgende Warnung:
Warning: Explicit solution could not be found.
Also muss ich das ganze wohl numerisch lösen?!? Wenn ich nun fsolve benutze, bekomme ich diese Fehlermeldung:
Undefined function 'isfinite' for input arguments of type 'sym'.
Ich muss auch ehrlich zugeben, dass ich mit der Syntax die fsolve() übergeben werden soll nicht ganz sicher bin. Ich habe schon ein paar Varianten probiert und im Moment das hier in meinem Code stehen
fsolve(@(x)d,1);
wobei d meine Funktion ist, die die Varable x enhält, für die ich gerne eine Lösung hätte.
Ist die verwendete Syntax schon falsch oder liegt der Fehler doch woanders?
Dann habe ich noch ein 2. aber vermutlich kleineres Problem. Bei einer anderen recht einfachen Funktion f(x) löse ich ebenfalls ein Nullstellenproblem, das allerdings sehr gut mit den solve()-Befehl funktioniert. Eigentlich gibt es hier mehrere Lösungen für x. Matlab berechnet mir allerdings immer nur eine. Wie kann ich z.B. einen Bereich übergeben, in dem mir alle vorkommenden Lösungen berechnet werden?
Nachdem ich die Matlabhilfe studiert habe, habe ich es damit probiert
evalin(symengine, 'numeric::solve(f, x = 0..2)')
allerdings ohne Erfolg...
Tut mir Leid, wenn diese Frage schon irgendwo beantwortet wurde, aber ich habe bei meinen Recherchen irgendwie nichts finden können
Vielen Dank schon mal und viele Grüße,
Janine
|
|
|
|
|
|
| Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.06.2012, 06:32
Titel:
|
 |
Am besten du postest ein bisschen mehr von deinem Code. Dann kann man das Problem besser verstehen.
Vielleicht hilft dir ja das kleine Beispiel etwas:
|
|
|
|
| Janine |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 07.01.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.06.2012, 11:24
Titel:
|
 |
| |
 |
|
Ok, dann probier ich es nochmal ein bisschen zu verdeutlichen.
Die Matrix M enthält also ein Symbol, d.h. die Determinante somit auch eine Unbekannte, die ich mit fsolve gerne finden möchte (det(M)=0). Wenn ich das Ganze allerdings so ausführe, bekomme ich folgende Warnung:
Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems; using Levenberg-Marquardt
algorithm instead.
> In fsolve at 305
und diese Fehlermeldung:
Undefined function 'isfinite' for input arguments of type 'sym'.
Error in levenbergMarquardt (line 16)
if any(~isfinite(costFun))
Error in fsolve (line 406)
[x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData] = ...
Falls ich anstatt einem Bereich einen Startwert angebe (fsolve(@(x)d,10)), fällt die Warnung natürlich weg und ich erhalte nur die Fehlermeldung:
Undefined function 'isfinite' for input arguments of type 'sym'.
Error in trustnleqn (line 27)
if any(~isfinite(Fvec))
Error in fsolve (line 399)
[x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData]=...
Ich habe schon zu dieser Fehlermeldung gegoogelt, konnte aber bisher nichts darüber finden, was ich ändern muss.
Ich vermute, er hat Probleme mit dem Symbol in der Gleichung, da man bei der Nutzung von fsolve ja x eig nicht als Symbol definiert?!?
Ich hoffe mein Problem ist nun besser verständlich!
Viele Grüße,
Janine
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.06.2012, 15:27
Titel:
|
 |
Hallo,
das entscheidende Problem ist, dass man symbolisch und numerisch nicht mischen sollte.
Es ist z.B. möglich, x trotzdem als eine Art Variable zu verwenden:
abspeichern und dann
Grüße,
Harald
|
|
|
|
| Janine |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 07.01.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.06.2012, 22:52
Titel:
|
 |
Ok, wenn ich das allerdings so mache, bekomme ich eine Fehlermeldung, dass ich nicht genug input arguments habe...
Meine Matrix entsteht aus mehreren Variablen, die bis auf x alle numerische Werte haben (z.B. a,b,c). D.h.
Wenn ich nun versuche
zu lösen, funktioniert das leider nicht.
Woran kann das liegen?
Viele Grüße!
|
|
|
|
| gast gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.06.2012, 10:21
Titel:
|
 |
Hast du mal versucht, mymatrix nur in Abhängigkeit von x zu übergeben?
du willst ja a,b,c nicht als variablen zur Lösung übergeben.
Außerdem könntest Du mal deine Matrix posten, sodass man selbst probieren kann.
Grüße
|
|
|
|
| Janine |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 20
|
 |
|
 |
Anmeldedatum: 07.01.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.06.2012, 13:13
Titel:
|
 |
a,b,c sind wie gesagt numerische Werte. Die hatte ich auch nicht als Variablen übergeben. Mein Fehler lag einzig und allein an einer falschen Klammer Obwohl ich schon gefühlte 100x auf sowas geschaut hatte, ist es mir erst beim 101. Mal aufgefallen...
Trotzdem danke an alle, die versucht haben zu helfen!
Grüße!
|
|
|
|
|
|
|
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.
|
|