7

我有这些关于多项式的问题,我花了大约 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)的给定多项式乘以并将乘积作为新列表返回。pax^k

如果有人可以帮助我,我将不胜感激。

4

2 回答 2

12

我建议使用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]

笔记

我的评估函数使用指数,这可以通过霍纳规则来避免,如另一个答案中所述,该答案在 Numpy 的polyval函数中可用

于 2013-08-07T04:01:54.127 回答
3

请改用霍纳的方法!

对于多项式,您应该考虑Horner 方法。它的主要特点是计算 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

您可以手动完成它,或点击链接查看它是如何工作的。

于 2018-11-03T23:29:18.343 回答