Methods Maple中的序列[无法执行]
我一直在编写一个程序,用修正的单纯形法求解任何最大化LPP。但我有一个问题,因为我试图输入一个序列来解决非基本变量的问题。 我的代码如下:Methods Maple中的序列[无法执行],methods,sequence,maple,simplex,Methods,Sequence,Maple,Simplex,我一直在编写一个程序,用修正的单纯形法求解任何最大化LPP。但我有一个问题,因为我试图输入一个序列来解决非基本变量的问题。 我的代码如下: matmax:=proc(tableau,basic) local pivot,T,nbv,n,m,b; T:=evalm(tableau); n:=coldim(T); m:=rowdim(T); b:=evalm(basic); print(evalm(T)); nbv:={seq(i,i=2..n-1)}minus{seq(b[i],i=1..m)};
matmax:=proc(tableau,basic)
local pivot,T,nbv,n,m,b;
T:=evalm(tableau);
n:=coldim(T); m:=rowdim(T);
b:=evalm(basic);
print(evalm(T));
nbv:={seq(i,i=2..n-1)}minus{seq(b[i],i=1..m)};
pivot:=getpiv(T,nbv);
while not pivot=FAIL do
b[pivot[1]]:=pivot[2];
T:=evalm(gauss(col(T,pivot[2]),pivot[1])&*T);
print(evalm(T));
nbv:={seq(i,i=2,..n-1)}minus{seq(b[i],i=1..m)};
pivot:=getpiv(T,nbv);
od;
[evalm(T),evalm(b)];
end;
gauss和getpiv命令是为在这个程序中工作而编写的程序,它们工作得很好。但是,在执行此过程时,Maple返回消息“Error,(在matmax中)Canable to execute seq”如果有人能帮我解决这个问题,我将不胜感激。如果在调用
matxmax
之前没有加载linalg
包,那么像coldim
这样的命令将不会简化工作,也不会产生预期的n
和m
的整数结果当使用seq
调用范围中的那些时。我相信这就是为什么出现seq
错误的原因,因为n
和m
没有像您预期的那样被分配整数中间结果
您可以尝试通过在调用matmax
之前加载包,使用with(linalg)
来解决这个问题。但这并不是很可靠,而且在某些情况下它可能不起作用。with
命令在过程体中不起作用,因此不能将其放入procmatmax
的defn中
您可以在上面的matmax
声明行中插入一行,例如local
声明行
uses linalg;
这将使coldim
和linalg
软件包中的朋友们发挥作用。不幸的是,您使用了名称pivot
作为局部变量,这与pivot
导出自linalg
包相冲突。因此,通过使用的简单修复是不够的。您可以使用一些名称而不是pivot
,当然,简单的使用的是行
我个人的偏好是将所有内容都完全显式化,以便以后您或其他阅读代码的人能够更清楚地理解它,即使它更长。因此,我将使用linalg[coldim]
而不是coldim
,以此类推,用于matmax
中linalg
包的其他导出用途
综上所述,您应该知道,linalg
软件包在现代枫树中已被弃用,而linearagebra
是提供您似乎正在使用的功能的新软件包。命令名较长,但使用较新的软件包意味着您不需要所有这些evalm
调用(或类似的调用)。问题可能在于您的gauss和getpiv命令,因为它们可能不适用于您的过程,您能详细介绍一下它们的功能吗 请格式化您的代码。这很难阅读。我不明白你所说的格式化是什么意思,我在发布问题时遵循了代码块规则。缩进。另外,您需要解释实际问题是什么。你提到它,但你从来没有确切说明出了什么问题。你有错误吗?您是否得到了错误的结果?问题是,当我尝试使用matmax(T,Basic)执行过程时,我得到maple返回给我的结果是[Error,(在matmax中)cannot execute seq]。从那以后,我就一直在玩它,但我总是会遇到同样的错误,即无法执行序列。对于最初没有澄清表示歉意。答案不是猜测,你应该对此发表评论。