在Sympy中使用多元多项式的div():不正确的余数?

时间:2018-02-11 10:23:13

标签: sympy division polynomials groebner-basis

我想在Python中计算多元多项式的余数,我发现来自sympy的div()应该可以解决问题(我还需要同情Gröbner计算)。但我一直发现的问题是,似乎div()只检查除法的主要术语,因为

q, r = div(x**2 + y, 2*x)

给出r=y,而

q, r = div(x**2 + y, 2*y) 

给出r=x**2+y

我想做一些像Ideal Membership这样的事情,因此在G = {g_1,...,g_s}上找到除以某些多项式f的余数,其中我现在不能依赖div()。

虽然使用Sage我没有遇到这个问题(使用(x ^ 2 + y)%y给出x ^ 2),但我对Python更熟悉并且更喜欢通过Python来做到这一点。

有人可以告诉我,如果我做错了吗?或者有人知道更好的功能用于剩余部分吗?

2 个答案:

答案 0 :(得分:1)

我发现了一个很好的选择:减少(x ^ 2 + y,[2 * y])得到所需的([1/2],x ^ 2)

答案 1 :(得分:0)

多项式除法的结果取决于单项式的顺序。 在Sympy中,默认顺序为lex,因此x**2 > y。这就是为什么你得到:

>> div(x**2 + y, 2*y)
(0, x**2 + y)

但是,您可以像这样更改生成器x和y的顺序:

>> div(x**2 + y, 2*y, gens=(y, x))
(1/2, x**2)