e
x
i
t
f
l
a
g
<
0
,表明目标函数不收敛
output
包含优化结果信息的输出结构:Iterations:迭代次数;Algorithm:所采用的算法;FuncCount:函数评价次数
所有优化函数
[x,fval]
=fminbnd(...);
[x,fval,exitflag]
=fminbnd(...);
[x,fval,exitflag,output]
=fminbnd(...);
函数
fminbnd
的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。
2. 多元函数无约束优化问题
标准型为:
m
i
n
F
(
X
)
命令格式为:
x=fminunc(fun,X0);
x=fminunc(fun,X0,options);
[x,fval]=fminunc(...);
[x,fval,exitflag]=fminunc(...);
[x,fval,exitflag,output]=fminunc(...);
fminsearch
是用单纯性法寻优
fminunc
的算法:
fminunc
为无约束优化提供了大型优化和中型优化算法。
-
由
options
中的参数
LargeScale
控制:
LargeScale='on'
使用大型算法,
LargeScale='off'
使用小型算法
fminunc
为中型优化算法的搜素方向提供了4种算法,由
options
中的参数
HessUpdate
控制
-
HessUpdate='bfgs'
(默认值),拟牛顿法的
BFGS
公式
-
HessUpdate='dfp'
,拟牛顿法的
DFP
公式
-
HessUpdate='steepdesc'
,最速下降法
fminunc
为中型优化算法的步长一维搜索提供了两种算法,由
options
中参数
LineSearchType
控制:
-
LineSearchType='quadcubic'
(缺省值),混合的二次和三次多项式插值
-
LineSearchType='cubicpoly'
,三次多项式插值
使用
fminunc
和
fminsearch
可能会得到局部最优解
用MATLAB解非线性规划
标准型为:
min
F
(
X
)
s
.
t
.
A
X
≤
b
A
e
q
⋅
X
=
b
e
q
G
(
X
)
≤
0
C
e
q
(
X
)
=
0
V
L
B
≤
X
≤
V
U
B
其中
X
为
n
维变元向量,
G(X)
与
Ceq(X)
均为非线性函数组成的向量,其他变量的含义和线性规划、二次规划相同。MATLAB求解:
首先建立M文件
fun.m
,定义目标函数
F(X)
function f=fun(X);
f=F(X);
若约束条件中有非线性约束:
G
(
X
)
≤
0
或
C
e
q
(
X
)
=
0
,则建立M文件
nonlcon.m
定义函数
G(X)
与
Ceq(X)
:
function [G,Ceq]=nonlcon(X);
G=...
Ceq=...
建立主程序,非线性规划求解的函数是
fmincon
,命令的基本格式如下:
x=fmincom('fun',X0,A,b);
x=fmincon('fun',X0,A,b,Aeq,beq);
x=fmincon('fun',X0,A,b,Aeq,beq,VLB,VUB);
x=fmincon('fun',X0,A,b,Aeq,beq,VLB,VUB,'nonlcon');
x=fmincon('fun',X0,A,b,Aeq,beq,VLB,VUB,'nonlcon',options);
[x,fval]=fmincon(...);
[x,fval,exitflag]=fmincon(...);
[x,fval,exitflag,output]=fmincon(...);
fmincon
函数提供了大型优化算法和中型优化算法。默认时,若在
fun
函数中提供了梯度(
options
参数的
GradObj
设置为
on
),并且只有上下界存在或只有等式约束,
fmincon
函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。
fmincon
函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用
BFGS
法更新拉格朗日
Hessian
矩阵。
fmincon
函数可能会给出局部最优解,这与初值
X0
的选取有关。