![](https://csdnimg.cn/release/download_crawler_static/35454142/bg6.jpg)
MATLAB 6.0 数学手册
6
X =
1.0016 0.8335
命令 利用函数 fminunc 求多变量无约束函数最小值
函数 fminunc
格式 x = fminunc(fun,x0) %返回给定初始点 x0 的最小函数值点
x = fminunc(fun,x0,options) % options 为指定优化参数
[x,fval] = fminunc( , ) %fval 最优点 x 处的函数值
[x,fval,exitflag] = fminunc( , ) % exitflag 为终止迭代的条件,与上同。
[x,fval,exitflag,output] = fminunc( , ) %output 为输出优化信息
[x,fval,exitflag,output,grad] = fminunc( , ) % grad 为函数在解 x 处的梯度值
[x,fval,exitflag,output,grad,hessian] = fminunc( , ) %目标函数在解 x 处的海赛
(Hessian)值
注意: 当函数的阶数大于 2 时,使用 fminunc 比 fminsearch 更有效,但当所选函数高度
不连续时,使用 fminsearch 效果较好。
例 5-5 求
2
221
2
1
xxx2x3)x(f
的最小值。
>> fun='3*x(1)^2+2*x(1)*x(2)+x(2)^2';
>> x0=[1 1];
>> [x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0)
结果为:
x =
1.0e-008 *
-0.7591 0.2665
fval =
1.3953e-016
exitflag =
1
output =
iterations: 3
funcCount: 16
stepsize: 1.2353
firstorderopt: 1.6772e-007
algorithm: 'medium-scale: Quasi-Newton line search'
grad =
1.0e-006 *
-0.1677
0.0114
hessian =
6.0000 2.0000
2.0000 2.0000
或用下面方法:
>> fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2')
fun =
Inline function:
fun(x) = 3*x(1)^2+2*x(1)*x(2)+x(2)^2
>> x0=[1 1] ;
>> x=fminunc(fun,x0)
x =