数学应用软件作业5 用MATLAB求解非线性规划问题
非线性规划的MATLAB解法及其应用
题 目 非线性规划的MATLAB 解法及其应用(一) 问题描述非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。
非线性规划是20世纪50年代才开始形成的一门新兴学科。
70年代又得到进一步的发展。
非线性规划在工程、管理、经济、科研、军事等方面都有广泛的应用,为最优设计提供了有力的工具。
在经营管理、工程设计、科学研究、军事指挥等方面普遍地存在着最优化问题。
例如:如何在现有人力、物力、财力条件下合理安排产品生产,以取得最高的利润;如何设计某种产品,在满足规格、性能要求的前提下,达到最低的成本;如何确定一个自动控制的某些参数,使系统的工作状态最佳;如何分配一个动力系统中各电站的负荷,在保证一定指标要求的前提下,使总耗费最小;如何安排库存储量,既能保证供应,又使储存 费用最低;如何组织货源,既能满足顾客需要,又使资金周转最快等。
对于静态的最优化 问题,当目标函数或约束条件出现未知量的非线性函数,且不便于线性化,或勉强线性化后会招致较大误差时,就可应用非线性规划的方法去处理。
具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。
非线性规划研究一个n 元实函数在一组等式或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是未知量的非线性函数。
目标函数和约束条件都是线性函数的情形则属于线性规划。
本实验就是用matlab 软件来解决非线性规划问题。
(二) 基本要求掌握非线性规划的MATLAB 解法,并且解决相关的实际问题。
题一 :对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?题二: 某厂生产一种产品有甲、乙两个牌号,讨论在产销平衡的情况下如何确定各自的产量,使总利润最大. 所谓产销平衡指工厂的产量等于市场上的销量.符号说明:z(x 1,x 2)表示总利润;p 1,q 1,x 1分别表示甲的价格、成本、销量; p 2,q 2,x 2分别表示乙的价格、成本、销量; a ij ,b i ,λi ,c i (i ,j =1,2)是待定系数.题三:设有400万元资金, 要求4年内使用完, 若在一年内使用资金x 万元, 则可得效益x 万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大.(三) 数据结构题一:设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-;建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5题二:总利润为: z(x1,x2)=(p1-q1)x1+(p2-q2)x2若根据大量的统计数据,求出系数b1=100,a11=1,a12=0.1,b2=280,a21=0.2,a22=2,r1=30,λ1=0.015,c1=20, r2=100,λ2=0.02,c2=30,则问题转化为无约束优化问题:求甲,乙两个牌号的产量x1,x2,使总利润z 最大.为简化模型,先忽略成本,并令a12=0,a21=0,问题转化为求:z1 = ( b1 - a11x1 ) x1 + ( b2 - a22x2 ) x2的极值. 显然其解为x1 = b1/2a11 = 50, x2 = b2/2a22 = 70,我们把它作为原问题的初始值.题三:设变量i x 表示第i 年所使用的资金数,则有 4,3,2,1,04.5321.121.1331.14841.121.14401.1400..max 43213212114321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i(四) 源程序题一:编写M 文件fun0.m:function f=fun0(x)f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5);xmax=xfmax=-fval题二:建立M-文件fun.m:function f = fun(x)y1=((100-x(1)- 0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1); y2=((280-0.2*x(1)- 2*x(2))-(100*exp(-0.02*x(2))+30))*x(2); f=-y1-y2;输入命令:x0=[50,70];x=fminunc(‘fun ’,x0),z=fun(x)题三:建立M 文件 fun44.m,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));建立M 文件mycon1.m 定义非线性约束:function [g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0主程序youh4.m 为:x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[];beq=[];[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,'mycon1')(五) 运行结果题一:运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.题二:运行结果为:x=23.9025, 62.4977, z=6.4135e+003即甲的产量为23.9025,乙的产量为62.4977,最大利润为6413.5.题三:运行结果为:x1=86.2;x2=104.2;x3=126.2;x4=152.8;z=43.1(六) 相关知识用Matlab 解无约束优化问题一元函数无约束优化问题21),(m in x x x x f ≤≤常用格式如下:(1)x= fminbnd (fun,x1,x2)(2)x= fminbnd (fun,x1,x2 ,options)(3)[x ,fval]= fminbnd (...)(4)[x ,fval ,exitflag]= fminbnd (...)(5)[x ,fval ,exitflag ,output]= fminbnd (...)其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。
用Matlab解非线性规划问题[1]
用Matlab 解无约束优化问题一元函数无约束优化问题21),(min x x x x f ≤≤常用格式如下:(1)x= fminbnd (fun,x1,x2)(2)x= fminbnd (fun,x1,x2 ,options)(3)[x ,fval]= fminbnd (...)(4)[x ,fval ,exitflag]= fminbnd (...)(5)[x ,fval ,exitflag ,output]= fminbnd (...)其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。
函数fminbnd 的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。
例1 求x e f x sin 2-=在0<x<8中的最小值与最大值主程序为wliti1.m:f='2*exp(-x).*sin(x)';fplot(f,[0,8]); %作图语句[xmin,ymin]=fminbnd (f, 0,8)f1='-2*exp(-x).*sin(x)';[xmax,ymax]=fminbnd (f1, 0,8)运行结果:xmin = 3.9270 ymin = -0.0279xmax = 0.7854 ymax = 0.6448例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?先编写M 文件fun0.m 如下:function f=fun0(x)f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5);xmax=xfmax=-fval运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.2、多元函数无约束优化问题标准型为:min F(X)命令格式为:(1)x= fminunc (fun,X0 );或x=fminsearch (fun,X0 )(2)x= fminunc (fun,X0 ,options );或x=fminsearch (fun,X0 ,options )解 设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5(3)[x,fval]= fminunc(...);或[x,fval]= fminsearch(...)(4)[x,fval,exitflag]= fminunc(...);或[x,fval,exitflag]= fminsearch(5)[x,fval,exitflag,output]= fminunc(...);或[x,fval,exitflag,output]= fminsearch(...)说明:•fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明:[1] fminunc为无约束优化提供了大型优化和中型优化算法。
Matlab求解非线性规划,fmincon函数的用法总结
Matlab求解⾮线性规划,fmincon函数的⽤法总结Matlab求解⾮线性规划,fmincon函数的⽤法总结1.简介在matlab中,fmincon函数可以求解带约束的⾮线性多变量函数(Constrained nonlinear multivariable function)的最⼩值,即可以⽤来求解⾮线性规划问题matlab中,⾮线性规划模型的写法如下min\ f(x) \\ s.t. \begin{equation} \left\{ \begin{array}{**lr**} A \cdot x \leq b \\ Aeq\cdot x =beq\\ c(x)\leq0 \\ ceq(x)=0 \\ lb \leq x \leq ub\end{array} \right. \end{equation} \\ ~\\ f(x)是标量函数,x,b,beq是向量,A,Aeq是矩阵 \\ c(x)和ceq(x)是向量函数2.基本语法[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x的返回值是决策向量x的取值,fval的返回值是⽬标函数f(x)的取值fun是⽤M⽂件定义的函数f(x),代表了(⾮)线性⽬标函数x0是x的初始值A,b,Aeq,beq定义了线性约束 ,如果没有线性约束,则A=[],b=[],Aeq=[],beq=[]lb和ub是变量x的下界和上界,如果下界和上界没有约束,则lb=[],ub=[],也可以写成lb的各分量都为 -inf,ub的各分量都为infnonlcon是⽤M⽂件定义的⾮线性向量函数约束options定义了优化参数,不填写表⽰使⽤Matlab默认的参数设置3.实例⽰例,求下列⾮线性规划:min\ f(x)=x_1^2+x_2^2+x_3^2+8\\ s.t. \begin{equation} \left\{ \begin{array}{**lr**} x_1^2-x_2+x_3^2\geq0\\ x_1+x_2^2+x_3^2\leq20\\ -x_1-x_2^2+2=0\\ x_2+2x_3^2=3\\ x_1,x_2,x_3\geq0 \end{array} \right. \end{equation}(1)编写M函数fun1.m 定义⽬标函数:function f=fun1(x);f=x(1).^2+x(2).^2+x(3).^2+8;(2)编写M函数fun2.m定义⾮线性约束条件:function [g,h]=fun2(x);g=[-x(1).^2+x(2)-x(3).^2x(1)+x(2).^2+x(3).^3-20];h=[-x(1)-x(2).^2+2x(2)+2*x(3).^2-3];(3)编写主程序函数[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')所得结果为:x_1=0.5522,x_2=1.2033,x_3=0.9478\\ 最⼩值y=10.651Processing math: 0%。
Matlab非线性规划
Matlab⾮线性规划⾮线性规划在matlab⾮线性规划数学模型可以写成⼀下形式:minf(x)\\ s.t.\begin{cases} Ax \le B \\ Aeq·x = Beq\\ C(x) \le 0\\ Ceq(x) = 0 \end{cases}f(x)为⽬标函数,A,B,Aeq,Beq为线性约束对应的矩阵和向量,C(x),Ceq(x)为⾮线性约束。
Matlab求解命令为:X = fmincon(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS) fun为⽬标函数,x0为初值,A,B,Aeq,Beq为线性约束对应的矩阵和向量,LB,UB分别为x的下限和上限,NONLCON为⾮线性约束(需要写⾃定义函数),OPTIONS为优化参数。
【例】求下列⾮线性规划问题minf(x) = x^2_1+x^2_2+8\\ s.t.\begin{cases} x_1^2-x_2 \ge 0\\ -x_1-x_2^2+2=0\\ x_1,x_2 \ge 0 \end{cases}编写函数⽂件:fun1.m,fun2.mfunction f = fun1(x)f = x(1)^2 + x(2)^2 + 8;endfunction [g,h] = fun2(x)g = -x(1)^2 + x(2);%g代表不等式约束,即代表约束条件-x(1)^2 + x(2) <= 0。
matlab默认g<=0,所以题⽬中的条件被改成了相反数。
%如果有多个不等式约束,写成g(1) = 关于x的函数; g(2) = 关于x的函数;······h = -x(1) - x(2)^2 + 2;%h代表等式约束,即代表约束条件 -x(1) - x(2)^2 + 2 = 0。
%如果有多个等式约束,写成h(1) = 关于x的函数; h(2) = 关于x的函数;······end注:在写fun2时,可以把线性和⾮线性约束的等式和不等式约束都按照这种格式写到这个函数⾥⾯,这样的话fun2就包含了所有约束条件,在后⾯运⾏fmincon()时不需要再写A,B,Aeq,Beq,直接⽤[]略过。
(完整word版)数学应用软件作业5用MATLAB求解非线性规划问题
佛山科学技术学院上 机 报 告课程名称 数学应用软件上机项目 用MATLAB 求解非线性规划问题专业班级 姓 名 学 号一。
上机目的1.了解非线性规划的基本理论知识。
2.对比Matlab 求解线性规划,学习用Matlab 求解非线性规划的问题。
二。
上机内容1、用quadprog 求解二次规划问题min f (x):2、求解优化问题:min 321)(x x x x f -=S 。
T.72220321≤++≤x x x注:取初值为(10,10,10)。
3、求表面积为常数150 m 2的体积最大的长方体体积及各边长。
注:取初值为(4,5,6)。
三.上机方法与步骤1、可用两种方法解题:方法一:Matlab程序:H=[1 -1;—1 2];c=[—2;—6];A=[1 1;-1 2;2 1];b=[2;2;3];Aeq=[];beq=[];vlb=[0;0];vub=[];[x,z]=quadprog(H,c,A,b,Aeq,beq,vlb,vub)方法二:Matlab程序如下:先建立fun.m文件,程序为:function f=fun(x);f=1/2*x(1)^2+x(2)^2—x(1)*x(2)—2^x(1)-6*x(2);再建立chushi。
m文件,程序为:x0=[1;1];A=[1 1;—1 2;2 1];b=[2;2;3];Aeq=[];beq=[];vlb=[0;0];vub=[];[x,fval]=fmincon(’fun',x0,A,b,Aeq,beq,vlb,vub)2、Matlab程序:先建立fun1.m文件,程序为:function f=fun1(x);f=-x(1)*x(2)*x(3);再建立chushi1.m文件,程序为:x0=[10;10;10];A=[1 2 2;—1 —2 -2];b=[72;0];Aeq=[];beq=[];vlb=[];vub=[];[x,fval]=fmincon(’fun1',x0,A,b,Aeq,beq,vlb,vub)3、假设长方形的长、宽、高分别为(1)x 、(2)x 、(3)x ,则长方形的体积为f ,则有max (1)(2)(3)2(1)(2)2(1)(3)3(2)(3)150.()0(1,2,3)f x x x x x x x x x s t x i i =++=⎧⎨≥=⎩四.上机结果1、结果:(1)方法一结果:x =0。
MATLAB非线性规划问题
一.非线性规划课题实例1 表面积为36平方米的最大长方体体积。
建立数学模型:设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.问应如何分配资金,才能使期望的收益最大,同时使风险损失为最小。
建立数学模型:max f=20x1+16x2-λ[2x12+x22+(x1+x2)2]s.t x1+x2≤5000x 1≥0,x2≥0目标函数中的λ≥0是权重系数。
由以上实例去掉实际背景,其目标函数与约束条件至少有一处是非线性的,称其为非线性问题。
非线性规划问题可分为无约束问题和有约束问题。
实例1为无约束问题,实例2为有约束问题。
二.无约束非线性规划问题:求解无约束最优化问题的方法主要有两类:直接搜索法(Search method)和梯度法(Gradient method),单变量用fminbnd,fminsearch,fminunc;多变量用fminsearch,fminnuc 1.fminunc函数调用格式:x=fminunc(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为给定的搜索的初始点。
非线性规划matlab求解
在matlab 中非线性规划的数学模型可写成一下形式:minf(X)s.t. Ax ≪B Aeq .x =Beq C (x )≪0Ceq x =0其中,f(x)是标量函数;A,B,Aeq,Beq 是相应维数的矩阵和向量;C(x),Ceq(x)是非线性向量函数。
Matlab 中的命令是X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)它的返回值是向量x 。
其中,FUN 是用M 文件定义的函数f(x)。
X0是X 的初始值。
A ,B ,Aeq ,Beq 定义了线性约束AX ≪B ,Aeq*X=Beq ,如果没有线性约束,则A=[],B=[],Aeq=[],Beq=[]。
LB 和UB 是变量x 的下界和上界,如果上界和下界没有约束,则LB=[],UB=[];如果X 无下界,则LB=-inf;如果X 无上界,则UB=inf 。
NONLCON 是用M 文件定义的非线性向量函数C(x),Ceq(x)。
OPTIONS 定义了优化函数,可以使用MATLAB 默认的参数设置。
例求解下列非线性规划问题:max z= X 1+ X 2+ X 3+ X 4 s.t.x 1≪4001.1x 1+x 2≪4401.21x 1+1.1x 2+x 3≪4841.331x 1+1.21x 2+1.1x 3+x 4≪532.4X i≫0,i =1,2,3,4(1)编写M 文件,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)) );(2)编写M 文件,定义约束条件function[g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0(3)编写主程序x0=[1;1;1;1];lb=[0;0;0;0];ub=[];A=[];b=[];Aeq=[];beq=[];[x,fval] = fmincon('fun44',x0,A,b,Aeq,beq,lb,ub,'mycon1')输出结果x =86.1883104.2879 126.1883 152.6879fval =-43.0860。
用MATLAB解二次型规划和一般非线性规划问题
实验报告11实验名称:用MATLAB 解二次型规划和一般非线性规划问题实验目的:学会如何运用MATLAB 解二次型规划和一般非线性规划问题; 实验内容:书P21111、试求解下面的二次型规划问题。
2122212136442min x x x x x x --+-⎪⎩⎪⎨⎧≥≤+≤+0943..2,12121x x x x x t s x解:>> f=[-6,-3];H=[4,-4;-4,8];>> A=[1,1;4,1];B=[3,9];Aeq=[];Beq=[];xm=zeros(2,1);>> [x,f_opt]=quadprog(H,f,A,B,Aeq,Beq,xm,[],[])Warning: Your Hessian is not symmetric. Resetting H=(H+H')/2.> In quadprog at 232Warning: Large-scale method does not currently solve this problem formulation, using medium-scale method instead.> In quadprog at 263Optimization terminated.x =1.95001.0500f_opt =-11.025012、试求解下面的非线性规划问题。
()12424min 22122211++++x x x x x e x⎪⎪⎩⎪⎪⎨⎧≤≤--≥≥++-≤+10,10105.10..2121212121x x x x x x x x x x t s x 解:function [c,ceq]=cdd01(x)c=[x(1)+x(2);x(1)*x(2)-x(1)-x(2)+1.5;-x(1)*x(2)-10];ceq=[];>> y=@(x)exp(x(1))*(4*x(1)*x(1)+2*x(2)*x(2)+4*x(1)*x(2)+2*x(2)+1);x0=[1;1];xm=[-10;-10];xM=[10;10];A=[];B=[];Aeq=[];Beq=[];[x,f_opt,c,d]=fmincon(y,x0,A,B,Aeq,Beq,xm,xM,@cdd01)Warning: Trust-region-reflective method does not currently solve this type of problem, using active-set (line search) instead.> In fmincon at 422Maximum number of function evaluations exceeded;increase OPTIONS.MaxFunEvals.x =3.1740-7.9967f_opt =1.2351e+003c =d =iterations: 54funcCount: 201lssteplength: 1stepsize: 5.6428algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'firstorderopt: 390.0759constrviolation: 1.7857e-008message: [1x79 char]15、试求解下面的0-1线性规划问题解>> f=[5,7,10,3,1]>> A=[-1,1,-5,-1,4;2,-6,3,2,-2;0,-2,2,-1,-1] >> B=[-2;0;1]>> x_m=[0,0,0,0,0]>> x_M=[1,1,1,1,1]>> x=bintprog(f,A,B,[],[],x_m,x_M)x =11。
MATLAB非线性规划问题
MATLAB⾮线性规划问题⼀.⾮线性规划课题实例1 表⾯积为36平⽅⽶的最⼤长⽅体体积。
建⽴数学模型:设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.问应如何分配资⾦,才能使期望的收益最⼤,同时使风险损失为最⼩。
建⽴数学模型:max f=20x1+16x2-λ[2x12+x22+(x1+x2)2]s.t x1+x2≤5000x 1≥0,x2≥0⽬标函数中的λ≥0是权重系数。
由以上实例去掉实际背景,其⽬标函数与约束条件⾄少有⼀处是⾮线性的,称其为⾮线性问题。
⾮线性规划问题可分为⽆约束问题和有约束问题。
实例1为⽆约束问题,实例2为有约束问题。
⼆.⽆约束⾮线性规划问题:求解⽆约束最优化问题的⽅法主要有两类:直接搜索法(Search method)和梯度法(Gradient method),单变量⽤fminbnd,fminsearch,fminunc;多变量⽤fminsearch,fminnuc 1.fminunc函数调⽤格式:x=fminunc(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为给定的搜索的初始点。
数学实验报告——利用MALTAB进行非线性规划
㈡简要分析
本题是一道比较简单的非线性规划求解问题, 不涉及数学建模以及应用分析 等问题,只需要将所给问题转化为 MATLAB 代码进行处理。这里可以采用不同的 算法,并对比进行分析。
㈢方法与公式
1、求解规划方法
求解本题可以考虑几种规划。 对于第(1)组约束来说,仅含有上下界约束,可以考虑使用 SQP 方法或者置 信域方法;但是考虑到本题规模较小,这里仅采用 SQP 方法。(事实是,设定使 用大规模算法后,MATLAB 仍旧自动使用 SQP 完成计算,因而无法进行对比); 对第(2)组约束来说,仅可以使用 SQP 方法; 对第(3)组约束来说,可以使用 SQP 方法,也可以利用后两个等式把规划化 化简后再使用 SQP 方法。
5、脚本 2
5
v1 = -10*ones(1,4); v2 = 10*ones(1,4); x00 = [-3,-1,-3,-1]; x01 = -[-3,-1,-3,-1]; x02 = [10,-20,5,3]; x03 = [-5,10,15,-20]; opt = optimset('largeScale','off','MaxFunEvals',4000,'MaxIter', 1000,'Algorithm','active-set'); [x(1,:),f1,exitflag1,out(1)] = fmincon('fun',x00,[],[],[],[],v1,v2,@edge3,opt); [x(2,1:2),f2,exitflag2,out(2)] = fmincon('fun1',x00(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); [x(3,:),f3,exitflag3,out(3)] = fmincon('fun',x01,[],[],[],[],v1,v2,@edge3,opt); [x(4,1:2),f4,exitflag4,out(4)] = fmincon('fun1',x01(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); [x(5,:),f5,exitflag5,out(5)] = fmincon('fun',x02,[],[],[],[],v1,v2,@edge3,opt); [x(6,1:2),f6,exitflag6,out(6)] = fmincon('fun1',x02(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); [x(7,:),f7,exitflag7,out(7)] = fmincon('fun',x03,[],[],[],[],v1,v2,@edge3,opt); [x(8,1:2),f8,exitflag8,out(8)] = fmincon('fun1',x03(2:3),[],[],[],[],v1(1:2),v2(1:2),@edge 31,opt); answer = zeros(1:8); for i = 1:8 out(i) end for j = 1:4 x(2*j,3)=x(2*j,1); x(2*j,1) = -x(2*j,2);
MATLAB非线性规划
MATLAB⾮线性规划MATLAB求解⾮线性规划可以使⽤ fmincon 函数,其数学模型可以写成如下形式:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中,fun是⽬标函数,x0是初始值,A,b 规定线性不等式约束条件,Aeq,beq 规定线性等式约束条件,lb 规定可⾏解的数值下限,ub规定可⾏解的数值上限。
nonlcon是包含⾮线性约束条件(C(x),Ceq(x))的函数。
使⽤options所指定的优化选项执⾏最⼩化。
例如,使⽤MATLAB计算如下⾮线性规划。
x0 = [0.5,0];A = [1,-2];b = 1;Aeq = [2,1];beq = 1;x = fmincon(fun,x0,A,b,Aeq,beq)带有边界约束的,例如:fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));lb = [0,0];ub = [1,2];% 没有线性约束,因此将这些参数设置为 []。
A = [];b = [];Aeq = [];beq = [];% 尝试使⽤⼀个位于区域中部的初始点。
x0 = (lb + ub)/2;x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)带有⾮线性约束的,例如:%% 主函数options=optimset('largescale','off');x = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)%% ⽬标函数function f=fun(x)f=sum(x.^2)+8;end%% ⾮线性约束条件function [c,ceq]=nonlcon(x)c=[-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20]; %⾮线性不等式约束ceq=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %⾮线性等式约束end特别注意:⽬标函数为最⼩化函数,fun是⼀个函数,fun接受向量或数组 x,并返回实数标量 f,即在 x 处计算的⽬标函数值。
用Matlab求解非线性规划
用Matlab 求解非线性规划1.无约束优化问题)(min x f n Rx ∈,其中向量x 的n 个分量i x 都是决策变量,称)(x f 目标函数。
用Matlab 求解:先建立函数文件mbhs.m ,内容是)(x f 的表达式;再回到Matlab 命令区输入决策变量初值数据x0,再命令[x,fmin]=fminunc(@mbhs,x0) 如:)32(m in 22212x x R x +∈的最优解是.)0,0(T x = 用Matlab 计算,函数文件为 function f=mbhs(x)f=2*x(1)^2+3*x(2)^2;再输入初值 x0=[1;1]; 并执行上述命令,结果输出为 x =? fmin =? 略。
2.约束优化问题.),,...,2,1(,0)(),,...,2,1(,0)(..)(min U x L m i x h p i x g t s x f i i Rx n ≤≤===≤∈其中:向量x 的n 个分量i x 都是决策变量,称)(x f 目标函数、)(x g i 等式约束函数、)(x h i 不等式约束函数、L 下界、U 上界。
用Matlab 求解:先把模型写成适用于Matlab 的标准形式.,0)(,0)(,,..)(min U x L x h x g beq x Aeq b Ax t s x f n Rx ≤≤=≤=≤∈ 约束条件中:把线性的式子提炼出来得前两个式子;后三个式子都是列向量。
(如:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡===⨯⨯)()()([],[],,,11262x g x g x g beq Aeq b A p )再建立两个函数文件:目标函数mbhs.m ;约束函数yshs.m再回到Matlab 命令区,输入各项数据及决策变量初值数据x0,执行命令[x,fmin]=fmincon(@mbhs,x0,A,b,Aeq,beq,L,U,@yshs)例:单位球1222≤++z y x 内,曲面xy y x z 1.05.022--+=的上方,平面008.0=-++z y x 之上(不是上面),满足上述三个条件的区域记为D ,求函数)1cos()sin(2-+-+-z e z y x e xy xyz 在D 上的最大值、最大值点。
Matlab无约束非线性规划的求解
Matlab ⽆约束⾮线性规划的求解标准形式:min f (X )没有任何的约束条件,在matlab 中,fminsearch() 和 fminunc() 可⽤于求解⾮线性规划。
fminsearch 是⽤单纯形法寻优fminunc 为⽆约束优化提供了⼤型优化和中型优化算法MATLAB 求解⽆约束⾮线性规划的步骤①⾸先建⽴⼀个函数M ⽂件, 如 fun.m ,⽤以储存⽬标函数。
②其次,调⽤格式[x.favl,exitflag,output]=fminunc('fun',X0,options) 或[x.favl,exitflag,output]=fminsearch('fun',X0,options)等号左侧:x:返回最优解。
favl :返回⽬标函数在最优解 x 点的函数值。
exitflag :返回算法的终⽌标志。
output :返回优化算法信息的⼀个数据结构。
等号右侧:第⼀个参数是调⽤⽬标函数储存的⽂件第⼆个参数是决策变量的初始值第三个输⼊参数 options 为设置优化选项参数例:给定初始值为[-1,1],求minf (x )=(4x 21+2x 22+4x 1x 2+2x 2+1)ex 11.编写函数fun.m:function f=fun(x)f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);end 2.输⼊如下:x0=[-1,1];[x,f]=fminunc('fun',x0)3.运⾏结果显⽰:x =0.5000 -1.0000f =3.6609e-16min f (X )min f (x )=(4+2+4+2+1)x 21x 22x 1x 2x 2ex 1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
佛山科学技术学院
上 机 报 告
课程名称 数学应用软件
上机项目 用MATLAB 求解非线性规划问题 专业班级 姓 名 学 号
一. 上机目的
1.了解非线性规划的基本理论知识。
2.对比Matlab 求解线性规划,学习用Matlab 求解非线性规划的问题。
二. 上机内容
1、用quadprog 求解二次规划问题min f(x):
2、求解优化问题:
min 321)(x x x x f -= S.T.
72220321≤++≤x x x
注:取初值为(10,10,10)。
3、求表面积为常数150 m 2的体积最大的长方体体积及各边长。
注:取初值为(4,5,6)。
三. 上机方法与步骤 1、可用两种方法解题: 方法一:Matlab 程序:
H=[1 -1;-1 2]; c=[-2;-6];
A=[1 1;-1 2;2 1];
b=[2;2;3];
Aeq=[];
beq=[];
vlb=[0;0];
vub=[];
[x,z]=quadprog(H,c,A,b,Aeq,beq,vlb,vub)
方法二:Matlab程序如下:
先建立fun.m文件,程序为:
function f=fun(x);
f=1/2*x(1)^2+x(2)^2-x(1)*x(2)-2^x(1)-6*x(2);
再建立chushi.m文件,程序为:
x0=[1;1];
A=[1 1;-1 2;2 1];
b=[2;2;3];
Aeq=[];
beq=[];
vlb=[0;0];
vub=[];
[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,vlb,vub)
2、Matlab程序:
先建立fun1.m文件,程序为:function f=fun1(x);
f=-x(1)*x(2)*x(3);
再建立chushi1.m文件,程序为:x0=[10;10;10];
A=[1 2 2;-1 -2 -2];
b=[72;0];
Aeq=[];
beq=[];
vlb=[];
vub=[];
[x,fval]=fmincon('fun1',x0,A,b,Aeq,beq,vlb,vub)
四.上机结果
1、结果:
(1)方法一结果:x =
0.6667
1.3333
z =
-8.2222
(2)方法二结果:x =
0.6667
1.3333
fval =
-8.4763
2、结果:
x =
24.0000
12.0000
12.0000
fval =
-3.4560e+003
3、结果:x =
5.0000
5.0000
5.0000 fval =
-125.0000 f =
125.0000。