|
|
Optimierung mit fminsearch |
|
ogbob |
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 12:30
Titel: Optimierung mit fminsearch
|
|
Hallo,
der Umgang mit Matlab ist mir noch relativ neu.
Ich möchte mit fminsearch das Minimum einer Funktion finden. Dafür steht mir eine Funktion mit symbolischen Variablen zur Verfügung. Ich möchte also jetzt für die symbolischen Variablen Werte finden, die die Funktion minimiert.
Das ganze sieht in etwa so aus:
Meine Frage ist jetzt:
Wie kann ich auf diesen Grundlagen das Minimum finden?
Mein erster Gedanke war:
Das funktioniert aber nicht, wegen der fehlenden Konvertierung in double, so wie ich das verstanden habe. Eine Lösung wie ich das zum Laufen bringe finde ich aber nicht.
(In die übliche Form mit @(x) x(1)^2 ..... Schreibweise kann ich es nicht von Hand umwandeln, da die Funktion die mir zur Verfügung steht zu lang ist)
Hilfe !
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 14:01
Titel:
|
|
Hallo,
spätestens wenn du vielleicht noch symbolische Parameter hast wäre es doch sinnvoller, den Gradienten auf 0 zu setzen?
Ansonsten gibt es genau für den Zweck
matlabFunction
.
Grüße,
Harald
|
|
|
ogbob |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2015, 18:14
Titel:
|
|
Danke schonmal für die sehr schnelle Antwort!
-Mit dem Gradient auf Null setzen kann ich nicht so viel anfangen
Also so wie ich das verstanden habe erwartet fminsearch ein handle. Das habe ich jetzt mit matlabFunction erstellt und an fminsearch übergeben. Das ganze sieht so aus:
Nach dem letzten Aufruf wird ein Error geworfen:
Error using symengine>makeFhandle/@(a,b,c)(b.*2.0)./c+a.^2
Not enough input arguments.
Error in fminsearch (line 191)
fv(:,1) = funfcn(x,varargin{:});
Error in Test_fminsearch (line 1
[g,fval] = fminsearch(f,[0,0,0,0,0,0])
Mit der Aussage "Not enough input arguments" kann ich an dieser Stelle gar nicht anfangen.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 26.06.2015, 18:44
Titel:
|
|
Hallo,
Zitat: |
Mit dem Gradient auf Null setzen kann ich nicht so viel anfangen |
Ist an sich Schulwissen: in einem Minimum oder Maximum ist die Ableitung 0, mehrdimensional entsprechend der Gradient. Wenn man also symbolisch ein Minimum oder Maximum sucht, muss man
lösen.
Zitat: |
Mit der Aussage "Not enough input arguments" kann ich an dieser Stelle gar nicht anfangen. |
Hast du denn vielleicht mal die Dokumentation gelesen und dir angeschaut, wieviele Eingabeargumente die Funktion, die übergeben wird, annehmen soll?
Zitat: |
fun is the function to be minimized. It accepts an input x and returns a scalar f, the objective function evaluated at x. |
Grüße,
Harald
|
|
|
ogbob |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.06.2015, 14:03
Titel:
|
|
Sorry aber da blicke ich nicht durch. Es muss doch eine einfach Lösung geben anstatt die Variablen x(1), x(2) und x(3) zu nennen und damit einen Vektor x zu füllen...
... die Variablen beliebig zu nennen:
Mit Gradient = 0 steht man doch letztendlich vor ähnlichen Problemen oder nicht?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 27.06.2015, 19:14
Titel:
|
|
Hallo,
Zitat: |
Es muss doch eine einfach Lösung geben anstatt die Variablen x(1), x(2) und x(3) zu nennen und damit einen Vektor x zu füllen... |
Mir ist keine bekannt. Wo liegt denn das Problem dabei?
Grüße,
Harald
|
|
|
ogbob |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 26.06.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.06.2015, 08:45
Titel:
|
|
Das Problem ist, dass ich aus einer vorherigen Berechnung (durch ein Skript) eine Matrix erhalte, die voller Funktion mit symbolischen Variablen ist. Jetzt möchte ich daraus erstmal nur eine Funktion nehmen.
Die Funktionen auf in der Matrix sind aber sehr sehr lang, so lang, dass das manuelle Ändern der Variablen (a, b, c, d, e, ...) in x(1), x(2), x(3), ... keinen Sinn macht.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.06.2015, 12:22
Titel:
|
|
Hallo,
Zitat: |
Die Funktionen auf in der Matrix sind aber sehr sehr lang, so lang, dass das manuelle Ändern der Variablen (a, b, c, d, e, ...) in x(1), x(2), x(3), ... keinen Sinn macht. |
Eine Möglichkeit wäre eine Umwandlung in folgender Form:
Das wird allerdings nicht mit einem anonymous function handle gehen, muss also in eine Funktion ausgelagert werden.
Die andere Frage ist natürlich, ob es so sinnvoll ist, die Matrix anfangs symbolisch aufzustellen, wenn man am Ende damit numerisch arbeiten will.
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 - 2024
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.
|
|