Math Python多项式pow

Math Python多项式pow,math,python-3.6,Math,Python 3.6,我有自己定义的多项式类,它以系数列表的形式出现。 差不多 axˆ2+bx+c等于[c,b,a] (对于ax+b==[b,a] 类似地,对于axˆ3+bxˆ2+cx+d==[d,c,b,a]) 列表的len()取决于函数的索引。 我想定义一个自定义的uuu pow uuu函数,但我真的不知道如何实现它。好的,这里有多个答案,这取决于您定义“pow函数的意思 首先,正如@matt已经正确指出的,幂就是重复的乘法。Python实际上内置了一个pow函数,但也有使用a**2=a平方=a*a或a**3=a

我有自己定义的多项式类,它以系数列表的形式出现。
差不多

axˆ2+bx+c等于[c,b,a]
(对于ax+b==[b,a]
类似地,对于axˆ3+bxˆ2+cx+d==[d,c,b,a])

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


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

好的,这里有多个答案,这取决于您定义“pow函数的意思

首先,正如@matt已经正确指出的,幂就是重复的乘法。Python实际上内置了一个pow函数,但也有使用
a**2=a平方=a*a
a**3=a*a*a
a**4=a*a*a
等的快速表示法

现在,如果你只想知道每个x参数的pow,你的函数会是这样的

a*(x**2)+b*x+c 
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

最后,您可能希望列出您的系数,这样您就可以这样做了

a*(x**2)+b*x+c 
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”处的值

我希望有帮助:)

编辑::读一下你的评论,马上把它附加到我的答案上

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

编辑2::

正如马特指出的那样:

 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
对整数指数执行此技巧(非整数指数不会返回)
有效多项式)。

这里有一个函数,当你将两个多项式相乘时,可以得到它们的系数

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]
与预期一致。

也许你应该定义一个乘法函数?为什么不简单地使用
**
甚至自定义乘法函数呢。我不能使用标准**,因为我必须做(x+1)(x+1)=(xˆ2+2x+1),所以[1,1]**2应该是[1,2,1]你试过代码吗?什么是n?max不是要大于任意一个长度数组吗?所以k要大于任意一个长度数组吗?在第一个代码片段中,为什么要使用前导系数为零的
y
?这并不是完全无效,但它是不寻常的,使示例比需要的更复杂。没有理由,我只是键入了三个随机数。这可能应该更系统地进行。是的,回顾过去,这是一个非常糟糕的例子。这种方法基本上是正确的,但是对于大于2或3的幂,使用它比乘以n要好得多。