Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

绘图函数

在执行过程中对优化绘图

您可以在求解器的执行过程中绘制各种进度度量。在 optimoptions 中设置 PlotFcn 名称-值对组,并为求解器指定一个或多个绘图函数,以在每次迭代时调用。传递函数句柄或函数句柄元胞数组。

有多个预定义的绘图函数可供使用。请参阅求解器函数参考页中的 PlotFcn 选项说明。

您也可以使用自定义的绘图函数。使用与输出函数相同的结构体编写一个函数文件。有关此结构体的详细信息,请参阅Output Function and Plot Function Syntax

使用绘图函数

此示例说明如何使用绘图函数查看 fmincon 'interior-point' 算法的进度。此问题取自基于求解器求解有约束非线性问题

编写非线性目标函数和约束函数,包括其梯度。目标函数是 Rosenbrock 函数。

type rosenbrockwithgrad
function [f,g] = rosenbrockwithgrad(x)
% Calculate objective f
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;

if nargout > 1 % gradient required
    g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
        200*(x(2)-x(1)^2)];
end

将此文件另存为 rosenbrockwithgrad.m

约束函数的解满足 norm(x)^2 <= 1

type unitdisk2
function [c,ceq,gc,gceq] = unitdisk2(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [ ];

if nargout > 2
    gc = [2*x(1);2*x(2)];
    gceq = [];
end

将此文件另存为 unitdisk2.m

创建一个包括调用三个绘图函数的 options 结构体:

options = optimoptions(@fmincon,'Algorithm','interior-point',...
 'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,...
 'PlotFcn',{@optimplotx,@optimplotfval,@optimplotfirstorderopt});

创建初始点 x0 = [0,0],并将其余输入设置为空 ([])。

x0 = [0,0];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];

调用 fmincon,包括选项。

fun = @rosenbrockwithgrad;
nonlcon = @unitdisk2;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

Figure Optimization Plot Function contains 3 axes. Axes 1 with title Current Point contains an object of type bar. Axes 2 with title Current Function Value: 0.0456748 contains an object of type line. Axes 3 with title First-order Optimality: 2.16246e-08 contains an object of type line.

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    0.7864    0.6177

相关主题