在Python中使用NumPy在点x的列表中评估赫米特级数

  • Post category:Python

评估赫米特级数是在数值计算中的一个常见问题。在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)值。