Matlab优化(求极值)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七讲 Matlab 优化(求极值)
理论介绍:算法介绍、软件求解. 一.线性规划问题
1.线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小值的问题,Matlab 中规定线性规划的标准形式为
min s.t.T x
c x
Ax b Aeq x beq lb x ub ≤⎧⎪
⋅=⎨⎪≤≤⎩
其中c 和x 为n 维列向量,A 、Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向量。注意:线性规划问题化为Matlab 规定中的标准形式。
求解线性规划问题的Matlab 函数形式为linprog(c,A,b),它返回向量x 的值,它的具体调用形式为:
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,x0,OPTIONS)
这里fval 返回目标函数的值,LB 、UB 分别是变量x 的下界和上界,x0是x 的初始值,OPTIONS 是控制参数。
例1 求解线性规划问题
1231231
23123123max 23572510s.t.312,,0
z x x x x x x x x x x x x x x x =+-++=⎧⎪-+≥⎪⎨++≤⎪⎪≥⎩ 程序:c=[2;3;5];
>> A=[-2,5,-1;1,3,1];b=[-10;12]; >> Aeq=[1,1,1];beq=[7]; >> LB=[0;0;0];(zeros(3,1))
>> [x,fval]=linprog(c,A,b,Aeq,beq,LB,[]) 练习与思考:求解线性规划问题
12312312123
min 23+428
s.t.3+26,,0z x x x x x x x x x x x =+++≥⎧⎪
≥⎨⎪≥⎩ 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ].
2.可以转化为线性规划的问题 规划问题12min||+||+
+||s.t.,n x x x Ax b ≤其中1
=[],T n x x x ,A b 为相应维数的矩
阵和向量。注意到对任意的i x 存在,>0i i u v 满足=-,||=+i i i i i i x u v x u v ,事实上只要取
+||||-=
,=22
i i i i i i x x x x
u v 就可以满足上面的条件。
这样,记1
1
=[],=[],T T n n u u u v v v 从而可以把问题变成
=1
min (+)
(-)s.t.,0
n
i i i u v A u v b u v ≤⎧⎨
≥⎩∑
例2 求解规划问题min{max||}i
i
i x y ε,其中=-.i i i x y ε
对于这个问题,如果取0=lim||i
i y x ε,这样,上面的问题就变换成
01100min s.t.-,,-n n x x y x x y x ≤≤
这是我们通常的线性规划问题。
练习与思考:规划问题
1234123412341234min ||2||+3||+4||--+=0s.t.-+-3=11--2+3=-2
z x x x x x x x x x x x x x x x x =+⎧
⎪⎪
⎨⎪⎪⎩
二.非线性一元函数的最小值
对于求一元函数的最小值问题,Matlab 提供了一个命令函数fminbnd ,fminbnd 函数的调用格式为:X=fminbnd(fun,x1,x2)和[X,fval]=fminbnd(fun,x1,x2)
其中fun 为目标函数,x1,x2为变量的边界约束,即12[,]x x x ∈,X 为返回的满足fun 取得最小值的x 的值,fval 为目标函数值。
例3 计算函数321
()x x x x f x e e
-+-=+的最小值和f(x)取最小值时x 的值,[5,5].x ∈-
程序:>> clear
>> fun='(x^3+x^2-1)/(exp(x)+exp(-x))'; >> ezplot(fun,[-5,5]) >> [X,fval]=fminbnd(fun,-5,5)
练习与思考:如何求一元函数的最大值 三.无约束非线性多元变量函数的优化
对于无约束非线性多元变量函数的优化问题,主要采用命令函数fminsearch 和fminunc ,其中fminsearch 比较适合处理低阶多间断点的函数,fminunc 则对高阶连续函数有效。
1.命令函数fminsearch
函数fminsearch 求解目标函数fun 的最小值和fun 取最小值时变量x 的值,调用格式为:X=fminsearch(fun,X0)和[X,fval]=fminsearch(fun,X0)
其中X0为声明变量的初始值,X 为返回的x 的值,fval 为返回的fun 的值。 例4 求12[,],x x 使目标函数12()sin cos f x x x =+取得最小值。 程序:>> clear >> X0=[0,0];
>> [X,fval]=fminsearch('sin(x(1))+cos(x(2))',X0)
说明:声明变量初始值对返回的x 的值的影响。X0=[100,100] 2.命令函数fminunc
函数fminunc 通过计算寻找多变量目标函数fun 的最小值,调用格式为:X=fminunc(fun,X0)和[X,fval]=fminunc(fun,X0)
其中X0为优化的初始值,X 为返回的x 的值,fval 为返回的fun 的值。
例5 对函数122
12
122()(42421)x f x e x x x x x =++++进行最小值优化。 程序:>> clear
>> fun='exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)';