Clear Filters
Clear Filters

Loop for local function:fmincon

1 view (last 30 days)
Dat Tran
Dat Tran on 15 Feb 2016
Commented: Dat Tran on 15 Feb 2016
Dear all,
I want to make a loop for the code below: every step, I want to update objective function in such a way that pr=p.
I would appreciate any thoughts and helps!
Dat
function [p,fval] = MC_NT(p0,opts)
if nargin < 2
opts = optimoptions('fmincon','Algorithm','interior-point');
end
[p,fval] = fmincon(@Obj,p0,[],[],Aeq1,beq1,[],[],[],opts);
function f= Obj(p)
f = 0;
pr=0.25*ones(1,16);
for i = 1:16
f = f + p(i)*log(p(i))-p(i)*log(pr(i));
end

Accepted Answer

Matt J
Matt J on 15 Feb 2016
Edited: Matt J on 15 Feb 2016
Here is the way I would code it. However, because your objective function is just the KL-divergence, it is trivial to see that the minimum occurs at p=pr. In particular, your loop should produce the same result at every iteration.
function [p,fval] = MC_NT(p0,opts,N)
if nargin < 2
opts = optimoptions('fmincon','Algorithm','interior-point');
end
M=length(p0);
p0=p0(:);
pr=0.25*ones(M,1);
p=nan(M,N);
fval=nan(1,N);
for i=1:N
fun=@(p) sum(p.*log(p./pr));
[p(:,i),fval(i)] = fmincon(fun,p0(:),[],[],Aeq1,beq1,[],[],[],opts);
pr=p(:,i);
end

More Answers (0)

Community Treasure Hunt

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

Start Hunting!