Main Content

使用 fminunc 进行无约束最小化

此示例说明如何使用 fminunc 求解非线性最小化问题

minxf(x)=ex1(4x12+2x22+4x1x2+2x2+1).

要求解此二维问题,请编写一个返回 f(x) 的函数。然后,从初始点 x0 = [-1,1] 开始,调用无约束最小化例程 fminunc

位于此示例末尾的辅助函数 objfun 会计算 f(x)

要求得 f(x) 的最小值,请设置初始点,然后调用 fminunc

x0 = [-1,1];
[x,fval,exitflag,output] = fminunc(@objfun,x0);
Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.

查看结果,包括 output 结构体中的一阶最优性度量。

disp(x)
    0.5000   -1.0000
disp(fval)
   3.6609e-15
disp(exitflag)
     1
disp(output.firstorderopt)
   1.2284e-07

exitflag 输出指示算法是否收敛。exitflag = 1 表示 fminunc 求得一个局部最小值。

output 结构体提供有关优化的更多详细信息。对于 fminunc,结构体包括:

  • output.iterations,迭代次数

  • output.funcCount,函数计算的次数

  • output.stepsize,最终步长大小

  • output.firstorderopt,一阶最优性度量(在本示例的无约束情形下是解处梯度的无穷范数)

  • output.algorithm,所用算法的类型

  • output.message,算法停止的原因

辅助函数

以下代码创建 objfun 辅助函数。

function f = objfun(x)
f = exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);
end

相关示例

详细信息