如何用Mathematica绘制单纯形表

 时间:2024-10-25 23:36:17

介绍运筹学中的单纯形表的绘制。MMA强大的符号处理和方便的交互可以直观的展现单纯形法的求解过程。本经验只关注表格的绘制。

如何用Mathematica绘制单纯形表

工具/原料

Mathematica

方法/步骤

1、我们在Mathematica中编写如下函数,用来产生一个按照单纯形表层次呈现的列表。绘制效果如封面。接下来分析这个表格的绘制方法。

如何用Mathematica绘制单纯形表

2、为了逻辑清晰,我们使用蔡龇呶挞关系列表(键值对)来表示单纯形表,为图中DCX。Amns就是系数矩阵,Bms是方程等号右边是m个b,Cns是n个价苒锃巳伢值系数;Xns是变元名称(仅仅用于显示),XBIDms是当前选择的正交基对应变元序号列表。

如何用Mathematica绘制单纯形表

3、编写一个模块ShowDCXTable。函数参数后面要加_,模块使用Module蠹韦睥谚声明,第一个大括号内是局部变量声明。期中Row0是第棒瀹跏癞一行,Row1是第二行,Rowms是接下来m行(有矩阵的部分),RowLast表示最后一行。

如何用Mathematica绘制单纯形表

4、dcx是传入的关系列表,使用dcx[键]获取键对应的值。使用Length计算系数矩阵Amns的宽高。

如何用Mathematica绘制单纯形表

5、对于σ和θ,如果有计算结果,从传入参数提取计算结果;否则,使用Table[Null,个数]产生空列表。

如何用Mathematica绘制单纯形表

6、使用如图代码产生各列。用了一些技巧。比如使用大括号把将要合并的元素增加到列表的同一深度,接着通过掂迎豢畦Flatten减少深度,实现列表拼接的效果。A罪焐芡拂mns右边要拼接θms,先转置,然后拼接{θms},然后Flatten[..,1]减少一层,再转置,就变成了{{....,a1n,θ1},{...,a2n,θ2}...}的列表。

如何用Mathematica绘制单纯形表

7、最后合并各个行,使用大括号{}和Fatten来调整到同样的层级。这一句不加分号,作为这个模块的输出。

如何用Mathematica绘制单纯形表

8、现在有一个如图所示按照之前的规则定义的单纯形表DCX,调用ShowDCXTable,(没有计算结果所以第二个参数留空{}),得到如图列表。

如何用Mathematica绘制单纯形表

如何用Mathematica绘制单纯形表

9、然后使用Grid格子显示,设置边框线和对齐,并按照TraditionalForm显示,单纯形表就绘制好了。

如何用Mathematica绘制单纯形表

matlab能求表达式的模吗 Mathematica通过一系列点拟合B样条函数的方法 在matlab中如何进行特征值的分解? Mathematica基础——处理连分数问题 MATLAB R2015b怎么设置百分率为100%
热门搜索
鳗鱼图片 无翼鸟邪恶漫画日本 苍耳子图片 邪恶动态 图不重要看字图片