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

Numerische Minimierung einer Funktion

 

LukeS
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2007, 00:04     Titel: Numerische Minimierung einer Funktion
  Antworten mit Zitat      
Hallo zusammen

Ich hab ein kleines Problem bei folgender Aufgabe:

Zitat:
Die Funktion blackboxfun (blackboxfun.p) ist eine skalare Funktion von zwei Veränderlichen. Analysieren (visualisieren) Sie die Funktion geeignet. Die Funktion hat ein Minimum. Finden Sie dieses Minimum möglichst genau. Minimum bei x = . . . , y = . . .)


Das Plotten ist kein Problem. Ich habe das Problem, das Minimum zu finden.
Bis jetzt hab ich:
Code:
x = -10:0.01:10;
y = x;
z = blackboxfun(x,y);
minZ = min(z)


Wie kriege ich jetzt die die x- und y-Werte des Minimums?

Danke für eure Hilfe!
LukeS
Private Nachricht senden Benutzer-Profile anzeigen


LukeS
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 21.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2007, 11:15     Titel:
  Antworten mit Zitat      
Also ich hab mal eine provisorische Lösung:
Code:
x = -10:0.01:10;
y = x;
z = blackboxfun(x,y);

minZ = min(z)
for n=1:length(z)
    if z(n) == minZ
        m = n;
    end
end
minX = x(m)
minY = y(m)


Vielleicht gibt es noch eine elegantere Lösung.
Für Tipps bin ich immer dankbar!

Gruss LukeS
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 24.09.2007, 13:00     Titel:
  Antworten mit Zitat      
Hallo LukeS,

um das, was Du in der Schleife abfragst, eleganter zu lösen, gibt es die find-Funktion, die die Indizes zurückgibt, an denen beispielsweise z==minZ.

Code:
m = find(z==minZ);


Allerdings frage ich mich, ob das überhaupt so funktionieren kann bei einer Funktion von zwei Veränderlichen. Denn so ist ja immer minX == minY. Wenn ich das richtig sehe, ist z eine Matrix. (Zu jedem Paar x,y gibt es einen Wert z.) Um das Minimum zu finden, müsste man über beide Dimensionen minimieren, also minZ = min(min(z)) oder minZ = min(z(:)). Mit dem find-Befehl kann man dann auch die beiden Indizes für x bzw. y herausbekommen:

Code:
minZ = min(z(:));
[m1,m2] = find(z==minZ);
minX = x(m1);
minY = y(m2);


Oder ist z doch ein Vektor? Das müsste man über die blackboxfun schon wissen... Und als Optimierer muss ich doch noch anmerken, dass man mit diesem Verfahren nur das Minimum der Matrix bestimmt, und nicht das der Funktion. Funktioniert denn der von dir gepostete Code, so wie du es brauchst?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 24.09.2007, 22:32     Titel:
  Antworten mit Zitat      
Hallo LukeS,

ich vermute, dass Dir eine Optimierungs/Minimierungsroutine vermutlich weiterhilft.
vgl
http://www.gomatlab.de/optimierung-.....eine-diskussion-t260.html

Trotzdem die Antwort auf Deine zweite Frage:
Wie finde ich das Minimum einer Matrix?
Code:

[minZ, index] = min(Z(:));
 

Index ist nun dummerweise eine Zahl, nämlich der Index von minZ, wenn Z ein Vektor wäre (tipp mal Z(Smile ein, nämlich dieser).

Um nun diese Indexnummer in die passenden row und column der Matrix umzurechnen gibt es die Funktion sub2ind.

Eine andere Möglichkeit ist:
Code:

[minimaleZeilen,indZ] = min(Z);
[minvonallen,indSpalten]  = min(minimaleZeilen);
 

Das Minimum befindet sich nun in Zeile indZ und Spalte indSpalten. Das ist aber nciht so schön wie sich direkt den Index ausgeben zu lassen.

Eine dritte Möglcihkeit ist eine Kombination
Code:

minZ = min(Z:);

indZ = find(Z == minZ)
 

und indZ kann dann wie oben mit sub2ind (oder ind2sub) in row und column umgerechnet werden.
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
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 - 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.