使用 fminunc
进行无约束最小化
此示例说明如何使用 fminunc
求解非线性最小化问题
要求解此二维问题,请编写一个返回 的函数。然后,从初始点 x0 = [-1,1]
开始,调用无约束最小化例程 fminunc
。
位于此示例末尾的辅助函数 objfun
会计算 。
要求得 的最小值,请设置初始点,然后调用 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