要在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]$范围内的第五个级数的赫米特级数。