Loop for local function:fmincon

13 Ansichten (letzte 30 Tage)
Dat Tran
Dat Tran am 15 Feb. 2016
Kommentiert: Dat Tran am 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

Akzeptierte Antwort

Matt J
Matt J am 15 Feb. 2016
Bearbeitet: Matt J am 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

Weitere Antworten (0)

Kategorien

Mehr zu Argument Definitions finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by