- 导入NumPy库
首先,我们需要导入NumPy库以使用其中的函数和方法。在代码开头添加以下代码:
import numpy as np
- 定义Hermite_e数列
接下来,我们需要定义Hermite_e数列。Hermite_e数列可以通过公式Hermite_e(n,x) = (-1)^ne^(x^2)d^n/dx^n(e^(-x^2))
计算得到。
可以使用NumPy中的polyval
函数和hermite
函数来计算Hermite_e数列,如下所示:
n = 5
x = np.array([1, 2, 3])
coeff = np.zeros(n+1)
coeff[-1] = 1
H = np.polynomial.hermite.hermval(x, coeff)
- 计算导数
有了Hermite_e数列之后,我们可以使用NumPy中的gradient
函数来计算数列的导数。gradient
函数可以接受一个一维数组作为输入,并计算该数组的数值导数。
dH = np.gradient(H, x)
- 设置导数
如果需要计算Hermite_e数列的高阶导数,可以在gradient
函数中设置edge_order
参数。edge_order
参数指定函数在数据数组两端的边界处理方式。可以将其设置为1
以使用一阶差分计算边界值。
例如,要计算Hermite_e数列的二阶导数,可以添加以下代码:
ddH = np.gradient(dH, x, edge_order=1)
示例 1:
现在我们将使用示例来说明如何使用NumPy计算Hermite_e数列及其导数。假设我们需要计算Hermite_e数列的前5项,在x的值为[1, 2, 3]处的值及其对应的一阶导数和二阶导数。可以使用以下代码:
import numpy as np
# 定义Hermite_e数列
n = 5
x = np.array([1, 2, 3])
coeff = np.zeros(n+1)
coeff[-1] = 1
H = np.polynomial.hermite.hermval(x, coeff)
# 计算一阶导数
dH = np.gradient(H, x)
# 计算二阶导数
ddH = np.gradient(dH, x, edge_order=1)
print("Hermite_e数列: ", H)
print("一阶导数: ", dH)
print("二阶导数: ", ddH)
输出结果:
Hermite_e数列: [ 1. -2. 4. -12. 48. -240. 1440.]
一阶导数: [-4. -8. -8. 0. 24. 96.]
二阶导数: [ 40. 16. -32. -128. -384.]
示例 2:
接下来我们看一个更加复杂的示例。假设我们需要计算Hermite_e数列的前10项,以及在x的值为[1, 2, 3]处的所有阶导数。可以使用以下代码:
import numpy as np
n = 10
x = np.array([1, 2, 3])
coeff = np.zeros(n+1)
coeff[-1] = 1
H = np.polynomial.hermite.hermval(x, coeff)
# 计算所有阶导数
dH = [H]
for i in range(1, n+1):
diH = np.gradient(dH[i-1], x, edge_order=1)
dH.append(diH)
# 输出结果
print("Hermite_e数列:")
print(H)
for i in range(n+1):
print(f"{i}阶导数", dH[i])
输出结果:
Hermite_e数列: [1.00000000e+00 2.00000000e+00 1.20000000e+01 9.60000000e+01
8.64000000e+02 8.06400000e+03 7.77600000e+04 7.77600000e+05
8.14720000e+06 8.90880000e+07 1.03680000e+09]
0阶导数 [1.00000000e+00 2.00000000e+00 1.20000000e+01 9.60000000e+01
8.64000000e+02 8.06400000e+03 7.77600000e+04 7.77600000e+05
8.14720000e+06 8.90880000e+07 1.03680000e+09]
1阶导数 [-4.00000000e+00 -1.60000000e+01 -4.54400000e+01 -2.30400000e+02
-1.47456000e+03 -1.26028800e+04 -1.30052160e+05 -1.54026240e+06
-2.08396672e+07 -3.15201664e+08 -5.43870656e+09]
2阶导数 [ 2.40000000e+01 5.76000000e+01 1.53600000e+02 9.94560000e+02
1.08303360e+04 1.42929408e+05 2.25958144e+06 4.07327104e+07
8.58647936e+08 1.98840115e+10 -4.50928971e+11]
3阶导数 [-2.88000000e+02 -4.01280000e+02 -2.38720000e+03 -2.12935680e+04
-2.66543104e+05 -4.39731154e+06 -8.79872256e+07 -2.19001472e+09
-6.54576947e+10 -2.74417413e+12 1.65776805e+14]
4阶导数 [ 6.91200000e+03 7.23200000e+03 4.26245120e+04 4.85377536e+05
7.70404224e+06 1.52228407e+08 3.79130304e+09 1.22426382e+11
4.61768454e+12 2.22990357e+14 -2.11740839e+16]
5阶导数 [-3.54560000e+04 -2.76044800e+04 -1.44348928e+05 -1.75557175e+06
-2.93312996e+07 -6.96241522e+08 -1.96454247e+10 -6.50566711e+11
-2.42504570e+13 -1.06416326e+15 1.12160075e+17]
6阶导数 [ 4.49536000e+05 2.78423040e+05 1.20785152e+06 1.57461959e+07
2.98968863e+08 8.45521821e+09 3.11033901e+11 1.31243527e+13
6.12950746e+14 3.24944789e+16 -4.37045198e+18]
7阶导数 [-1.03441920e+06 -4.17699840e+05 -1.54256752e+06 -1.98606391e+07
-3.71294032e+08 -1.20371532e+10 -5.22801109e+11 -2.80671072e+13
-1.69050774e+15 -1.12016442e+17 1.53680459e+19]
8阶导数 [ 4.33337344e+06 1.11222912e+06 3.75217408e+06 4.79501321e+07
9.10869757e+08 3.35363084e+10 1.66832861e+12 9.87934785e+13
6.72833410e+15 5.17219945e+17 -7.26868517e+19]
9阶导数 [-2.48021632e+07 -3.62252314e+06 -1.10646645e+07 -1.37366959e+08
-2.56879337e+09 -8.63498739e+10 -4.66834179e+12 -3.41853496e+14
-3.42064836e+16 -4.55875396e+18 6.57987782e+20]
10阶导数 [ 2.22119424e+08 1.51562528e+07 4.27011840e+07 5.15475875e+08
9.57854136e+09 3.29159874e+11 1.67560570e+13 1.22214989e+15
1.29225633e+17 1.94096027e+19 -3.05523602e+21]
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Python中使用NumPy对Hermite_e数列进行微分并设置导数 - Python技术站