如何创建处理多项式的函数?

con*_*ent 5 python evaluate polynomial-math multiplying

我有关于多项式的这些问题,我花了大约4个小时,但我无法得到它.我是Python和编程的新手,我已经尝试过在纸上编写它,但我只是不知道.

  1. 编写并测试一个Python函数negate(p),该函数否定由其系数列表表示的多项式,p并返回一个新的多项式(表示为列表).换句话说,编写一个使数字列表为负数的函数.

  2. 编写一个eval_polynomial(p, x)返回值的Python函数P(x),其中P是由系数列表表示的多项式p.例如,eval_polynomial([1, 0, 3], 2)应返回1*2 ^ 2 + 0*2 + 3 = 7.使用单个while循环.

  3. 编写并测试一个函数multiply_by_one_term(p, a, k),该函数将给定的多项式乘以p系数列表,ax^k并将该产品作为新列表返回.

如果有人可以帮助我,我将非常感激.

Sau*_*tro 11

我建议使用numpy.poly1dnumpy.polymul,系数是a0*x2 + a1*x + a2.

例如,代表3*x**2 + 2*x + 1:

p1 = numpy.poly1d([3,2,1])
Run Code Online (Sandbox Code Playgroud)

使用生成的poly1d对象,您可以使用*,/等等...:

print(p1*p1)
#   4      3      2
#9 x + 12 x + 10 x + 4 x + 1
Run Code Online (Sandbox Code Playgroud)

如果你想构建自己的函数,假设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]
Run Code Online (Sandbox Code Playgroud)

注意

我的评估函数使用指数,这可以通过Horner的规则避免,如另一个答案所示,可以在Numpy的polyval函数中找到