1、MATLAB非线性规划问题封面作者:PanHongliang仅供个人学习一非线性规划课题实例1 表面积为36平方M的最大长方体体积.建立数学模型:设x、y、z分别为长方体的三个棱长,f为长方体体积.max f = x y (36-2 x y)/2 (x+y)实例2 投资决策问题某公司准备用5000万元用于A、B两个工程的投资,设x1、x2分别表示配给工程A、B的投资.预计工程A、B的年收益分别为20%和16%.同时,投资后总的风险损失将随着总投资和单位投资的增加而增加,已知总的风险损失为2x12+x22+(x1+x2)2.问应如何分配资金,才能使期望的收益最大,同时使风险损失为最小.建立数学模
2、型: max f=20x1+16x2-2x12+x22+(x1+x2)2 s.t x1+x25000x 10,x20目标函数中的0是权重系数.由以上实例去掉实际背景,其目标函数与约束条件至少有一处是非线性的,称其为非线性问题.非线性规划问题可分为无约束问题和有约束问题.实例1为无约束问题,实例2为有约束问题.二无约束非线性规划问题:求解无约束最优化问题的方法主要有两类:直接搜索法(Search method)和梯度法(Gradient method),单变量用fminbnd,fminsearch,fminunc。多变量用fminsearch,fminnuc1fminunc函数调用格式: x=f
3、minunc(fun,x0) x=fminunc(fun,x0,options) x=fminunc(fun,x0,options,P1,P2) x,fval=fminunc() x,fval, exitflag=fminunc() x,fval, exitflag,output=fminunc()x,fval, exitflag,output,grad=fminunc()x,fval, exitflag,output,grad,hessian=fminunc()说明:fun为需最小化的目标函数,x0为给定的搜索的初始点.options指定优化参数.返回的x为最优解向量;fval为x处的目标函
4、数值;exitflag描述函数的输出条件;output返回优化信息;grad返回目标函数在x处的梯度.Hessian返回在x处目标函数的Hessian矩阵信息.例1 :求程序:通过绘图确定一个初始点:x,y=meshgrid(-10:.5:10)。z= 8*x-4*y +x.2+3*y.2。surf(x,y,z)选初始点:x0=(0,0)x0=0,0。x,fval,exitflag=fminunc(8*x(1)-4*x(2) +x(1)2+3*x(2)2,x0)结果:x = -4.0000 0.6667fval = -17.3333exitflag = 1 例2:程序:取初始点:x0=(1,1
5、)x0=1,1。x,fval,exitflag=fminunc(4*x(1)2+5*x(1)*x(2)+2*x(2)2,x0)结果: x = 1.0e-007 * -0.1721 0.1896fval = 2.7239e-016exitflag = 12 minsearch函数调用格式: x=fminsearch(fun,x0) x=fminsearch(fun,x0,options) x=fminsearch(fun,x0,options,P1,P2) x,fval=fminsearch() x,fval, exitflag=fminsearch() x,fval, exitflag,out
6、put=fminsearch()x,fval, exitflag,output,grad=fminsearch()x,fval, exitflag,output,grad,hessian=fminsearch()说明:参数及返回变量同上一函数.对求解二次以上的问题,fminsearch函数比fminunc函数有效.3. fminbnd函数 调用格式: x,fval=fminbnd(fun,x1,x2,options)x=fminbnd()例5 求min e-x+x2,搜索区间为(0,1)x,fval=fminbnd(exp(-x)+x.2,0,1)x = 0.3517fval = 0.8272
7、4多元非线性最小二乘问题:非线线性最小二乘问题的数学模型为:其中L为常数.调用格式: x=lsqnonlin(fun,x0) x=lsqnonlin(fun,x0,lb,ub)x=lsqnonlin(fun,x0,options) x=lsqnonlin(fun,x0,options,P1,P2) x,resnorm=lsqnonlin() x,resnorm, residual,exitflag=lsqnonlin() x,resnorm, residual , exitflag,output=lsqnonlin()x,resnorm, residual,exitflag, output,l
8、ambda=lsqnonlin()x,resnorm, r esidual,exitflag, output,lambda,jacobian=lsqnonlin()说明:x返回解向量;resnorm返回x处残差的平方范数值:sum(fun(x).2);residual返回x处的残差值fun(x);lambda返回包含x处拉格朗日乘子的结构参数;jacobian返回解x处的fun函数的雅可比矩阵.lsqnonlin默认时选择大型优化算法.Lsqnonlin通过将options.LargeScale设置为off来作中型优化算法.其采用一维搜索法.例4求 minf=4(x2-x1)2+(x2-4)2
9、,选择初始点x0(1,1)程序:f =4*(x(2)-x(1)2+(x(2)-4)2x,reshorm=lsqnonlin(f,1,1)结果: x = 3.9896 3.9912reshorm =5.0037e-009结果:x = 0.2578 0.2578resnorm = 124.3622二有约束非线性规划问题:数学模型: min F(x)s.t Gi (x)0 i=1,m Gj (x) =0 j=m+1,n xlxxu其中:F(x)为多元实值函数,G(x)为向量值函数,在有约束非线性规划问题中,通常要将该问题转换为更简单的子问题,这些子问题可以求并作为迭代过程的基础.其基于K-T方程解的
10、方法.它的K-T方程可表达为:方程第一行描述了目标函数和约束条件在解处梯度的取消.由于梯度取消,需要用拉格朗日乘子i来平衡目标函数与约束梯度间大小的差异.调用格式: x=fmincon(f,x0,A,b) x=fmincon(f,x0,A,b,Aeq,beq) x=fmincon(f,x0,A,b,Aeq,beq,lb,ub) x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon) x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) x,fval=fmincon() x, fval, exitflag=fmincon(
11、) x, fval, exitflag, output=fmincon() x, fval, exitflag, output, lambda=fmincon()说明:x=fmincon(f,x0,A,b)返回值x为最优解向量.其中:x0为初始点.A,b为不等式约束的系数矩阵和右端列向量. x=fmincon(f,x0,A,b,Aeq,beq) 作有等式约束的问题.若没有不等式约束,则令A= 、b= .x=fmincon(f, x0,A,b,Aeq,beq,lb,ub, nonlcon ,options) 中lb ,ub为变量 x的下界和上界;nonlcon=fun,由M文件fun.m给定非线
12、性不等式约束c (x)0和等式约束g(x)=0;options为指定优化参数进行最小化.Matlab中非线性规划的数学模型写成以下形式,其中是标量函数,是相应维数的矩阵和向量,是非线性向量函数.Matlab中的命令是X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)它的返回值是向量,其中FUN是用M文件定义的函数;X0是的初始值;A,B,Aeq,Beq定义了线性约束,如果没有等式约束,则A=,B=,Aeq=,Beq=;LB和UB是变量的下界和上界,如果上界和下界没有约束,则LB=,UB=,如果无下界,则LB=-inf,如果无上界,则UB=in
13、f;NONLCON是用M文件定义的非线性向量函数;OPTIONS定义了优化参数,可以使用Matlab缺省的参数设置. 例2 求下列非线性规划问题()编写M文件fun1.mfunction f=fun1(x)。f=x(1)2+x(2)2+8。和M文件fun2.mfunction g,h=fun2(x)。g=-x(1)2+x(2)。h=-x(1)-x(2)2+2。 %等式约束()在Matlab的命令窗口依次输入options=optimset。x,y=fmincon(fun1,rand(2,1),zeros(2,1), .fun2, options)就可以求得当时,最小值.例6:求解:min 10
14、0(x2-x12 )2+(1-x1)2 s.t x12。x22程序:首先建立ff6.m文件:function f=ff6(x)f=100*(x(2)-x(2)2)2+(1-x(1)2。然后在工作空间键入程序:x0=1.1,1.1。 A=1 0。0 1。b=2。2。x,fval=fmincon(ff6,x0,A,b)结果: x = 1.0000 1.0000fval = 3.1936e-011例8求解:minf=ex1(6x12+3x22+2x1x2+4x2+1) s.t x1x2-x1-x2+10 -2x1x2-50程序:首先建立目标函数文件ff8.m文件:function f=ff8(x)
15、f=exp(x(1)*(6*x(1)2+3*x(2)2+2*x(1)*x(2)+4*x(2)+1)。再建立非线性的约束条件文件:ff8g.mfunction c,ceq=ff8g(x)c(1)=x(1)*x(2)-x(1)-x(2)+1; c(2)=-2*x(1)*x(2)-5;ceq=。然后在工作空间键入程序:x0=1,1。 nonlcon=ff8gx,fval =fmincon(ff8,x0,nonlcon)结果: x = -2.5000 1.0000fval = 3.3244exitflag = 1 当有等式约束时,要放在矩阵g的位置,如上例中加等式约束: x(1)+2*x(1)=0程序
16、:首先建立 fun1.m文件:functionc,g=ff8g1(x) c(1)=x(1)*x(2)-x(1)-x(2)+1; c(2)=-2*x(1)*x(2)-5; g(1)=x(1)+2*x(2)。然后在工作空间键入程序:x0=-1,1。 nonlcon=ff8g1。x,fval,exitflag =fmincon(ff8,x0, nonlcon)结果: x = -2.2361 1.1180fval = 3.6576exitflag = 1版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理。版权为潘宏亮个人所有This article includes some parts,
17、 including text, pictures, and design. Copyright is Pan Hongliangs personal ownership.用户可将本文的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人的书面许可,并支付报酬。Users may use the contents or services of this article for personal study, research or
18、appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its relevant obligees. In addition, when any content or service of t
19、his article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目的的合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任。Reproduction or quotation of the content of this article must be reasonable and good-faith citation for the use of news or informative public free information. It shall not misinterpret or modify the original intention of the content of this article, and shall bear legal liability such as copyright.