如何在Maple中设置plex顺序,并通过输入确定变量的数量?

问题描述 投票:0回答:1

我想编写一个函数来给出关于两个输入多项式的 lex 阶的 Groebner 基,但是变量的数量是由输入给出的,而不是先验的。准确地说,我从以下开始:

GBoftwo:=proc(f,g,Var)

其中 Var 是变量列表,例如输入可以是 GBoftwo(x^2+y,x+z^2,[x,y,z])。 那么整个代码可能是:

GBoftwo:=proc(f,g,Var)
with(Groebner);
local F, n;
F:=[f,g];
n:=nops(Var);
retern Basis(F,plex(Var[1],...,Var[n]))
end proc;

然后错误提示说:错误,无法解析。

如何克服这个问题?

谢谢!

我没有用任何方法搞清楚,不知道是不是Basis命令的缺陷。

maple groebner-basis
1个回答
0
投票

您收到错误消息是因为您将

return
拼写为
retern
。所以你有一个语法错误。

您无法在程序中正确使用

with

您应该取消引用全局名称

plex
,因为它不是受保护的名称,可以在顶层分配一些值。

你不需要

n
,因为
op(Var)
提供了列表
Var
的元素的表达式序列。

restart;

GBoftwo:=proc(f,g,Var::list(name))
  uses Groebner;
  local F:=[f,g];
  return Basis(F,':-plex'(op(Var)))
end proc:

GBoftwo(x^2+y,x+z^2,[x,y,z])

      [ 4       2    ]
      [z  + y, z  + x]

GBoftwo(x^2+y,x+z^2,[y,x,z])

      [ 2       4    ]
      [z  + x, z  + y]

注意:示例过程非常简单,可以进一步简化为一行(此时它几乎不能节省时间;您可以轻松地直接调用

Basis
)。因此,我认为您正在练习/学习,这只是一个编程实验。

restart;
GBoftwo:=proc(f,g,Var::list(name))
  Groebner:-Basis([f,g],':-plex'(op(Var)))
end proc:

GBoftwo(x^2+y,x+z^2,[x,y,z])

        [ 4       2    ]
        [z  + y, z  + x]

with(Groebner):

# and now, just a few characters longer...
Basis([x^2+y,x+z^2],plex(x,y,z))

         [ 4       2    ]
         [z  + y, z  + x]
© www.soinside.com 2019 - 2024. All rights reserved.