这是您可以尝试实现此目的的一种方法。我正在使用文档中的一个示例(那里也讨论了如何做到这一点)。我只是添加了一个在字段达到阈值时返回的输出函数。我还必须确保该字段不为空,因为它似乎在初始化时。stop = true
optimValues.stepsize
function fmincontest
A = [-1 -2 -2;
1 2 2];
b = [0;72];
x0 = [10;10;10];
options = optimoptions('fmincon','Algorithm','active-set','OutputFcn',@outfun);
[x,fval,exitflag] = fmincon(@myfun,x0,A,b,[],[],[],[],[],options)
function f = myfun(x)
f = -x(1)*x(2)*x(3);
function stop = outfun(x, optimValues, state)
stop = ~isempty(optimValues.stepsize) && optimValues.stepsize < 0.05;
如果您检查 的exit_flag
输出fmincon
,您会看到它-1
现在返回,因为输出函数正在停止优化,再次如文档中所示。如果您已经在使用plot 函数,则可以使用它,因为它们具有相同的格式。
您需要根据您的问题对其进行调整,调整阈值,当然还要确认它是否有效。我无法评论这是一个多么好的想法。您应该确认在所有情况下仍能令人满意地满足您的误差容限。而且我仍然想问为什么你不能指定适当的'TolCon'
和'TolX'
公差来达到你所需要的。