多项式除法

2024-04-26 14:53:00 发布

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

我正在使用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()行中给我一个错误。有人知道解决这个问题的方法吗


Tags: and代码divreturnifdef错误nan
2条回答

通过在基环中投射m来修正,m=R(m),我想这是一个草率的补丁,我想知道是否有更聪明的方法来实现这个算法。 固定代码:

x=var('x')
R.<x>=PolynomialRing(QQ)

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()
            m=R(m)
            l=l+t*m
            r=r-(t*m*q)
            print(l,r)
        return(l,r)

圣贤

  • p / q在分数字段中给出一个结果
  • p // q给出环中的商(去掉任何余数)
  • p % q给出了余数
  • p.quo_rem(q)立即给出该对{}

相关问题 更多 >