我有自己定义的多项式类,它是系数列表的形式。
像
ax2 + bx + c等于[c,b,a]
(对于ax + b == [b,a]
同样,对于ax3 + bx2 + cx + d == [d,c,b,a])
和列表的 len()取决于函数索引。
我想定义一个自定义__pow__函数,但我真的不知道如何实现它。
答案 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*a
或a**3 = a * a * a
或a**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
是整数指数的技巧(非整数指数不会返回 有效多项式)。