近期为了加深对数学建模的理解,同时为了备战数学建模竞赛,从数学模型开始到MATLAB在数学建模中的应用,充分了解数学建模竞赛。规划类的问题是比较常见的数学建模问题,离散系统的优化问题一般都可以通过规划模型来求解,在数学建模比赛中,利用MATLAB提供的强大的规划模型求解命令可以快速的得到结果,可大量节省时间,本篇将介绍线性规划问题的MATLAB求解方式。
1、数学模型
在讲述什么是数学模型前,需要先了解两个概念,那就是原型和模型。原型(Prototype)和模型(Model)是一对对偶体。原型是指人们在现实世界里关心、研究或者从事生产、管理的实际对象。在科技领域通常使用系统(System)、过程(Process)等词汇,如机械系统、电力系统、生态系统、生命系统,又如钢铁冶炼过程、导弹飞行过程、化学反应过程、生产销售过程、计划决策过程等。一般所指的现实对象、研究对象、实际问题均指原型。模型是指为了某个特定目的将原型的某一部分信息简缩、提炼而构造的原型替代物。特别强调构造模型的目的性,模型不是原型原封不动的复制品,原型有多方面多层次的特征,而模型只要求反映与某种目的有关的那些方面和层次。模型的基本特征是由构造模型的目的决定的。模型的有关参数和关系式是较容易改变, 这样是有助于问题的分析和研究。利用模型可以进行一定预测、灵敏度分析等
模型有各种形式,按照模型替代原型的方式来分类,模型可以分为物质模型(形象模型)和理想模型(抽象模型)。前者包括直观模型、物理模型等,后者包括思维模型、符号模型、数学模型等。
数学模型是由数字、字母或其他数学符号组成的,描述现实对象数量规律的数学公式、图形或算法。其实数学模型在生活和学习中是随处可见的,例如我们了解过的航行问题:
甲乙两地相距750km,船从甲到乙顺水航行需30h,从乙到甲逆水航行需50h,问船速、水速各多少?
用x,y分别代表船速和水速,可以列出方程
实际上,上面这组方程就是上述航行问题的数学模型。列出方程后,原问题已转化为一个纯粹的数学问题。方程的解x=20km/h,y=5km/h;最终给出了航行问题的答案;最后还要用实际现象来验证上述结果。
当然,实际数学建模比赛中的数学模型通常要复杂很多,但是建立数学模型的基本内容已经包含在解这个代数应用题的过程中了。建立数学模型的过程通常简称为数学建模或建模。
2、数学建模的一般步骤
建模要经过哪些步骤并没有一定的模式,通常与问题性质、建模目的等有关,下面介绍的是机理分析方法建模的一般过程,如图1所示。
图1 数学建模步骤
应该说明的是,并不是所有问题的建模都要经过上图所示的这些步骤,有时各步骤之间的界限并不是那么分明,建模时要采用灵活的表述形式,不要拘泥于形式上的按部就班。
3、数学建模的全过程
最后给出数学建模的全过程,可以将数学建模的过程分为表述、求解、解释、验证几个阶段,并且通过这些阶段完成从现实对象到数学模型,再从数学模型回到现实对象的循环,如图2所示。
图2 数学建模的全过程
图2揭示了现实对象和数学模型的关系。一方面,数学模型是将现象加以归纳、抽象的产物,源于现实,又高于现实;另一方面,只有当数学建模的结果经受住现实对象的考验时,才可以用来指导实际。
4、MATLAB求解线性规划问题
规划问题包括线性规划、整数规划和非线性规划三个部分。人们在生产实践中经常会遇到如何利用现有资源安排生产,以取得最大经济效益的问题,此类问题就形成了运筹学的一个重要分支——数学规划,而线性规划则是数学规划的一个重要分支。
在运筹学中,线性规划问题的数学模型的标准形式为:
规定各约束条件的右端项bi>0,否则等式两端乘以“-1”。满足约束条件的解称为线性规划问题的可行解,满足目标函数的可行解称为最优解。
为了避免形式多样性带来的不便,在MATLAB中规定线性规划的标准形式为:
MATLAB求解中基本函数形式为linprog(c,A,b),返回值是向量x的值。在MATLAB指令窗口运行doc linprog可看到其他调用形式,如:
[x,fval] =linprog(f,A,b,Aeq,beq,lb,ub,options)
其中,fval为返回目标函数的值;Aeq、beq对应等式约束Ax=b;lb、ub分别是变量x的上限和下限;X0是x的初始值。
下面给出几个例子,求解线性规划问题:
MATLAB程序如下:
c=[2;3;1];
a=[1,4,2;3,2,0];
b=[8;6];
[x,y]=linprog(c,-a,-b,[],[],zeros(3,1))
求出结果为:
Optimal solution found.
x =
2.0000
0
3.0000
y =
7
再一个,求解下列线性规划问题:
编写程序:
c=[2;3;-5];
a=[-2,5,-1];b=-10;
aeq=[1,1,1];
beq=7;
x=linprog(-c,a,b,aeq,beq,zeros(3,1))%是求最大值而不是最小值,标准型为求最小值,注意这里是“-c”而不是“c”,
value=c'*x
得到结果:
Optimal solution found.
x =
6.4286
0.5714
0
value =
14.5714