我正在使用sage,并试图用Wikipedia给出的伪代码实现单变量多项式除法
但我认为这是一个循环,例如,如果我问div(x^2-1,x-1)
,它不会立即给出答案。它应该返回(0,x+1)
,但它什么也不做
守则:
def div(p,q):
if q==0:
return("NaN")
elif q!=0:
l=0
r=p
while r!=0 and q.degree()<=r.degree():
t=(r.leading_coefficient())/(q.leading_coefficient())
l=l+t
r=r-(t*q)
return(l,r)
编辑:我读错了伪代码,没有看到我没有降低多项式的阶数,显然它什么都没做。我“修复了它”,但现在它给了我一些新的错误,但我认为这是一些强制错误
感谢您的帮助
新守则:
def div(p,q):
if q==0:
return("NaN")
elif q!=0:
l=0
r=p
while r!=0 and q.degree()<=r.degree():
t=r.leading_coefficient()/q.leading_coefficient()
m=x^r.degree()/x^q.degree()
l=l+t*m
r=r-(t*m*q)
print(l,r) #To see when the code fails
return(l,r)
编辑2:在检查"Polynomials in sage"时,它说如果你除以两个多项式,那么它会强制它到分数字段的一个元素,这会在r.degree()行中给我一个错误。有人知道解决这个问题的方法吗
通过在基环中投射m来修正,m=R(m),我想这是一个草率的补丁,我想知道是否有更聪明的方法来实现这个算法。 固定代码:
圣贤
p / q
在分数字段中给出一个结果p // q
给出环中的商(去掉任何余数)p % q
给出了余数p.quo_rem(q)
立即给出该对{相关问题 更多 >
编程相关推荐