Math 余数序列
我想计算GCD使用的两个多项式的余数序列。如果我理解维基百科的文章,计算它的一种方法是使用欧几里得算法:Math 余数序列,math,sympy,polynomial-math,polynomials,Math,Sympy,Polynomial Math,Polynomials,我想计算GCD使用的两个多项式的余数序列。如果我理解维基百科的文章,计算它的一种方法是使用欧几里得算法: gcd(a, b) := if b = 0 then a else gcd(b, rem(a, b)) 这意味着我将收集rem()零件。然而,如果系数是整数,中间分数增长非常快,因此存在所谓的“伪余数序列”,它试图将系数保持在小整数中 我的问题是,如果我理解正确(我理解了吗?),上面两个序列只在常数因子上不同,但是当我尝试运行下面的示例时,我得到了不同的结果,为什么?第一个余数序列不同于-
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')
上述两个序列仅因常数因子不同
对于一个变量的多项式,它们是。对于多元多项式,它们不是
多变量多项式的划分是:结果取决于所选的单项式顺序(默认情况下,Symphy使用字典顺序)。当你要求它将2*x**2-12*x+1
除以x*y+8*x-1/2*y+1/2
时,它发现分母的前导单项式是x*y
,分子中没有单项式可以被x*y
整除。商是零,所有的都是余数
子结果的计算(在sympy中实现)将x,y中的多项式视为x中的单变量多项式,其系数恰好来自y中的多项式环。肯定会产生一个子结果序列,其相对于x的次数不断减少,直到它达到0:序列的最后一个多项式中不会有x。相对于y的阶数可能(并且确实)会上升,因为算法将这些项乘以y中的任何多项式,以使x退出
结果是,两种计算都能正确工作,它们只是做了不同的事情