How to pass more parameters than the existing ones to output function of fmincon?

조회 수: 6(최근 30일)
Viswanath Hariharan
Viswanath Hariharan 2018년 7월 16일
댓글: Matt J 2019년 4월 1일
The above link is to the documentation of Output Functions, a function that is evaluated at each individual iteration of fmincon. The parameters passed to it by default are x, optimValues and state.
1. How to pass extra parameters to this function?
2. Is there any way to compute a partial stepsize? Say numel(x) = 60 and I want to calculate stepsize norm(x(1:10)-xk(1:10)), is it possible? Because optimValues.stepsize calculates norm(x-xk) which is taking into account the entire vector.

채택된 답변

Alan Weiss
Alan Weiss 2018년 7월 17일
To pass external parameters, use the documented ways. You can also use persistent variables within an output function.
Alan Weiss
MATLAB mathematical toolbox documentation
  댓글 수: 1
Viswanath Hariharan
Viswanath Hariharan 2018년 7월 17일
I'm thinking I'll persistent variables to compute partial step size within outputfunction. But I'm using this within parfor. Will this still work? If not, how do I do it?

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Matt J
Matt J 2018년 7월 17일
편집: Matt J 2018년 7월 17일
Is there any way to compute a partial stepsize?
One way is to modify the example at the link you posted:
case 'iter'
% Concatenate current point and objective function
% value with history. x must be a row vector.
history.x = [history.x; x(1:10)]; %only save 10 elements
history.x(1:end-2,:)=[]; %only save the last 2 iterations
if size(history,1)>1
partial_stepsize=norm( history.x(2,:) - history.x(1,:) );
end
  댓글 수: 6
Matt J
Matt J 2019년 4월 1일
Making it global removes this restriction.
That sounds doubtful to me. There shouldn't be a difference in memory limitations between global variables and other variable types.

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by