【发布时间】:2016-03-27 12:09:26
【问题描述】:
我想计算 GCD 使用的两个多项式的余数序列。如果我理解关于Pseudo-remainder sequence 的维基百科文章,计算它的一种方法是使用欧几里得算法:
gcd(a, b) := if b = 0 then a else gcd(b, rem(a, b))
意思是我会收集rem() 部分。但是,如果系数是整数,则中间分数增长得非常快,因此存在所谓的“伪余数序列”,它试图将系数保持在小整数中。
我的问题是,如果我理解正确(是吗?),以上两个序列仅因常数因素而不同,但是当我尝试运行以下示例时,我得到不同的结果,为什么?第一个余数序列相差-2,好吧,但为什么第二个序列如此不同?我认为subresultants() 可以正常工作,但为什么g % (f % g) 不能正常工作?
f = Poly(x**2*y + x**2 - 5*x*y + 2*x + 1, x, y)
g = Poly(2*x**2 - 12*x + 1, x)
print
print subresultants(f, g)[2]
print subresultants(f, g)[3]
print
print f % g
print g % (f % g)
导致
Poly(-2*x*y - 16*x + y - 1, x, y, domain='ZZ')
Poly(-9*y**2 - 54*y + 225, x, y, domain='ZZ')
Poly(x*y + 8*x - 1/2*y + 1/2, x, y, domain='QQ')
Poly(2*x**2 - 12*x + 1, x, y, domain='QQ')
【问题讨论】:
标签: math sympy polynomial-math polynomials