Methods Maple中的序列[无法执行]

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)};

我一直在编写一个程序,用修正的单纯形法求解任何最大化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)};
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
命令在过程体中不起作用,因此不能将其放入proc
matmax
的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]。从那以后,我就一直在玩它,但我总是会遇到同样的错误,即无法执行序列。对于最初没有澄清表示歉意。答案不是猜测,你应该对此发表评论。