在Python中使用NumPy在点x上广播评估一个多项式的系数列

  • Post category:Python

在Python中使用NumPy可以很方便地对多项式进行求解和计算。在这里我们会演示如何使用NumPy在给定$x$值上,对多项式系数列进行广播计算,实际上就是利用numpy中的多项式函数进行求解。下面是详细的攻略:

确定多项式系数

在开始之前,我们首先需要确定多项式的系数。假设我们需要计算的多项式为:

$p(x) = 4x^3 + 3x^2 + 2x + 1$

那么我们可以将其系数以列表的形式表示出来:

import numpy as np

p_coeff = [4, 3, 2, 1]

广播评估多项式

接下来,我们需要使用numpy.polyval(x, p)函数。该函数接受两个参数,第一个参数为一个数组或值,广播输入多项式系数,第二个参数为多项式系数。

如果你想在点 $x$ 上评估多项式,只需要将 $x$ 作为第一个参数传递给多项式函数即可。例如,对于上述多项式 $p(x)$,我们可以这样计算在 $x=2$ 时的值:

x = 2
p_val = np.polyval(p_coeff, x)
print(p_val) # 输出 35

这里$ np.polyval(p_coeff, x)$ 的操作实际上是固定 $p_coeff$ 作为多项式系数($4x^3 + 3x^2 + 2x + 1$),用 $x=2$ 来代入求解,输出结果 $35$ 是在 $x=2$ 处,$4x^3 + 3x^2 +2x + 1$ 这个多项式的值。

如果你想在多个点上评估多项式,只需将这些点作为数组输入即可,如下:

x = np.array([1, 2, 3])
p_vals = np.polyval(p_coeff, x)
print(p_vals) # 输出 [10 35 76]

这段代码将在3个点(1,2和3)上评估多项式 $p(x)$ 的值。其中,$np.polyval(p_coeff, x)$ 的操作将多项式系数 $p_coeff$ 广播到点 $x$ 上进行计算。输出结果 $[10, 35, 76]$ 表示同时在 $x=1,2,3$ 三个点处 $4x^3 + 3x^2 + 2x + 1$ 多项式的值。

附带另一个例子:假设多项式如下:

$q(x) = 3x^3 + 2x^2 – 5x – 1$

多项式系数:

q_coeff = [3, 2, -5, -1]

如果我们要在 $x=0$ 上评估这个多项式,可以这样写:

x = 0
q_val = np.polyval(q_coeff, x)
print(q_val) # 输出 -1

$q(0) = 30^3 + 20^2 – 5*0 – 1$ 的值为 $-1$。

或者,在 $x=-1,0,1$ 上评估多项式的值,可以这样写:

x = np.array([-1, 0, 1])
q_vals = np.polyval(q_coeff, x)
print(q_vals) # 输出 [-6 -1 1]

$q(-1) = 3(-1)^3 + 2(-1)^2 – 5(-1) – 1$ 的值为 $-6$,$q(0) = 30^3 + 20^2 – 50 – 1$ 的值为 $-1$,$q(1) = 31^3 + 21^2 – 5*1 – 1$ 的值为 $1$。

通过以上两个分别在一个点和三个点上的运算,我们已经完整地演示了如何在Python中使用NumPy在点x上广播评估一个多项式的系数列了。