我有关于多项式的这些问题,我花了大约4个小时,但我无法得到它。我是Python和编程的新手,我已经尝试过在纸上编写它,但我只是不知道。
编写并测试Python函数negate(p)
,该函数否定由其系数列表p
表示的多项式,并返回一个新的多项式(表示为列表)。换句话说,编写一个使数字列表为负数的函数。
编写一个Python函数eval_polynomial(p, x)
,返回P(x)
的值,其中P
是由系数列表p
表示的多项式。例如,eval_polynomial([1, 0, 3], 2)
应返回1 * 2 ^ 2 + 0 * 2 + 3 = 7.使用单个while循环。
编写并测试函数multiply_by_one_term(p, a, k)
,该函数将由系数列表表示的给定多项式p
乘以ax^k
,并将该产品作为新列表返回。 / p>
如果有人可以帮助我,我会非常感激。
答案 0 :(得分:10)
我建议使用numpy.poly1d
和numpy.polymul
,其系数为 a0*x2 + a1*x + a2
。
例如,代表3*x**2 + 2*x + 1
:
p1 = numpy.poly1d([3,2,1])
使用生成的poly1d
对象,您可以使用*
,/
等操作...:
print(p1*p1)
# 4 3 2
#9 x + 12 x + 10 x + 4 x + 1
如果您想构建自己的函数,假设 p 按顺序包含系数: a0 + a1*x + a2*x**2 + ...
:
def eval_polynomial(p,x):
return sum((a*x**i for i,a in enumerate(p)))
def multiply_by_one_term(p, a, k):
return [0]*k + [a*i for i in p]
我的评估函数使用指数,这可以通过Horner的规则避免,如另一个答案所示,可以在Numpy的polyval
函数中找到
答案 1 :(得分:3)
对于多项式,应考虑Horner's Method。它的主要特征是计算N阶多项式仅需要N个乘法和N个加法运算-不需要指数:
def eval_polynomial(P, x):
'''
Compute polynomial P(x) where P is a vector of coefficients, highest
order coefficient at P[0]. Uses Horner's Method.
'''
result = 0
for coeff in P:
result = x * result + coeff
return result
>>> eval_poly([1, 0, 3], 2)
7
您可以手动进行操作,也可以通过链接查看其工作方式。