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

fmincon - Fehlermeldung

 

ERC123
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2016, 01:47     Titel: fmincon - Fehlermeldung
  Antworten mit Zitat      
Hallo alle zusammen,

ich möchte folgende Gleichung minimieren:

min w \sum\limits_{i}^N \sum\limits_{j}^N (ARBi - ARBj)^2.
<br />
ARB--> stellen die absoluten Risikobeiträge in einem Portfolio, dar.

Ich habe die Differenz der ARB durch die Matlab Funktion pdist2 berechnen und die quadrierte Summe aller Distanzen mit der Euklidischen Distanz ermitteln.

Mein Skript sieht wie folgt aus:

Code:
% Bereinigen des Arbeitsspeichers
clear;clc;
% Datenimport
mYallr=xlsread('Daten.xlsx','Rollierend','B5:M5222');

% Anzahl der Beobachtungen und Assets
[iNumObs, iNumAsset]=size(mYallr);

% Rendite und Kovarianzmatrix bestimmen
vRetMean=mean(mYallr);
mKov=cov(mYallr);

% Anteilsgewichte: naives Portfolio
vW0=ones(iNumAsset,1)./iNumAsset;

% Optimierung vorbereiten
vAeq = ones(1,iNumAsset);  % Budget-Restriktion
dBeq = 1;                  % RHS der Budget-Restriktion
vLB=zeros(iNumAsset,1);    % Minimale Anteilsgewichte (kein short selling)
%vUB=ones(iNumAsset,1);    % Maximale Anteilsgewichte - Beschränkung auf 1!
vUB=inf;                   % Maximale Anteilsgewichte (Unbeschränkt)

% Optionen für den Optimierungsalgorithmus setzen
options = optimset('Algorithm','sqp','Display','iter', 'MaxIter', 100, 'TolFun',1e-6, 'TolX', 1e-6, 'PlotFcns', @optimplotfval);

Quantil = 0;
MRBflag = 1;

    ERCWeights = fmincon(@(w)fPortERCNorm(w, mYallr), ...
    vW0, [], [], vAeq, dBeq, vLB, vUB, [], options);

Die Funktion fPortERCNorm:

function [mrb vARB dDifSqARB]=fPortERCNorm(vW, mYallr)

 %vola
         mrb = (cov(mYallr) * vW)./sqrt(vW'*cov(mYallr)*vW);
       
vARB = mrb .* vW/sqrt(vW'*cov(mYallr)*vW);

% Paarweise Distanzen zwischen allen Wertpapieren ermitteln,
% Matlab-Funktion pdist2
mEucDist=pdist2(vARB,vARB);
% quadrierte Summe aller Distanzen, Euklidische Distanz
dDifSqARB=sum(mEucDist ( : ) .^2);
end


Leider bekomme ich diese Fehlermeldung:

Error using fmincon (line 674)
User supplied objective function must return a scalar value.

Error in Test (line 43)
ERCWeights = fmincon(@(w)fPortERCNorm(w, mYallr), ...

Woran liegt das?

Kann mir jemand hier weiterhelfen?

Vielen Dank im Voraus!

Gruß

[EDITED, Jan, Bitte Formel- und Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

eine Zielfunktion sollte ein Rückgabeargument haben, nicht drei.
Hast du die Zielfunktion mal mit dem Startvektor aufgerufen?

Falls das nicht hilft, das Problem zu lösen, mal einen Haltepunkt in der Zielfunktion setzen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2016, 13:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

meinst du mit Rückgabeargumenten: w,mYallr?

Code:
 ERCWeights = fmincon(@(w)fPortERCNorm(w, mYallr), ...
    vW0, [], [], vAeq, dBeq, vLB, vUB, [], options);


Ich habe nun folgendes getestet:
Code:
 ERCWeights = fmincon(@(w)fPortERCNorm, ...
    vW0, [], [], vAeq, dBeq, vLB, vUB, [], options);


Bekomme allerdings diese Fehlermeldung:

Error using fPortERCNorm (line 4)
Not enough input arguments.

Error in @(w)fPortERCNorm


Error in fmincon (line 601)
initVals.f = feval(funfcn{3},X,varargin{:});

Error in Test (line 43)
ERCWeights = fmincon(@(w)fPortERCNorm, ...

Caused by:
Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.

Wie soll ich jetzt weiter vorgehen? Bin etwas verwirrt.

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.12.2016, 13:21     Titel:
  Antworten mit Zitat      
Hallo,

die Aufrufform war schon richtig. Mich verwundern bloß die drei Rückgabeargumente.

Hast du versucht, die Zielfunktion mit dem Startvektor aufzurufen? Was ist das Ergebnis?
Code:
fPortERCNorm(vW0, mYallr)


Ansonsten wie gesagt debuggen. Mangels Daten musst du das selbst machen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2016, 22:19     Titel:
  Antworten mit Zitat      
Hallo,

danke, es war ein Fehler meinerseits, habe einen Parameter in der Funktion anders benannt Smile.

Gruß
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.