数学建模常用软件选讲第3章 lingo 的使用LINGO 是Linear Interactive and General Optimizer 的缩写,即“交互式的线性和通用优化求解器”,由美国LINDO 系统公司(Lindo System Inc.)推出的,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。
其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。
3.1 Lingo 程序特点:(1)目标函数必须由“min =”或“max =”开头;(2)每条语句后必须使用分号“;”结束。
(3)变量与其系数间要有乘号。
3.2 线性规划问题例 如何在LINGO 中求解如下的LP 问题:0,6002100350..32min212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码:min=2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
3.3 二次规划问题目标函数是二次函数,约束条件是线性的规划问题例如:⎪⎩⎪⎨⎧<=+>++-+=7.011.19.02.1..4.03min 22y y x y x t s yxy y x fmin=3*x^2+y^2-x*y+0.4*y;1.2*x+0.9*y>1.1;x+y=1;y<0.7;3.4 非线性规划问题《数学模型》(第三版)(姜启源等编)第四章第三节例1中,解法三得到一个非线性规划模型:123max 234z x x x =++123.. 1.535600s t x x x ++≤12328025040060000x x x ++≤11(80)0x x -≥22(80)0x x -≥33(80)0x x -≥123 , , x x x 均为整数输入lingo:MAX= 2 * X1 + 3 * X2 + 4 * X3 ;1.5 * X1 + 3 * X2 + 5 * X3 <= 600 ;280 * X1 + 250 * X2 + 400 * X3 <= 60000 ;X1*( X1-80) >= 0 ;X2*( X2-80) >= 0 ;X3*( X3-80) >= 0 ;@GIN( X1); @GIN( X2); @GIN( X3);注:变量界定函数实现对变量取值范围的附加限制,共4种:@bin(x) 限制x为0或1@bnd(L,x,U) 限制L≤x≤U@free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数@gin(x) 限制x为整数第5章 matlab的使用Matlab是matrix laboratory的缩写,是矩阵实验室的意思,它是一个功能强大的数学工具软件。
Matlab的产生是与数学计算紧密联系在一起的,1980年美国新墨西哥大学计算机科学系主任cleve Moler在给学生讲授线性代数课程时,发现学生利用高级语言编程解决线性代数问题花费很多时间,为了减轻学生编程的负担,用高级语言编写了最早的MATLAB。
Matlab语言是一种用于工程计算的高性能语言,它主要包括两大内容:核心函数和工具箱。
Matlab的典型应用包括以下几个方面:数学计算、算法开发、建模及仿真、数据分析及可视化、科学及工程绘图、应用开发。
5.1 matlab的工作环境1.启动和退出matlab启动matlab程序与启动其它windows程序一样,通常通过单击桌面上的相应图标来执行。
当然,也可以通过“开始”菜单中相应命令启动。
退出matlab时,也可以像退出其它windows程序一样操作,也可以在命令窗口中键入quit或exit来退出。
2.菜单和工具栏Matlab的菜单和工具界面与windows程序的界面类似,用户只要稍加实践就可以掌握其功能和使用方法。
菜单的内容会随着在命令窗口执行不同命令而作出相应改变。
3.命令窗口命令窗口是matlab的主要交互窗口,用于输入命令并显示除图形以外的所有执行结果。
Matlab命令窗口中的“>>”为运算提示符,表示matlab处于准备状态。
当在提示符后输入一段程序或一段运算式后按“回车”键,matlab会给出计算结果,并再次进入准备状态。
单击命令窗口右上角的箭头按钮可以使命令窗口脱离主窗口而成为一个独立的窗口。
常用控制命令及其功能:clc:清除命令窗口中的内容clear:清除工作空间中的变量clf:清除图形窗type :显示指定的M文件的内容exit/quit:结束matlab会话,程序完成,如果没有明确保存,则变量中的数据丢失help :获取在线帮助4.历史命令窗口该窗口主要用于记录所有执行过的命令,在默认设置下,该窗口会保留自安装后所有使用过命令的历史记录,并标明使用时间。
同时,用户可以通过用鼠标双击某一历史命令来重新执行该命令。
与命令窗口类似,该窗口也可以成为一个独立的窗口。
选中该窗口,然后单击鼠标右键,弹出一个菜单,用户可以通过此菜单删除或粘贴历史记录,也可以为选中的表达式或命令创建一个M文件。
5.当前工作目录窗口当前工作目录是指matlab运行文件时的目录。
只有在当前工作目录或搜索路径下的文件、函数可以被运行或调用。
在窗口中可显示或改变当前工作目录,还可以显示当前工作目录下的文件。
6.工作空间窗口在工作空间窗口中将显示目前内存中所有的matlab变量的变量名、数据结构、字节数以及类型等信息。
5.2 基本运算与函数在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之后,并按入Enter键即可。
例如:>> (5*2+1.3-0.8)*10/25ans =4.2000又如:求10的阶乘>> prod(1:10)求15C可用30>> nchoosek(30,15)MATLAB会将运算结果直接存入一变量ans,代表MATLAB运算后的答案(Answer)并显示其数值于屏幕上。
我们也可将上述运算式的结果设定给另一个变量x:x = (5*2+1.3-0.8)*10^2/25x = 42此时MATLAB会直接显示x的值。
由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。
若不想让MATLAB每次都显示运算结果,只需在运算式最后加上分号(;)即可,如下例:y = sin(10)*exp(-0.3*4^2);若要显示变量y的值,直接键入y即可:>>yy =-0.0045在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB常用到的数学函数,函数里的参数必须用圆括号括起来。
1.三角函数MATLAB常用的三角函数名称含义名称含义名称含义Sin(x)正弦asin(x)反正sec(x)正割弦cos(x)余弦acos(x)反余弦csc(x)余割tan(x)正切atan(x)反正切asec(x)反正割cot(x)余切acot(x)反余切acsc(x)反余割pi:常数2.指数和对数函数名称含义名称含义名称含义exp(x)E为底的指数log10(x)10为底的对数pow2(x)2为底的指数log(x)自然对数log2(x)2为底的对数sqrt(x)平方根5.3 数组、矩阵及其运算数组或矩阵是matlab最基础的内容之一,几乎所有的数据都是用数组的形式存储的,这就是matlab又被称为矩阵实验室的原因。
5.3.1 向量的创建5.3.1.1 一维数组(向量)的创建一维数组(向量)创建有直接输入法、步长生成法、定数线性采样法等。
1.直接输入法(1)使用分号,创建一维列向量>> x1=[pi;log10(100);7*2;2^3]x1 =3.14162.000014.00008.0000(2)使用空格或逗号,创建一维行数组>> x2=[pi log10(100) 7*2 2^3]x2 =3.1416 2.0000 14.0000 8.00002.步长生成法采用通用格式a:step:b。
其中a表示数组的第一个元素;step表示数组的间隔,即步长;b表示数组的最后一个元素。
如果省略step,默认值为1。
>> x3=1:2:10x3 =1 3 5 7 93.定数线性采样法在设定了总个数的条件下,均匀采样分布生成一维行向量。
采用通用格式:x=linspace(a,b,n)其中a,b分别是数组的第一个和最后一个元素,n表示采样点数。
例如:>> x=linspace(1,10,5)x =1.0000 3.2500 5.5000 7.7500 10.00005.3.1.2 一维向量元素寻访和赋值1.子向量的寻访>> x=linspace(1,10,5) %定义向量x =1.0000 3.2500 5.5000 7.7500 10.0000>> x(2) %查看向量第二个元素ans =3.2500>> x([1 3 5]) %查看向量第一、三、五个元素组成的子向量ans =1.0000 5.5000 10.0000>> x(3:5) %查看向量第三到第五个元素组成的子向量ans =5.5000 7.7500 10.00002.子向量的赋值>> x(2)=5x =1.0000 5.0000 5.5000 7.7500 10.0000>> x(4) = [] % 删除第四个元素MATLAB亦可取出向量的一个元素或一部份来做运算:y=x(2)*3+x(4) % 取出x的第二个元素3倍后和x的第四个元素来相加,最后赋给变量y。
5.3.4.向量的常用函数min(x): 向量x的元素的最小值max(x): 向量x的元素的最大值mean(x): 向量x的元素的平均值median(x): 向量x的元素的中位数std(x): 向量x的元素的标准差diff(x): 向量x的相邻元素的差sort(x): 对向量x的元素进行排序length(x): 向量x的元素个数sum(x): 向量x 的元素总和prod(x): 向量x 的元素总乘积dot(x, y): 向量x 和y 的内 积5.4 matlab 求解数学问题5.4.1 符号表达式的生成在数学分析中,常常需要做极限、微分、求导数等运算,MATLAB 称这些运算为符号运算。
MATLAB 的符号运算功能是通过调用符号运算工具箱内的工具实现,其内核是借用Maple 数学软件。