删除Hermite多项式的小拖尾系数有两种方法,分别是手动实现和使用Python第三方库numpy中的poly1d函数。下面我会分别介绍这两种方法并给出示例说明。
手动实现删除Hermite多项式小拖尾系数的方法
1. 定义Hermite多项式的生成函数
Hermite多项式的生成函数可以用下面的公式来表示:
$$ H_n(x)=(-1)^ne^{x^2}\frac{d^n}{dx^n}e^{-x^2} $$
在python中,我们可以通过递归的方式来实现上述公式:
def Hermite(n):
if n == 0:
return np.poly1d([1])
elif n == 1:
return np.poly1d([2, 0])
else:
a = np.polydiv(np.poly1d([2, 0]) * Hermite(n-1), Hermite(n-2))
return a[0]
该函数将返回一个numpy的多项式对象,代表Hermite多项式。
2. 删除小拖尾系数
如果我们要删除Hermite多项式的小拖尾系数,只需要在生成Hermite多项式后,保留前n项即可,n取决于我们想要留下多少项。注意,如果要删除小拖尾系数,那么n应该为奇数。
代码实现如下:
def Hermite_truncate(n, k):
H_n = Hermite(n)
return H_n[:(k+1)]
- 参数n代表Hermite多项式的阶数,即生成的Hermite多项式最高项的次数;
- 参数k代表我们要保留的多项式的最高项次数;
- 返回值为一个numpy的多项式对象,包含了保留的Hermite多项式的所有项。
3. 示例说明
比如现在我们要生成一个阶数为20的Hermite多项式,并保留前7项,代码如下:
Hermite_truncate(20, 7)
得到的结果为:
poly1d([ 1., 0., -2., 0., 4., 0., -8., 0., 16.])
这个多项式对象包含了保留的前7项,即$H_0$, $H_1$, $H_2$, $H_3$, $H_4$, $H_5$, $H_6$。
使用numpy中的poly1d函数删除小拖尾系数
我们可以使用numpy中的poly1d函数生成Hermite多项式,并使用poly1d对象自带的切片方法来删除小拖尾系数。
1. 生成Hermite多项式
对于一个Hermite多项式来说,其前$n+1$项可以使用如下代码生成:
import numpy as np
n = 20
c = np.zeros(n+1)
c[0] = 1
H_n = np.poly1d(c)
for i in range(1, n+1):
c[i] = 2 * (H_n[i-1])
if i>1:
c[i] -= 2 * (i-1) * c[i-2]
H_n = np.poly1d(c)
- 参数n代表Hermite多项式的阶数,即生成的Hermite多项式最高项的次数;
- H_n为一个numpy的poly1d多项式对象,包含了所有的Hermite多项式的所有项。
2. 删除小拖尾系数
与手动实现类似,我们可以使用切片方法来删除多项式的小拖尾系数。代码如下所示:
def Hermite_truncate2(H_n, k):
return H_n[:k+1]
- 参数H_n为一个numpy的poly1d多项式对象,包含了所有的Hermite多项式的所有项;
- 参数k代表我们要保留的多项式的最高项次数;
- 返回值为一个numpy的多项式对象,包含了保留的Hermite多项式的所有项。
3. 示例说明
如我们还是要保留阶数为20的Hermite多项式的前7项,代码如下:
n = 20
c = np.zeros(n+1)
c[0] = 1
H_n = np.poly1d(c)
for i in range(1, n+1):
c[i] = 2 * (H_n[i-1])
if i>1:
c[i] -= 2 * (i-1) * c[i-2]
H_n = np.poly1d(c)
Hermite_truncate2(H_n, 7)
得到的结果为:
poly1d([ 1., 0., -2., 0., 4., 0., -8., 0., 16.])
结果与手动实现的方法一致。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Python中删除Hermite多项式的小拖尾系数 - Python技术站