Main Content

退出标志和退出消息

退出标志

当优化求解器完成任务时,它会设置退出标志。退出标志是一个整数,是表示求解器停止迭代的原因的代码。一般来说:

  • 退出标志为正数表示结果成功。

  • 退出标志为负数表示结果不成功。

  • 退出标志为零表示求解器因超过迭代限制或函数计算次数达到限制而停止(请参阅迭代和函数计算次数,另请参阅容差和停止条件)。

下表链接到每个求解器的退出标志说明。

按求解器列出的退出标志

coneprog exitflag

fgoalattain exitflag

fminbnd exitflag

fmincon exitflag

fminimax exitflag

fminsearch exitflag

fminunc exitflag

fseminf exitflag

fsolve exitflag

fzero exitflag

intlinprog exitflag

linprog exitflag

lsqcurvefit exitflag

lsqlin exitflag

lsqnonlin exitflag

lsqnonneg exitflag

quadprog exitflag

 

注意

退出标志并不能完全准确衡量解的质量。还有容差设置等许多其他因素会对解是否令人满意产生影响。求解器返回的结果是否令人满意需要由用户自己来确定。有时,退出标志为负数并不表示解“糟糕”。同样,有时退出标志为正数也不表示解“良好”。

通过带 exitflag 语法调用求解器,您可以获得退出标志。此语法取决于求解器。有关详细信息,请参阅求解器函数参考页。例如,对于 fsolve,用于获取退出标志的调用语法是

[x,fval,exitflag] = fsolve(...)

以下示例就使用了此语法。假设您要求解非线性方程组

2x1x2=ex1x1+2x2=ex2.

将这些方程写成匿名函数,该匿名函数在解处给出零向量:

myfcn = @(x)[2*x(1) - x(2) - exp(-x(1));
      -x(1) + 2*x(2) - exp(-x(2))];

在初始点 [-5 -5] 处使用 exitflag 语法调用 fsolve

[xfinal fval exitflag] = fsolve(myfcn,[-5 -5])
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

xfinal =
    0.5671    0.5671

fval =
  1.0e-06 *
   -0.4059
   -0.4059

exitflag =
     1

fsolve exitflag 的表中,您会发现退出标志值 1 表示“函数收敛于解 x”。也就是说,fsolve 报告 myfcnx = [0.5671 0.5671] 处接近于零。

退出消息

每个求解器在其迭代结束时都会向 MATLAB® 命令行窗口发出一条消息。此消息简要解释求解器停止的原因。该消息可能会提供比退出标志更多的详细信息。

本文档中的许多示例都显示了退出消息,例如在命令行中定义和求解问题。上一节退出标志中的示例显示以下退出消息:

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

此消息提供的信息比退出标志提供的信息更详细。该消息表明了梯度的作用。该消息还说明了函数容差可控制函数值向量接近 0 的程度达到多少时,fsolve 才认为求解已完成。

增强版退出消息

有些求解器的退出消息中包含指向详细信息的链接。有两种类型的链接:

  • 单词或短语链接。如果您点击此类链接,将打开一个窗口,其中显示对应项的定义或给出其他信息。新窗口可能会包含指向帮助浏览器文档的链接,以提供更详细的信息。

  • 最后一行显示的链接提供 <stopping criteria details>。如果点击此链接,MATLAB 将显示求解器停止的详细原因。

fminunc 求解器提供了增强版的退出消息:

opts = optimoptions(@fminunc,'Algorithm','quasi-newton'); % 'trust-region' needs gradient
[xfinal fval exitflag] = fminunc(@sin,0,opts)

这将生成以下结果:

每个带下划线的单词或短语都包含可提供详细信息的链接。

  • <stopping criteria details> 链接会在 MATLAB 命令行中显示以下内容:

    Optimization completed: The first-order optimality measure, 0.000000e+00, is less 
    than options.OptimalityTolerance = 1.000000e-06.
  • 其他链接会弹出一个包含相关项定义的帮助窗口。例如,点击 Local minimum found 链接将打开以下窗口:

    点击该窗口中的 first-order optimality measure 展开链接将显示 fminunc 的一阶最优性测度的定义:

    展开链接是在同一窗口中获取详细信息的一种方式。再次点击 first-order optimality measure 展开链接将折叠定义。

  • 其他链接可打开帮助查看器。

退出消息选项

您可以通过设置 Display 选项来控制退出消息和迭代输出的外观。有关详细信息,请参阅迭代输出。下表显示 Display 选项的各种设置的效果。

显示选项的值输出到命令行窗口
退出消息迭代输出
'none' 或同义词 'off'
'final'(大多数求解器的默认值)默认值
'final-detailed'详细消息
'iter'默认值
'iter-detailed'详细消息
'notify'仅当 exitflag ≤ 0 时为默认值
'notify-detailed'仅当 exitflag ≤ 0 时为详细信息

例如,

opts = optimoptions(@fminunc,'Display','iter-detailed','Algorithm','quasi-newton');
[xfinal fval] = fminunc(@cos,1,opts);

生成以下显示:

相关主题