
http://www.ma-xy.com
第一章 无约束非线性规划 1.8 MATLAB 应用实例 2
转到 step4;否则,令 y
j+1
= y
j
转到 step4。
step4. 如果 j < n 则置 j := j + 1,转到 step2,否则转到 step5。
step5. 如果 f(y
n+1
) < f (x
k
) 则置 x
k+1
= y
k+1
令
y
1
= x
k+1
+ α(x
k+1
− x
k
)
置 k := k +1, j = 1,转到 step2;否则,如果 δ ⩽ ε,则停止迭代,得到 x
k
;否则,置 δ := βδ, y
1
=
x
k
, x
k+1
= x
k
, k := k + 1, j = 1,转 step2。
模式移动方向可以看作是最速下降方向的近似,因此模式搜索方法也可以看作是最速下降法
的一种近似,但这种方法的收敛速度是比较慢的,不适合 n 较大的情况。
关于 Rosenbrock 方法、Powell 方法和单纯形等方法,可以直接参考《最优化理论与算法》
陈宝林。下面,我们给出 MATLAB 的求解多元无约束非线性规划问题的示例。
1.8 MATLAB 应用实例 2
MATLAB 中使用 fminunc 和 fminsearch 函数用来求解多维无约束非线性规划问题,fminunc
是利用导数搜索算法,fminsearch 是不使用导数的搜索算法。
(1)fminunc 在没有梯度矩阵输入时,采用拟牛顿法,在有梯度矩阵输入时,采用信赖域算法。
其调用格式为
[x,fval,exitag,output,grad,hession]=fminunc(fun,x0,options)
其中:fun 为目标函数句柄;x0 为初始点;options 为结构体参数/参数结构体;x 为极小点;fval
为极小值;exitag 为返回求解状态;output 为返回求解信息:迭代次数和所用算法等;gval 为
返回 fun 在极小点 x 处的梯度;hessien 为返回 fun 在极小点 x 处的 Hesse 矩阵。
我们用 fminunc 来求解如下优化问题
min f(x) = 100(x
2
− x
2
1
)
2
+ (1 − x
1
)
2
s.t. g =
− 400(x
2
− x
2
1
)x
1
− 2(1 − x
1
)
200(x
2
− x
2
1
)
> 0
1 f u n c t i o n [ f , g]=Afun(x)
2 f =100*(x (2)−x ( 1 ) ^2)^2+(1−x (1) ) ^2;
3 i f nargout>1
4 g=[−400*(x ( 2 )−x(1) ^2)*x (1)−2*(1−x ( 1 ) ) ;
5 200*(x (2)−x (1) ^2) ] ;
6 end
7 x0 = [ −1 ,2] ;
8 fun = @Afun ;
9 opti o ns = optimoptions (@fminunc , ’ Algorithm ’ , ’ quasi−newton ’ , ’ Sp e c i f yobje c t i v eGri d e n t ’ , true ) ;
10 opti o ns . Display = ’ i t e r ’ ;
11 [ x , fva l , e x i t f l a g , output ] = fminunc ( fun , x0 , opti o ns )
12
http://www.ma-xy.com 27 http://www.ma-xy.com