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

Benötige ein paar Tips zum Verständnis.

 

bandchef
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 13.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 11:54     Titel: Benötige ein paar Tips zum Verständnis.
  Antworten mit Zitat      
Hi Leute!

Ich bin über diesen Code gestoßen:

Code:
p = fminsearch(@(x) function(x,w,l(1:3),b(1:3)), [l(4), b(4)]);


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!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.01.2012, 12:02     Titel:
  Antworten mit Zitat      
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 Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
bandchef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 13.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 12:18     Titel:
  Antworten mit Zitat      
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:
Code:

function [y] = newtonFormel(x)

y = x.^3-2.*x-5

end
 


Die Funktion rufe ich nun so aus einem Skript auf:

Code:

clear; close all; format compact;

fminsearch(@(x) newtonFormel(x), 2)
 


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 Smile )

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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.01.2012, 12:52     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
bandchef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 13.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 14:27     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 04.01.2012, 14:36     Titel:
  Antworten mit Zitat      
Hast du die Funktion newtonFormel auch mit dem gleichen Namen so als m-file abgespeichert? Die Fehlermeldung bedeutet, dass Matlab deine Funktion unbekannt ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
bandchef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 13.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 15:25     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.01.2012, 15:36     Titel:
  Antworten mit Zitat      
Hallo,

im Zweifelsfall hilft ein Plot von der Umgebung
Code:
x = 0:0.01:2;
plot(x, x.^3-2.*x-5)


Mehr Informationen über den Ablauf kannst du bekommen, indem du die Option 'Display' über OPTIMSET auf 'iter' setzt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 13.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 15:39     Titel:
  Antworten mit Zitat      
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?
Code:
p = fminsearch(@(x) function(x,w,l(1:3),b(1:3)), [l(4), b(4)]);

Ich hab hier "einen" Startwert der sich aus zwei Werten zusammensetzt. Wie erkenne ich wann ich zwei Werte brauche?
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.