您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验二-用Mathematica实现单纯形法
实验二用Mathematica实现单纯形法一、实验目的(1)学习并学会使用Mathematica软件。(2)掌握单纯形法的计算机实现的方法。二、实验原理算法的具体步骤如下:书30页Matnmatica中基本语法的补充:(一)LinnearProgramming[c,m,b],其中c是行向量,b是列向量,m是矩阵,自变量用列向量x表示,在满足mx=b且x=0的区域,求cx的最小值点。需要注意的几点是=号,以及目标函数求最小值。举例说明:123min23fxxx12312312312362412..32420,,0xxxxxxstxxxxxx分析与求解:第三个式子可以改造成两个12332420xxx和12332420xxx最后得到用于编写程序的表示形式为123123123123123624123242032420,,0xxxxxxxxxxxxxxx输入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}}(三)表作为向量和矩阵一层表在线性代数中表示向量,二层表表示矩阵.例如,矩阵5432可以用数表{{2,3},{4,5}}表示.输入A={{2,3},{4,5}}则输出{{2,3},{4,5}}命令MatrixForm[A]把矩阵A显示成通常的矩阵形式.例如,输入命令:MatrixForm[A]则输出5432注:一般情况下,MatrixForm[A]所代表的矩阵A不能参与运算.(四)求矩阵A的转置的命令:Transpose[A].(五)求方阵A的逆的命令:Inverse[A](六)()圆括号表示项的结合顺序,如(x+(y^x+1/(2x)));[]方括号表示函数,如Log[x],BesselJ[x,1];{}大括号表示一个“表”(一组数字、任意表达式、函数等的集合),如{2x,Sin[12Pi],{1+A,y*x}};[[]]双方括号表示“表”或“表达式”的下标,如a[[2,3]]、{1,2,3}[[1]]=1。(七)每次运行完成后程序会自动在输入的式子前面加上In[n],n表示输入命令的序列号,在输出的答案上自动加上out[n]。三、单纯形法解题12345max70120100100150Zxxxxx编写程序如下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]]];1234512345123451234512345123458453236045763200310959300..6958915084532100,,,,0xxxxxxxxxxxxxxxstxxxxxxxxxxxxxxxLabel[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[theoptimizationis:];Print[N[x,4]];Print[theoptimizationvalueis:];Print[N[c.x]];实验练习:1.设,421140123,321111111BA求AAB23及.BAT则输出AAB23及BAT的运算结果分别为334421424141010101208214442.设,5123641033252312A求.1A3.minf=-0.751x+1502x-0.023x+64x12341234312340.25600.04900.50900.0230.1,,0xxxxxxxxstxxxx,x
本文标题:实验二-用Mathematica实现单纯形法
链接地址:https://www.777doc.com/doc-5205014 .html