我在进行优化时使用fminsearch
。我的任务是将每个优化中的点和相应的功能值保存到工作区。为简单起见,假设我有如下优化的功能:
(4*x(1)^2+2*x(2)^2+x(1)*x(2)+2*x(2))
我知道如何定义OutputFcn
以在每次迭代时保存点,但我不确定如何将每个优化中的相应功能值保存到工作区。我写的代码如下:
function [x,fval,history1,history2]=myproblem(x0)
history1=[];
history2=[];
options=...
optimset('OutputFcn',@CalibratedPointsInEachIteration,'Display','iter');
[x,fval] = fminsearch(@objfun,x0,options);
function stop = CalibratedPointsInEachIteration(x,optimValues,state)
stop = false;
if isequal(state,'iter')
history1 = [history1; x];
history2 = [history2; objfun(x)];
end
end
function z = objfun(x)
z =(4*x(1)^2+2*x(2)^2+x(1)*x(2)+2*x(2));
end
end
但是,似乎上面的代码需要在保存到history2
之前再次重新计算每次迭代时的目标函数。我想知道我是否可以进一步简化代码。
我想保存,而不是简单地在命令窗口上显示每个功能值。