|
|
Benötige ein paar Tips zum Verständnis. |
|
bandchef |

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 11:54
Titel: Benötige ein paar Tips zum Verständnis.
|
 |
Hi Leute!
Ich bin über diesen Code gestoßen:
Nun meine Frage: Was macht dieser Code genau, insbesondere was ist dieses ominöse @ darin? Ich bin da schon ein paar Mal drüber gestolpert aber so richtig kapiert hab ich das @ nicht. Könnt ihr mir da etwas auf die Sprünge helfen?
Laut der Matlab Dokumentation sucht ja fminsearch ein lokales Minimum mit 2 unterschiedlichen Methoden: Golden Section Search und Parabolischer Suche. Stimmt doch soweit, oder? Nun noch kurz zur Funktion selber:
Als erstes Argument von fminsearch übergibt man eben das "@" was ich noch nicht verstanden habe. Als nächstes dann die Funktion selbst auf der das lok. Minimum gesucht werden soll. Dann kommt der Startpunkt - als Vektor gegeben - mit dem fminsearch anfangen soll zu suchen? Stimmt das soweit?
Habt ihr noch irgendwelche Tips für mich bzgl. fminsearch? Aber wie gesagt, vor allem das "@" ist das Problem.
Danke!
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 12:02
Titel:
|
 |
Hallo,
ich denke mal, statt function steht hier der Name der tatsächlichen Funktion? Würde mich nämlich wundern, wenn das so funktioniert.
Bottom line: Die Funktion wird durch Variation von x minimiert; die restlichen Übergabeparameter werden konstant gehalten.
Such mal in der Hilfe nach anonymous function handles, da wird das näher beschrieben.
Eine Suche nach "passing extra parameters" zeigt auch, wie das auf Optimierungsprobleme angewendet werden kann.
Grüße,
Harald
P.S.: Deine Kollegen [oder wo auch immer du den Code herbekommst] sollten ihren Code vielleicht mal kommentieren
|
|
|
bandchef |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 12:18
Titel:
|
 |
|
 |
|
Danke Harald für die immer schnellen und Hilfreichen Antworten!
Also laut der Hilfe kann man da dann Funktionen schreiben die es ermöglicht ohne initialisierte bspw. x-Werte die Funktion zu deklarieren. Will heißen: sqr = @(x) x.^2; sqr(5) = 25. Soweit hab ich das jetzt verstanden. Aber wozu brauch ich dann das @(x) unbedingt in meiner obigen Funktion? Die Fkt. steht ja da sowieso schon in einer extra Datei! Verstehst du?
Ich hab mir nun diese neue Funktion in eine extra Datei geschrieben:
Die Funktion rufe ich nun so aus einem Skript auf:
Leider funktioniert das so nicht wie ich mir das vorgestellt habe. Wo liegt hier nun der Fehler? Ich möchte mit fminsearch das lok. Minimum der Funktion "newtonFormel" finden. (Die Funktion ist übrigens die, die Newton vor ein paar hundert Jahren selbst benutzt hat, um das numerische Newton-Iterationsverfahren zur Suche von lokalen Minimas in seinem Buch zu beweisen )
Edit: Eigentlich hab ich doch alles was ich brauche, oder? Ich hab im fminsearch das benötigte @(x) (anscheinend auch für Funktionen die nicht "inline" sind), dann hab ich den Funktionsaufruf drin und ich setze einen Start-x-Wert.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 12:52
Titel:
|
 |
Hallo,
das @(x) benötigst du, um das Funktionsinterface zu änden: aus einer Funktion, die 4 Inputs benötigt, wird eine, die einen Input benötigt.
Zitat: |
Leider funktioniert das so nicht wie ich mir das vorgestellt habe. |
Diese Aussage ist wenig hilfreich. Gibt es eine Fehlermeldung? Welche? Ist das Resultat unerwartet? Warum?
"clear; close all;" ist hier unnötig.
Grüße,
Harald
|
|
|
bandchef |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 14:27
Titel:
|
 |
Fehlermeldung kommt die hier:
Undefined function 'newtonFormel' for input arguments of type 'double'.
Error in @(x)newtonFormel(x)
Error in fminsearch (line 191)
fv(:,1) = funfcn(x,varargin{:});
Error in quadratische_Funktion (line 4)
p = fminsearch(@(x) newtonFormel(x), 2
Erwartet hab ich eigentlich ein Ergebnis das mir das lokale Minimum der Funktion angibt...
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 14:36
Titel:
|
 |
Hast du die Funktion newtonFormel auch mit dem gleichen Namen so als m-file abgespeichert? Die Fehlermeldung bedeutet, dass Matlab deine Funktion unbekannt ist.
|
|
|
bandchef |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 15:25
Titel:
|
 |
Hm, ok. Das war wohl der Fehler. Das wusste ich auch nicht.
Jetzt läuft anscheinend fminsearch durch. Das Ergebnis welches nun in p steht ist 0.82. Das Problem ist, dass das jetzt eine Aufgabe war die ich mir selbst ausgedacht habe. Ich weiß jetzt somit nicht, ob dieser y-Wert als Ergebnis für das lok. Min. richtig ist...
Edit: Wie kann man sich eigentlich ausgeben lassen, dass Matlab einem anzeigt welche Methode fminsearch bei jeder Iteration verwendet?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 15:36
Titel:
|
 |
Hallo,
im Zweifelsfall hilft ein Plot von der Umgebung
Mehr Informationen über den Ablauf kannst du bekommen, indem du die Option 'Display' über OPTIMSET auf 'iter' setzt.
Grüße,
Harald
|
|
|
bandchef |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.01.2012, 15:39
Titel:
|
 |
Hab das jetzt mit einem Plot überprüft und das Ergebnis für den x-Wert schein richtig zu sein.
Liefert also fminsearch IMMER den x-Wert des lok. Min. zurück und schreibt diesen Wert dann in die jeweilige Variable?
Wie funktioniert dann fminsearch hier bei diesem Aufruf?
Ich hab hier "einen" Startwert der sich aus zwei Werten zusammensetzt. Wie erkenne ich wann ich zwei Werte brauche?
|
|
|
|
|
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.
|
|