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

Minimieren einer Funktion, die von einer Funktion abhängt

 

TerenceSpencer
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.03.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2018, 13:54     Titel: Minimieren einer Funktion, die von einer Funktion abhängt
  Antworten mit Zitat      
Hallo,

ich würde gerne eine Funktion minimieren, die von einer anderen Funktion abhängt, bekomme es aber nicht so richtig hin. Meine Funktion 'fun' ist definiert als:

Code:

function y = fun(x)
y = 3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2);
end
 

Meine Funktion 'testfun' ist definiert als:
Code:

function y = testfun(fcn,z,x)
y = z - fcn(x) ;
end
 

Wenn ich nun folgendes eingebe, berechnet er es ganz normal und gibt mir ein Ergebnis aus:
Code:

y = testfun(@fun,z,x)
 

Nun möchte ich die Funktion 'testfun' minimieren. Wenn ich also

Code:

u = fminunc(@testfun,x0)
 

eingebe, sagt MATLAB mir natürlich, dass er nicht genug input arguments hat, da es ja nicht weiß, was 'fcn' von 'testfun' sein soll. Wenn ich aber folgendes versuche,

Code:

u = fminunc(@testfun(@fun(x),x0)
 

bekomme ich die Fehlermeldung, dass die Klammer nach @testfun dort nicht hin gehört. Nun also meine Frage: Wie kann ich MATLAB eine Funktion minimieren lassen, die von einer anderen Funktion abhängt bzw. wie kann ich MATLAB sagen um welche Funktion es sich handelt? Ich möchte sowohl nach z als auch nach x minimieren können.

Vielen Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.446
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.03.2018, 20:22     Titel:
  Antworten mit Zitat      
Hallo,

Code:
zfest = ...;
u = fminunc(@(x) testfun(@fun, x, zfest),x0)


bzw.
Code:
xfest = ...;
u = fminunc(@(z) testfun(@fun, xfest, z),z0)


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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.03.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2018, 17:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank. Das hat gut funktioniert und mich ein ganzes Stück weitergebracht. In meinem konkreten Anwendungfall ist meine Variable für die ich die Funktion minimiere eine Matrix. Für diese würde ich gerne eine Bedingung festlegen. Die Hauptdiagonale der Matrix soll aus Nullen bestehen und nur die übrigen Werte anpassen. Geht das?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.446
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.03.2018, 23:50     Titel:
  Antworten mit Zitat      
Hallo,

du kannst ja ohnehin nur einen Vektor von Variablen angeben. Insofern würdest du z.B. bei einer 3x3-Matrix nur die 6 Elemente, die außerhalb der Diagonale stehen, als zu optimierende Variablen ansehen und daraus die 3x3-Matrix mit Nullen auf der Diagonale konstruieren.

Code:
x = rand(1,6);
M = zeros(3,3);
M([2,3,4,6,7,8]) = x


Grüße,
Harald
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.