Python多项式pow

时间:2017-04-06 08:08:46

标签: math python-3.6

我有自己定义的多项式类,它是系数列表的形式。

这样的东西
  

ax2 + bx + c等于[c,b,a]
      (对于ax + b == [b,a]
      同样,对于ax3 + bx2 + cx + d == [d,c,b,a])

和列表的 len()取决于函数索引。

我想定义一个自定义__pow__函数,但我真的不知道如何实现它。

2 个答案:

答案 0 :(得分:5)

这是一个函数,用于在将它们相乘时得到两个多项式的系数。

def multiply(a, b):
    """
        polynomials where.
        [a1, a2, a3] -> a1 + a2*x + a3*x^2
        [b1, b2, b3] -> b1 + b2*x + b3*x^2
    """
    c = [0.0]*(len(a) + len(b)-1)

    for i in range(len(a)):
        ai = a[i]
        for j in range(len(b)):
            c[i + j] += ai * b[j]

    return c


x = [1, 1]
y = [2, 1, 0]
print(multiply(x, y))

显示[2.0, 3.0, 1.0, 0]

然后使用pow函数在循环中调用乘法。

def pow(a, n):
    """
     a^n
    """
    c = [1]
    for i in range(n):
        c = multiply(c, a)
    return c

x = [1, 1]
print(pow(x, 4))

按预期输出[1.0, 4.0, 6.0, 4.0, 1.0]

答案 1 :(得分:1)

好的,这里有多个答案,具体取决于您定义“ pow ”功能的含义。

所以,首先,正如@matt已经正确陈述的那样,权力只是重复乘法。 Python实际上内置了pow函数,但也有使用a**2 = a squared = a*aa**3 = a * a * aa**4=a * a * a * a等的快速符号。

现在,如果您只想要每个x参数的pow,那么您的函数看起来就像这样

a*(x**2)+b*x+c 

a*(x**4)+b*(x**3)+c*(x**2)+d*x+e

最后,你可能希望列出你的系数,所以你可以做这样的事情

coefficients = [1,2,3,...] #(inputting real values here)
def poly(x):
     sum=0.0
     for i in range(len(coefficients)):
          sum+=coefficients[i]*(x**i)
     return sum

然后可以返回系数列表“系数”定义的多项式,并在任何点“x”返回给你的值。

我希望它有所帮助:)。

编辑::只需阅读您的评论,就可以在一秒钟内将其附加到我的答案中。

输入第二次编辑有点太快了,只需使用另一个答案提供的算法:)

EDIT2 ::

正如马特指出的那样::

 def __mult__(coeff1,coeff2):
     coeff_result = [0.0]*(len(coeff1)+len(coeff2)-1)
     for k in range(len(coeff1)):
         for n in range(len(coeff2)):
              coeff_result[k+n]+=coeff1[k]*coeff2[n]
     return coeff_result
 def __pow__(coeff1,n):
     res = coeff1[:]
     for i in range(n-1):
         res=__mult__(res,coeff1)
     return res

是整数指数的技巧(非整数指数不会返回  有效多项式)。