sag中的多元多项式除法

2024-09-29 21:59:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用sage对两个变量的多项式进行简单的划分。 不幸的是,我得到了一个意外的结果,如下面的代码所示。 我尝试了几种不同的方法来实例化环及其变量,但是 结果保持不变。使用%-运算符得到除法的其余部分会产生相同的结果。有什么想法吗?在

R, (x, y) = PolynomialRing(RationalField(), 2, 'xy').objgens()
t = x^2*y^2 + x^2*y - y + 1
f1 = x*y^2 + x
f2 = x*y - y^3

(q, r) = t.quo_rem(f1)
print "quotient:", q, "reminder:", r
assert q == x and r == x^2*y-x^2-y+1

(q, r) = r.quo_rem(f2) # error, expected q = x, r = -x^2+x*y^3-y+1
print "quotient:", q, "reminder:", r
assert q == x and r == -x^2+x*y^3-y+1

输出:

^{pr2}$

Tags: and实例方法代码运算符assertf2f1
1条回答
网友
1楼 · 发布于 2024-09-29 21:59:00

多元多项式的除法:项序

多元多项式的除法结果取决于单项式的选择顺序,如explained in Wikipedia。就目前而言,仅当且仅当P包含一个可被Q关于所选阶的前导单项式整除的单项式时,可以说P除以Q的商是非零的。在

默认情况下,Sage中的多项式环使用度反向字典序(degrevlex,简称degrevlex),其中单项式首先按总度数排序,然后在每个次内按字典顺序排序。您可以使用R.term_order()来检查此项。这是the list of term orders。在

在degrevlex顺序中,y^3在x*y之前,因为它具有更高的总阶数。因为x^2*y-x^2-y+1没有一个可以被y^3整除的单项式,所以得到了零商。在

四轮马车

你的预期结果与单项式的字典序一致。因此,似乎解决方法是在构造R时规定词汇顺序:

R.<x,y> = PolynomialRing(QQ, 2, 'xy', order='lex') 

不幸的是,quo_rem忽略了R的项顺序,仍然使用degrevlex。这似乎是一个bug,要么是Sage与单数的通信方式,要么是单数本身(the Quotient command is deprecated)。在

解决方法

同时,还有一个解决方法:使用reduce命令而不是quo_rem,因为它尊重R的术语顺序。例如:

^{pr2}$

返回r=-x^2+x*y^3-y+1和q=x

相关问题 更多 >

    热门问题