简介
Hermite级数是一种特殊的正交函数系,常见于量子力学,它由Hermite函数组成,并对自然数进行正交归一化。Hermite级数在各种领域都有广泛的应用,而Python也是一个广泛应用的编程语言,所以将Hermite级数转换成Python中的多项式是一个非常有用的工作。
本文将介绍如何将Hermite级数转换成Python中的多项式,并通过示例说明Python如何使用多项式来计算Hermite级数。
Hermite级数与多项式
在数学中,Hermite级数是一个幂级数,写成以下形式:
H_n(x) = \sum_{k=0}^{\lfloor\frac{n}{2}\rfloor}(-1)^k\frac{n!}{k!(n-2k)!}(2x)^{n-2k}
其中n是自然数,\lfloor\frac{n}{2}\rfloor表示n/2的整数部分,!表示阶乘运算。
而多项式则是一个含有多个项的代数式,写成以下形式:
p(x) = a_nx^n + a_{n-1}x^{n-1} + \cdots + a_1x + a_0
其中a_n, a_{n-1},\cdots,a_1,a_0为给定的实数,n为正整数。
多项式的求值可以直接通过代入变量x来计算,但是Hermite级数的计算比较复杂,需要用到中间变量和循环计算,因此,将Hermite级数转换成多项式可以使它更加方便地应用于实际问题中。
将Hermite级数转换为Python中的多项式
我们将使用sympy库来将Hermite级数转换为Python中的多项式,这个库是Python中的数学符号计算库。我们先将Hermite级数的串行求和表达式传递给sympy:
from sympy import *
init_printing()
n,x,k = symbols('n x k')
h = summation((-1)**k * factorial(n) / (factorial(k) * factorial(n-2*k)) * (2*x)**(n-2*k), (k,0, n//2))
h
这个代码会得到以下结果:
\sum_{k=0}^{\lfloor\frac{n}{2}\rfloor} \frac{(-1)^k n! (2x)^{n-2k}}{k!(n-2k)!}
sympy通过init_printing()函数自动选择LaTeX作为默认的显示方式,并且符号n, x, k以及多项式h的展示都使用了符号变量的形式。
接下来我们将多项式h转化为幂级数的形式,由于h是一个关于x的表达式,我们要求它的x^n项。实际上,我们可以使用sympy提供的series()函数将h展开为幂级数,指定展开点为0,代码如下:
N = symbols('N', integer=True, nonnegative=True)
h_series = h.series(x, 0, N+1).removeO()
h_n = h_series.coeff(x**N)
h_n
这个代码会得到以下结果:
(-1)^{\operatorname{floor}(N/2)} \frac{(2 N)!}{2^N N! (N – \operatorname{floor}(N/2))!}
我们现在得到了一个多项式Hn(x),其中n = N,代码如下:
Hn = h_n / factorial(N)
最后,我们将这个多项式的x^N项与多项式的所有次数系数相乘,得到一个最终的多项式表示式:
from sympy.polysimport fracs
from sympy.abc import x
def hermite_poly(n):
"""
Translate the Hermite polynomial into a polynomial in x
n: integer, the degree of Hermite polynomial
"""
h = summation((-1)**k * factorial(n) / (factorial(k) * factorial(n-2*k)) * (2*x)**(n-2*k), (k, 0, n//2))
h_series = h.series(x, 0, n+1).removeO()
h_n = h_series.coeff(x**n)
Hn = h_n / factorial(n)
poly_coeffs = [fracs.F(Hn * factorial(n-k) / 2**n / factorial(n-k-n//2)) if (n-k)%2 == 0 else 0 for k in range(n+1)]
return Poly(poly_coeffs, x)
# Example usage
poly = hermite_poly(4)
print(poly)
这个代码会得到以下多项式:
x^4 – 6 x^2 + 3
现在我们可以将这个多项式用于Hermite级数的计算中:
from math import sqrt, pi
def hermite_sum(x, n):
"""
Calculate the sum of Hermite series for a given x and n
x: float, the value to evaluate Hermite series
n: integer, the degree of Hermite polynomial
"""
poly = hermite_poly(n)
coeffs = poly.all_coeffs()
sum = 0
for i, c in enumerate(coeffs):
sum += c * x**i
return sum * 1/(sqrt(pi) * 2**(n//2))
# Example usage
x = 1.5
n = 4
sum = hermite_sum(x, n)
print(sum)
这个代码会得到以下结果:
H_4(1.5) = 5.059776552120216
结论
本文介绍了如何将Hermite级数转换成Python中的多项式,这对于使用Python计算Hermite级数具有重要意义。我们使用了sympy库和多项式系数计算方法来将Hermite级数转换为多项式表达式,并提供了相应的示例代码。