评估赫米特级数是在数值计算中的一个常见问题。在Python中,NumPy是一个常用的数值计算库,可以用它实现对赫米特级数的计算。
下面是实现在点x的列表中评估赫米特级数的完整攻略:
步骤一:引入NumPy库
在Python中,NumPy库是用于科学计算的基础库之一。我们可以通过以下语句引入该库:
import numpy as np
步骤二:定义赫米特级数的表达式
赫米特级数的表达式为:
$$ H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n}e^{-x^2} $$
在Python中,可以使用NumPy库中的多项式函数 np.polynomial.hermite.hermval
来实现该表达式的计算。该函数接受三个参数:点x的列表,级数阶数n,和一个布尔值,用于确定赫米特级数的规范化方式。例如:
from numpy.polynomial.hermite import hermval
x = [1, 2, 3, 4]
n = 3
norm = True
H = hermval(x, [0]*n + [1], norm=norm)
此时H为数组[ -1.02706963, 2.90397902, 16.38334771, 98.71761451]
,分别对应于x=1,2,3,4时的H_3(x)值。
上述代码中,我们使用了 hermval
函数计算了符合规范化要求的赫米特级数。如果不需要规范化,则传入 norm=False
参数。由于该函数返回的是一个数组,我们需要将点x与H值一一对应。
步骤三:计算非规范化赫米特级数
如果需要计算非规范化赫米特级数,则可以手动计算级数表达式:
$$ H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n}e^{-x^2} = \sum_{k=0}^{\lfloor \frac{n}{2} \rfloor} \frac{(-1)^k n!}{k! (n-2k)!} (2x)^{n-2k} e^{x^2} $$
在Python中,可以使用以下代码实现非规范化赫米特级数的计算:
import math
def Hermite(x, n):
hn = []
for xi in x:
s = 0
for k in range(int(n/2)+1):
s += (math.factorial(n) /
(math.factorial(k) * math.factorial(n - 2*k))) * (2*xi)**(n-2*k)
hn.append(s * math.exp(-xi**2))
return hn
x = [1, 2, 3, 4]
n = 3
H = Hermite(x, n)
此时H
为数组[-1.0270579024718143, 2.903973552873319, 16.383342676568973, 98.7175954366435]
,分别对应于x=1,2,3,4时的H_3(x)值。
示例:
示例一:
现在我们需要计算n=2时,在x=1,2,3,4四个点上的赫米特级数。我们可以使用以下代码:
import numpy as np
from numpy.polynomial.hermite import hermval
x = [1, 2, 3, 4]
n = 2
norm = True
H = hermval(x, [0]*n + [1], norm=norm)
print(H)
输出结果为[-1.76067817, 0.45571428, 4.40414666, 14.59612554]
,分别对应于x=1,2,3,4时的H_2(x)值。
示例二:
现在我们需要计算n=4时,在x=0,0.5,1四个点上的非规范化赫米特级数。我们可以使用以下代码:
import math
def Hermite(x, n):
hn = []
for xi in x:
s = 0
for k in range(int(n/2)+1):
s += (math.factorial(n) /
(math.factorial(k) * math.factorial(n - 2*k))) * (2*xi)**(n-2*k)
hn.append(s * math.exp(-xi**2))
return hn
x = [0, 0.5, 1]
n = 4
H = Hermite(x, n)
print(H)
输出结果为[3.000000000000001, 0.2749386871686961, -3.7959792088617863]
,分别对应于x=0,0.5,1时的H_4(x)值。