多项式除法

问题描述

我使用的是鼠尾草,并试图用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)我想这是一些草率的补丁,我想知道是否存在一些更智能的方法来制作此算法。 固定代码:

SumMargin = 
CALCULATE ( 
    SUM ( 'PRO vw_FactProfitability_Margin'[groupExtGrossMarginAmt] ),FILTERS ('PRO vw_FactProfitability_Margin'[productRef]))
,

在圣人

  • p / q在分数字段中给出结果
  • p // q给出环中的商(除去任何余数)
  • p % q给出了其余部分
  • p.quo_rem(q)一次提供一对(quotient,remainder)