问题描述
我使用的是鼠尾草,并试图用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)