values of equation in last iteration in fmincon
Show older comments
I optimize a problem maximizing EU1 with the fmincon solver..the code below is the objective function i insert in fmincon instruction ...
can i somehow get the value of xw1 equation in last itteration??
function EU1 = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X)
EU1=0;
xw1=0;
for i=1:1:length(rc)
if (LLand(rc(i)))
xw1=xw1+LG_obs(rc(i))*X(i);
end
end
xw1=LW_ini+xw1;
% xw1
% class(xw1)
for i=1:1:length(rc)
for j=1:1:length(rc)
EU1=EU1+LVmat(i,j)*X(i)*X(j);
end
end
EU1=xw1-0.5*EU1/xw1;
%EU1=-EU1;
xw1;
Accepted Answer
More Answers (1)
The computation of xw1 is a trivial one-liner. Just compute it separately from the optimal X given to you by fmincon,
xw1=sum( LG_obs(rc).*LLand(rc).*Xoptimal) + LW_ini
3 Comments
Naturally also, i would encourage you to simplify your objective function in a similar way to make it more efficient
function EU1 = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X)
xw1=sum( LG_obs(rc).*LLand(rc).*X) + LW_ini;
EU1=xw1-0.5*(X(:).'*LVmat*X(:))/xw1;
end
A. Sawas
on 15 Apr 2019
The only drawback I guess of computing the value of xw1 outside the objective fuction will be the need to edit two locations if the equation has changed.
Then create a dedicated function to compute xw1 and call that function in the objective as well as everywhere else xw1 is needed,
function xw1=getxw1(LW_ini,LG_obs,LVmat,LLand,rc,X);
xw1=sum( LG_obs(rc).*LLand(rc).*X) + LW_ini;
end
function EU1 = eq_obj1(LW_ini,LG_obs,LVmat,LLand,rc,X)
xw1=getxw1(LW_ini,LG_obs,LVmat,LLand,rc,X);
EU1=xw1-0.5*(X(:).'*LVmat*X(:))/xw1;
end
Categories
Find more on Problem-Based Optimization Setup in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!