您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Matlab优化(求极值)
1第七讲Matlab优化(求极值)理论介绍:算法介绍、软件求解.一.线性规划问题1.线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小值的问题,Matlab中规定线性规划的标准形式为mins.t.TxcxAxbAeqxbeqlbxub其中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求解线性规划问题123123123123123max23572510s.t.312,,0zxxxxxxxxxxxxxxx程序: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,[])练习与思考:求解线性规划问题212312312123min23+428s.t.3+26,,0zxxxxxxxxxxx注意:若没有不等式:bAX存在,则令A=[],b=[].若没有等式约束,则令Aeq=[],beq=[].2.可以转化为线性规划的问题规划问题12min||+||++||s.t.,nxxxAxb其中1=[],Tnxxx,Ab为相应维数的矩阵和向量。注意到对任意的ix存在,0iiuv满足=-,||=+iiiiiixuvxuv,事实上只要取+||||-=,=22iiiiiixxxxuv就可以满足上面的条件。这样,记11=[],=[],TTnnuuuvvv从而可以把问题变成=1min(+)(-)s.t.,0niiiuvAuvbuv例2求解规划问题min{max||}iiixy,其中=-.iiixy对于这个问题,如果取0=lim||iiyx,这样,上面的问题就变换成01100mins.t.-,,-nnxxyxxyx这是我们通常的线性规划问题。练习与思考:规划问题1234123412341234min||2||+3||+4||--+=0s.t.-+-3=11--2+3=-2zxxxxxxxxxxxxxxxx二.非线性一元函数的最小值对于求一元函数的最小值问题,Matlab提供了一个命令函数fminbnd,fminbnd函数的调用格式为:X=fminbnd(fun,x1,x2)和[X,fval]=fminbnd(fun,x1,x2)3其中fun为目标函数,x1,x2为变量的边界约束,即12[,]xxx,X为返回的满足fun取得最小值的x的值,fval为目标函数值。例3计算函数321()xxxxfxee的最小值和f(x)取最小值时x的值,[5,5].x程序:clearfun='(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[,],xx使目标函数12()sincosfxxx取得最小值。程序:clearX0=[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对函数12212122()(42421)xfxexxxxx进行最小值优化。4程序:clearfun='exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)';x0=[0,0];[x,fval]=fminunc(fun,x0)注意:fminunc函数只能处理实函数的优化问题,目标函数最好是连续函数,给出的解可能只是局部解。四.有约束非线性多元变量函数的优化1.Matlab命令函数fmincon可以处理有约束的非线性多元变量的优化问题,有约束多元变量优化问题的数学模型为:求一组变量xi,满足在给定的约束条件下,使目标函数f(xi)取得最小值。目标函数一般为非线性函数,约束条件有线性不等式约束、线性等式约束、变量边界约束和非线性约束。线性约束:iAxB,等式约束:iAeqxBeq,边界约束:iiiLbxUb,fmincon函数的调用格式为:[x,fval]=fmincon(fun,x0,A,B,Aeq,Beq,Lb,Ub,nonlcon,options)其中,nonlcon表示非线性约束条件,options为设置的控制优化过程的优化参数向量(可以用optionset打开)。非线性约束的表示形式为:把不等式和等式变换成小于号(或等号)左边是函数表达式右边为0的形式,然后以函数表达式作为元素分别组成不等式约束矩阵和等式约束矩阵。当约束条件比较复杂时,常常先建立约束条件的M文件。例6求12[,],xx使目标函数12212122()(42421)xfxexxxxx取得最小值,约束条件为:121212121.5*0;*10,0,0.xxxxxxxx程序:(1)建立非线性约束的M文件function[c,ceq]=confun(x)c=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];ceq=[];end(2)建立优化命令clearx0=[-1,1];5fun='exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)';lb=[0,0];ub=[];options=[];[x,fval,exitflag,output]=fmincon(fun,x0,[],[],[],[],lb,ub,'confun',options)参数exitflag有3种情况,exitflag0表示优化结果收敛于解,exitflag0表示优化结果不收敛于解,exitflag=0表示优化超过了声明的代入函数值的次数;output包含优化过程的信息。2.已知梯度条件的优化(例6的第二种解法)对于复杂的非线性优化问题,利用已知的梯度条件将会取得更加令人满意的结果。例7利用梯度条件对12212122min()(42421)xfxexxxxx进行优化,约束条件为:1212121.5*0;*10.xxxxxx分析:(1)先写出目标函数和约束条件的梯度函数表达式:目标函数:12212122(42421)xobjfunexxxxx目标函数的梯度:11122121221221[(42421)(84);(442)]xxxGexxxxxexxexx约束函数:121212[1.5*;*10]confunxxxxxx梯度221111xxCGxx程序:(1)编写目标函数及其梯度M文件function[f,G]=objfungrad(x)f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);t=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);G=[t+exp(x(1))*(8*x(1)+4*x(2)),exp(x(1))*(4*x(1)+4*x(2)+2)];end(2)编写约束函数及其梯度M文件function[c,ceq,dc,dceq]=confungrad(x)6c=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];ceq=[];dc=[x(2)-1,-x(2);x(1)-1,-x(1)];dceq=[];end(3)编写优化命令clearx0=[-1,1];options=[];[x,fval,exitflag,output]=fmincon('objfungrad',x0,[],[],[],[],[],[],'confungrad',options)
本文标题:Matlab优化(求极值)
链接地址:https://www.777doc.com/doc-4078663 .html