实验二 用Mathematica实现单纯形法_mathematica学习实例
实验二 用Mathematica实现单纯形法由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“mathematica学习实例”。
实验二 用Mathematica实现单纯形法
一、实验目的(1)学习并学会使用Mathematica软件。(2)掌握单纯形法的计算机实现的方法。
二、实验原理
算法的具体步骤如下:书30页 Matnmatica中基本语法的补充:
(一)LinnearProgramming[c,m,b],其中c是行向量,b是列向量,m是矩阵,自变量用列向量x表示,在满足mx>=b且x>=0的区域,求cx的最小值点。需要注意的几点是>=号,以及目标函数求最小值。
举例说明:
minfx 32x3x12x1x2x36x12x24x31s.t.3x2x4x20
231x1,x2,x30
分析与求解:
第三个式子可以改造成两个
3x12x24x32和03x12x24x320
x1x2x36x2x24x3121最后得到用于编写程序的表示形式为3x12x24x3203x2x4x20231x1,x2,x30
输入c={1,-2,-3};b={-6,12,20,-20};A={{-1,-1,-1},{1,-2,4},{3,2,4},{-3,-2,-4}};LinearProgramming[c,A,b] 得到最优解x={0,2,4} f=-16
(二)通用表的生成函数Table.表是存储多个数、变量或算式等对象的一种数据结构。一个表用一对花括号表示,它的成员在括号内用逗号隔开,同一个表的成员可以有不同的数据类型,表的成员还可以是一个表(子表)。可以用“t[[n]]”来提取表t中的第n个元素。Mathematica中常用的建表函数是“Table”,其调用格式如下:
Table[f,{i,imin,imax,stepi},{j,jmin,jmax,stepj}] 表的通项为f(f是变量i和j的函数),min,max,step规定了初值、终值、步长,min和step的默认值为1。例如
输入命令Table[n^3,{n,1,20,2}] 则输出 {1,27,125,343,729,1331,2197,3375,4913,6859} 输入命令Table[x*y,{x,3},{y,3}] 则输出 {{1,2,3},{2,4,6},{3,6,9}}
(三)表作为向量和矩阵
一层表在线性代数中表示向量, 二层表表示矩阵.例如,矩阵
24
35
可以用数表{{2,3},{4,5}}表示.输入A={{2,3},{4,5}} 则输出{{2,3},{4,5}} 命令MatrixForm[A]把矩阵A显示成通常的矩阵形式.例如,输入命令: MatrixForm[A] 则输出
2435
注:一般情况下,MatrixForm[A]所代表的矩阵A不能参与运算.(四)求矩阵A的转置的命令:Transpose[A].(五)求方阵A的逆的命令:Inverse[A]
(六)()圆括号表示项的结合顺序,如(x+(y^x+1/(2x)));[]方括号表示函数,如Log[x],BeelJ[x,1];{}大括号表示一个“表”(一组数字、任意表达式、函数等的集合),如{2x,Sin[12 Pi],{1+A,y*x}};[[]]双方括号表示“表”或“表达式”的下标,如a[[2,3]]、{1,2,3}[[1]]=1。
(七)每次运行完成后程序会自动在输入的式子前面加上In[n],n表示输入命令的序列号,在输出的答案上自动加上out[n]。
三、单纯形法解题
maxZ70x1120x2100x3100x4150x58x14x25x33x42x53604x5x27x36x43x520013x110x29x35x49x5300s.t.6x19x25x38x49x51508x4x5x3x2x10012345x1,x2,x3,x4,x50
编写程序如下
A={{8,4,5,3,2,1,0,0,0,0}, {4,5,7,6,3,0,1,0,0,0}, {3,10,9,5,9,0,0,1,0,0}, {6,9,5,8,9,0,0,0,1,0}, {8,4,5,3,2,0,0,0,0,1}};c={70,120,100,100,150,0,0,0,0,0};b={360,200,300,150,100};a2=Length[b];a3=Dimensions[A][[2]];b1=Table[i+a3-a2,{i,a2}];b2=Table[i,{i,a3-a2}];b3=Table[i,{i,a3}];x=Table[0,{i,a3}];b4=Table[0,{i,a2}];c1=c[[b2]]-c[[b1]].Inverse[Transpose[Transpose[A][[b1]]]].Transpose[Transpose[A][[b2]]];
Label[100];For[i=1,i≤Length[b2],i=i+1,{ c1=c[[b2]]-c[[b1]].Inverse[Transpose[Transpose[A][[b1]]]].Transpose[Transpose[A][[b2]]];If[c1[[i]] ≤0,{Goto[endif]},{ For[j=1,j≤a2,j=j+1,{ If[(Inverse[Transpose[Transpose[A][[b1]]]].Transpose[A][[b2[[i]]]])[[j]] ≤0,{b4[[j]]=∞}, {b4[[j]]=((Inverse[Transpose[Transpose[A][[b1]]]].b)[[j]])((Inverse[Transpose[Transpose[A][[b1]]]].Transpose[A][[b2[[i]]]])[[j]])}] }];For[j=1,j≤a2,j=j+1,{ If[b4[[j]]==Min[b4],{m=b2[[i]];b2[[i]]=b1[[j]];b1[[j]]=m;Goto[100]}] }] }];Label[endif] }];x[[b1]]=Inverse[Transpose[Transpose[A][[b1]]]].b;Print[“the optimization is : ”];Print[N[x,4]];Print[“the optimization value is : ”];Print[N[c.x]];
实验练习: 1.设1A111122A131,B03124211,4求3AB2A及ATB.则输出3AB及ATB的运算结果分别为
1024414143310
42
41042124810252.设A0312123341231,求A.653.minf=-0.75x1+150x2-0.02x3+6x4
6x200.x304x90.2x5149x200.x302x30.5x014s.t
x13x1,x2,x,x034
00