How to implement a nonlinear constraint?

4 views (last 30 days)
hello i would appreciate some help to implement a nonlinear inequality in my fmincon program. I am trying to maximize Sharpe ratio under two constraints. First that the sum of the weights equal one and the second one is that (((w-w0).^2).^1/2) -0.005 >= 0 (tracking error constraint where w0 is set to be the benchmark weights vector). I am getting errors when trying to programme the tracking error constraint. Thank you!
for i=1:T-M
objective = @(w) -(zbarA3(:,i)'*w - rf)/(sqrt(w'*covmatA3{1,i}*w));
w0 = Wi_AQ2;
Aeq = ones(1,n);
beq = 1;
W_Q3(:,i) = fmincon(objective,w0,[],[],Aeq,beq,[],[],nonling);
end
%where nonling is
function [c,ceq]=nonling(w)
c= sqrt((w(1) - Wi_AQ2)^2) -0.005;
ceq=w*0;
end
  6 Comments
Matt J
Matt J on 9 Feb 2018
Edited: Matt J on 9 Feb 2018
w and w0 are length-n vectors. Do you therefore have n contraints?
abs(w(i)-w0(i))>=0.005, i=1...,n
Mohamad Moussa
Mohamad Moussa on 9 Feb 2018
Edited: Mohamad Moussa on 9 Feb 2018
True i did not notice that oppositely to Aeq and Beq, c and ceq right side in the inequality is a scaler not a vector. Maybe this should do the trick if not ill try making a loop like you stated previously. Thank you
function [c,ceq]=nonling(w,w0)
c= abs(w - w0)*ones(1,n) -0.005;
ceq=[];
end

Sign in to comment.

Accepted Answer

Matt J
Matt J on 9 Feb 2018
Edited: Matt J on 9 Feb 2018
for i=1:T-M
objective = @(w) -(zbarA3(:,i)'*w - rf)/(sqrt(w'*covmatA3{1,i}*w));
w0 = Wi_AQ2;
Aeq = ones(1,n);
beq = 1;
W_Q3(:,i) = fmincon(objective,w0,[],[],Aeq,beq,[],[], @(w) nonling(w,w0) );
end
function [c,ceq]=nonling(w,w0)
c= .005^2-norm(w - w0)^2 ;
ceq=[];
end

More Answers (0)

Categories

Find more on Linear Programming and Mixed-Integer Linear Programming in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!