fmincon nonlinear equality constraint

4 ビュー (過去 30 日間)
Clemens Gersch
Clemens Gersch 2020 年 5 月 11 日
コメント済み: Clemens Gersch 2020 年 5 月 12 日
Hi,
I am trying to implement the following equality constraint for using it in fmincon:
where
and TargetVariance is a fixed numeric value. The size of w is 1xN.
This is a minimal example of my code.
%Input
Mu = [.1, .15, .12];
Cov = [.3, .1, .2;
.1, .5, .1;
.2, .1, .7];
% Prepare vector of ones.
N = numel(Mu);
one = ones(1,N);
% Objective function.
NegPFMu = @(w) -Mu * w';
% Set equal weights as initial point.
w0 = one * (1/N);
% Sum of weights constraint.
Aeq = one;
beq = 1;
% Shortselling constraint.
lb = zeros(1,N);
% Minimize.
wopt = fmincon(NegPFMu, w0, [], [], Aeq, beq, lb);
Can you help me with the constraint?
I was thinking about something like the following but I don't how to call that as my nonlcon then.
function [c, ceq] = mycon(w, Cov, TargetVariance)
PortfolioVariance = @(w) w*Cov*w'
ceq = PortfolioVariance(w) - Targetvariance;
c = [];
end
Could you help me please?

採用された回答

Matt J
Matt J 2020 年 5 月 12 日
wopt = fmincon(NegPFMu, w0, [], [], Aeq, beq, lb,[], @(w) mycon(w, Cov, TargetVariance));
function [c, ceq] = mycon(w, Cov, TargetVariance)
ceq = w*Cov*w'- Targetvariance;
c = [];
end
  3 件のコメント
Matt J
Matt J 2020 年 5 月 12 日
編集済み: Matt J 2020 年 5 月 12 日
@(w) mycon(w, Cov, TargetVariance) is an anonymous function.
However, if you mean you would like to avoid creating the local function mycon, then you could do this,
wopt = fmincon(NegPFMu, w0, [], [], Aeq, beq, lb,[],...
@(w) deal([], w*Cov*w'- Targetvariance) );
Clemens Gersch
Clemens Gersch 2020 年 5 月 12 日
That was exactly what I was looking for. Thank you!

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by