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

时间:2013-08-07 02:12:49

标签: python polynomial-math evaluate multiplying

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

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

  2. 编写一个Python函数eval_polynomial(p, x),返回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,并将该产品作为新列表返回。 / p>

  4. 如果有人可以帮助我,我会非常感激。

2 个答案:

答案 0 :(得分:10)

我建议使用numpy.poly1dnumpy.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

您可以手动进行操作,也可以通过链接查看其工作方式。