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

  • Post category:Python

要在Python中使用NumPy进行赫米特级数的计算,可以遵循以下步骤:

步骤1:导入NumPy模块

在Python中使用NumPy模块进行科学计算,需要先导入NumPy模块。导入NumPy模块的代码如下所示:

import numpy as np

步骤2:定义赫米特函数的函数

在计算赫米特级数的过程中,需要先定义赫米特函数的函数。赫米特函数的计算公式如下所示:

$$H_{n}(x)=(-1)^{n}e^{x^{2}}\frac{d^{n}}{dx^{n}}e^{-x^{2}}$$

可以使用NumPy中的poly1d类来求解赫米特函数的导数。定义赫米特函数的函数的代码如下所示:

def hermite(n, x):
    coeff = np.zeros(n+1)
    coeff[-1] = 1
    p = np.poly1d(coeff)
    return (np.power(-1,n) * np.exp(x*x) * np.polyval(p.deriv(n), x))

步骤3:计算赫米特级数

定义了赫米特函数的函数之后,可以开始计算赫米特级数了。赫米特级数的计算公式如下所示:

$$\psi_n(x)=\frac{1}{\sqrt{2^n n! \sqrt{\pi}}} H_n(x) e^{-\frac{x^2}{2}}$$

其中,$n$表示要计算的级数,$x$表示要计算的点。

计算赫米特级数的代码如下所示:

def hermite_series(n, x_list):
    psi_n = np.zeros((len(x_list), n+1))
    for i in range(n+1):
        psi_n[:, i] = 1.0/np.sqrt(2**i*np.math.factorial(i)*np.sqrt(np.pi))*hermite(i, x_list)*np.exp(-x_list*x_list/2)
    return psi_n

示例1:计算前三个级数的赫米特级数

下面的代码示例演示了如何计算$x$的值在$[-5,5]$范围内的前三个级数的赫米特级数。

import numpy as np

def hermite(n, x):
    coeff = np.zeros(n+1)
    coeff[-1] = 1
    p = np.poly1d(coeff)
    return (np.power(-1,n) * np.exp(x*x) * np.polyval(p.deriv(n), x))

def hermite_series(n, x_list):
    psi_n = np.zeros((len(x_list), n+1))
    for i in range(n+1):
        psi_n[:, i] = 1.0/np.sqrt(2**i*np.math.factorial(i)*np.sqrt(np.pi))*hermite(i, x_list)*np.exp(-x_list*x_list/2)
    return psi_n

x = np.linspace(-5, 5, 100)
psi = hermite_series(3, x)
for i in range(4):
  plt.plot(x, psi[:, i], label=f'n={i}')
plt.legend()
plt.show()

该代码将输出一个绘制了前三个级数的赫米特级数的图像。

示例2:计算第五个级数在不同$x$值下的赫米特级数

下面的代码示例演示了如何计算第五个级数在不同$x$值下的赫米特级数。

import numpy as np

def hermite(n, x):
    coeff = np.zeros(n+1)
    coeff[-1] = 1
    p = np.poly1d(coeff)
    return (np.power(-1,n) * np.exp(x*x) * np.polyval(p.deriv(n), x))

def hermite_series(n, x_list):
    psi_n = np.zeros((len(x_list), n+1))
    for i in range(n+1):
        psi_n[:, i] = 1.0/np.sqrt(2**i*np.math.factorial(i)*np.sqrt(np.pi))*hermite(i, x_list)*np.exp(-x_list*x_list/2)
    return psi_n

x = np.array([-5, -3, -1, 0, 1, 3, 5])
psi = hermite_series(5, x)
print(psi)

该代码将输出$x$值在$[-5, -3, -1, 0, 1, 3, 5]$范围内的第五个级数的赫米特级数。