使用 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. <stopping criteria details>
查看结果,包括 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