资源描述:
《运用matlab进行线性规划求解(实例)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、8.2线性规划 线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。8.2.1基本数学原理线性规划问题的标准形式是:或写成矩阵形式为:线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量非负。不符合这几个条件的线性模型可以转化成标准形式。MATLAB采用投影法求解线性规划问题,该方法是单纯形法的变种。8.2.2有关函数介绍在MATLAB工具箱中,可用linprog函数求解线性规划问题。linprog函数的调用格式如下:●x=linprog(f,A,b):求解问题minf'
2、*x,约束条件为A*x<=b。●x=linprog(f,A,b,Aeq,beq):求解上面的问题,但增加等式约束,即Aeq*x=beq。若没有不等式约束,则令A=[],b=[]。●x=linprog(f,A,b,Aeq,beq,lb,ub):定义设计x的下界lb和上界ub,使得x始终在该范围内。若没有等式约束,令Aeq=[],beq=[]。●x=linprog(f,A,b,Aeq,beq,lb,ub,x0):设置初值为x0。该选项只适用于中型问题,默认时大型算法将忽略初值。●x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用
3、options指定的优化参数进行最小化。●[x,fval]=linprog(…):返回解x处的目标函数值fval。●[x,lambda,exitflag]=linprog(…):返回exitflag值,描述函数计算的退出条件。●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output。●[x,fval,exitflag,output,lambda]=linprog(…):将解x处的拉格朗日乘子返回到lambda参数中。调用格式中,lambda参数为解x处包含拉格朗日乘子的结构。它有以下一些字段:lowe
4、r—下界lbupper—上界ubineqlin—线性不等式eqlin—线性等式exitflag参数表示算法终止的原因,下面列出不同值对应的退出原因:1函数在解x处有解0迭代次数超过options.MaxIter-2没有找到可行点-3问题无解-4执行算法时遇到NaN-5原问题和对偶问题都不可行-7搜索方向太小,不能继续前进。8.2.3应用实例例8-2 某河流边有两个化工厂,流经第一个化工厂的河水流量是每天500万立方米,在两个工厂之间有一条流量为200万立方米的支流(如图8-1所示)。第一个化工厂每天排放工业污水2万立方米,第二个化工厂每天排放工业污水1.4万立
5、方米,从第一个化工厂排出的污水流到第二个化工厂之前,有20%可自然净化。根据环保要求,河流中工业污水的含量应不大于0.2%,因此两个化工厂都必须各自处理净化一部分污水,第一个化工厂处理污水的成本是0.1元∕立方米,第二个化工厂处理污水的成本是0.08元∕立方米。问在满足环保要求的条件下,各化工厂每天应处理多少污水,才能使两厂总的处理污水费用最少?第一化工厂 第二化工厂图8-1 解:设,分别表示第一个化工厂和第二个化工厂每天处理的污水量(万立方米∕天)。 则目标函数:(元∕天)约束条件1:,即;约束条件2:,即;约束条件3:。因此,该问
6、题的线性规划模型归结为: 求解程序:%线性规划问题f=[1000800];A=[-10;-0.8-1;10;01];b=[-1;-1.6;2;1.4];lb=zeros(2,1);[x,fval,exitflag]=linprog(f,A,b,[],[],lb)运行结果:x=1.00000.8000fval=1.6400e+003exitflag=1由上可知,第一个化工厂每天处理的污水量为1万立方米∕天,第二个化工厂每天处理的污水量为0.8万立方米∕天,才能使两厂总的处理污水费用最少。