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

Maximiere Funktion unter Nebenbedingungen mit fmincon

 

Marcelinho
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 15:31     Titel: Maximiere Funktion unter Nebenbedingungen mit fmincon
  Antworten mit Zitat      
Hallo Forum,

Ich möchte eine Funktion mit fmincon maximieren, aber weiß nicht genau wie ich den Code schreiben muss.

Code:
function [s,weight] = objectfun1(w3,M3)


s = w3'*M3*kron(w3,w3);s=-s;

weight = w3;

end


Code:
fun=objectfun1;

x0=zeros(10,1);


Aeq=[1 1 1 1 1 1 1 1 1 1];

beq=1;

lb=zeros(10,1);

ub=ones(10,1);

[w3, Sopt] = fmincon(fun,x0,[],[],Aeq, beq,lb,ub);


Ich möchte den maximalen Wert S bekommen und die dazugehörigen Gewichtungen w3 (für die 10 Wertpapiere). M3 ist eine konstante Matrix.

Ich bekomme diese Fehlermeldungen :
Error using objectfun1 (line 4)
Not enough input arguments.

Error in test4 (line 2)
fun=objectfun1;

Habe die Dateien angefügt. und wäre um Verbesserungsvorschläge oder einen funktionierenden Code sehr dankbar.

LG

test4.m
 Beschreibung:

Download
 Dateiname:  test4.m
 Dateigröße:  171 Bytes
 Heruntergeladen:  264 mal
objectfun1.m
 Beschreibung:

Download
 Dateiname:  objectfun1.m
 Dateigröße:  98 Bytes
 Heruntergeladen:  281 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.11.2014, 17:45     Titel:
  Antworten mit Zitat      
Hallo,

M3 ist konstant, oder? Dann:

Code:
M3 = % hier sollte M3 definiert werden

fun=@(w) objectfun1(w, M3);


Die Zielfunktion braucht weight nicht zurückzugeben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 21:49     Titel:
  Antworten mit Zitat      
Code:
function [s] = objectfun2(w,M3)

    s=w'*M3*kron(w,w); s=-s;
   
end


Code:
fun = @(w)objectfun2(w,M3);

x0=zeros(10,1);

Aeq=ones(10,1);

beq=1;

lb=zeros(10,1);

ub=ones(10,1);

[w3, Sopt] = fmincon(fun,x0,Aeq,beq,lb,ub);


Soweit bin ich nun, aber ich kriege immernoch folgende Fehlermeldungen

Error using fmincon (line 284) Aeq must have 10 column(s). (Macht keinen Sinn, erscheint selbst wenn ich den Aeq transponiere)

Error in test4 (line 14) [w3, Sopt] = fmincon(fun,x0,Aeq,beq,lb,ub);

M3 ist eine CoSchiefe (10x100) Matrix und konstant.
Ich denke Matlab hat noch ein Problem mit der function.
Aber sie ist in der Dimension richtig und sollte doch zu lösen sein, da nur w unbekannt ist. Das soll Matlab ja suchen.
Ich will die optimale Schiefe Sopt errechnen und brauche dazu die Gewichtungen w (10x1 vektor).
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bitte mal genau posten, was du da wie transponierst...

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 22:42     Titel:
  Antworten mit Zitat      
Aeq und beq sind die Bedingung, dass die Gewichtung sich zu 1 summieren muss.

w'(1x10)*ones(10x1)=1

Er sagte mir Error using fmincon (line 284) Aeq must have 10 column(s).

Transponiere ich Aeq zu ones(10x1)' kommt der gleiche error. Das kann ja nicht sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Transponiere ich Aeq kommt der gleiche error. Das kann ja nicht sein.

Sehe ich auch so. Daher:
- ist der Code abgespeichert?
- wie transponierst du genau?

Bitte wirklich den Code so posten, wie du ihn laufen lässt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 23:01     Titel:
  Antworten mit Zitat      
Code:
function [s] = objectfun2(w,M3)

    s=w'*M3*kron(w,w); s=-s;
   
end


Code:
fun = @(w)objectfun2(w,M3);

x0=zeros(10,1);

Aeq=ones(10,1)';

beq=1;

lb=zeros(10,1);

ub=ones(10,1);

[w3, Sopt] = fmincon(fun,x0,Aeq,beq,lb,ub);
 


Genau so ist er und dann kommen die genannten Fehler. Wie gesagt M3 ist eine (10x100) Matrix.(Anhang)
Hoffe du kannst mir da helfen ... ich denke bin nicht mehr weit von der Lösung entfernt.

Grüsse

M3 Matrix.xls
 Beschreibung:

Download
 Dateiname:  M3 Matrix.xls
 Dateigröße:  43 KB
 Heruntergeladen:  309 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

jetzt seh ich's - du musst dich an die Argumentfolge halten. Wenn du z.B. keine linearen Ungleichungen hast, musst du das mit [] überspringen, also

Code:
[w3, Sopt] = fmincon(fun,x0,[], [], Aeq,beq,lb,ub);


Die Fehlermeldung hat sich auf das Argument Aeq bezogen, das mit Strg-F1 angezeigt wird - bei deinem Aufruf war das lb.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 23:28     Titel:
  Antworten mit Zitat      
Ich bin eben auf das Gleiche aufmerksam geworden und du hast es nochmal bestätigt. Das ist ein gutes Gefühl.
Ich danke dir 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 - 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.