WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

komplexes Nullstellenproblem lösen

 

Janine
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 07.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2012, 15:15     Titel: komplexes Nullstellenproblem lösen
  Antworten mit Zitat      
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 Sad

Vielen Dank schon mal und viele Grüße,
Janine
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 06:32     Titel:
  Antworten mit Zitat      
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:

Code:

% symbolische Berechnung
solve('x^2-1')
% numerische Berechnung
d = @(x) x.^2 - 1;
fsolve(d,[-2,2])
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Janine
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 07.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2012, 11:24     Titel:
  Antworten mit Zitat      
Ok, dann probier ich es nochmal ein bisschen zu verdeutlichen.
Code:
syms x;
M = (erstellt in Abhängigkeit von x);
d = det(M);
n = fsolve(@(x)d,[1,50]);


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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.06.2012, 15:27     Titel:
  Antworten mit Zitat      
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:

Code:
function M = mymatrix(x)
% berechne M als Matrix in Abhängigkeit von x (ohne syms oder so)

abspeichern und dann

Code:
fsolve(@(x) det(mymatrix(x)), x0)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Janine
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 07.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2012, 22:52     Titel:
  Antworten mit Zitat      
Ok, wenn ich das allerdings so mache, bekomme ich eine Fehlermeldung, dass ich nicht genug input arguments habe... Confused
Meine Matrix entsteht aus mehreren Variablen, die bis auf x alle numerische Werte haben (z.B. a,b,c). D.h.
Code:
function M = mymatrix(a,b,c,x)


Wenn ich nun versuche
Code:
fsolve(@(x) det(mymatrix(a,b,c,x)), x0)

zu lösen, funktioniert das leider nicht.

Woran kann das liegen?

Viele Grüße!
Private Nachricht senden Benutzer-Profile anzeigen
 
gast gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 10:21     Titel:
  Antworten mit Zitat      
Hast du mal versucht, mymatrix nur in Abhängigkeit von x zu übergeben?

Code:
fsolve(@(x)det(mymatrix(x)),x0)


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

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 07.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2012, 13:13     Titel:
  Antworten mit Zitat      
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 Very Happy 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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.