Python调用贝塞尔函数
scipy.special中封装了一些特殊函数,Bessel函数亦在其中,Bessel函数为Bessel方程的解。
scipy.special中封装了一些特殊函数,Bessel函数亦在其中。
定义
Bessel函数为Bessel方程的解,Bessel方程为
x 2 d 2 y d x 2 + x d y d x + ( x 2 − α 2 ) y = 0 x^2\frac{\text d^2y}{\text dx^2}+x\frac{\text dy}{\text dx}+(x^2-\alpha^2)y=0 x2dx2d2y+xdxdy+(x2−α2)y=0
随着 α \alpha α的变化,Bessel函数有着不同的类别。当 α \alpha α非负时,可得到第一类Bessel函数的幂级数展开式,表示为
J α ( x ) = ∑ m = 0 ∞ ( − 1 ) m m ! Γ ( m + α + 1 ) ( x 2 ) 2 m + α J_{\alpha}(x)=\sum^\infty_{m=0}\frac{(-1)^m}{m!\Gamma(m+\alpha+1)}(\frac{x}{2})^{2m+\alpha} Jα(x)=m=0∑∞m!Γ(m+α+1)(−1)m(2x)2m+α
若 α \alpha α为整数,则满足 J − n ( x ) = ( − 1 ) n J n ( x ) J_{-n}(x)=(-1)^nJ_n(x) J−n(x)=(−1)nJn(x)。
第二类Bessel函数又称为诺伊曼(Neumann)函数
Y α ( x ) = J α ( x ) cos ( α π ) − J − α ( x ) sin ( α π ) Y_\alpha(x)=\frac{J_\alpha(x)\cos(\alpha\pi)-J_{-\alpha}(x)}{\sin(\alpha\pi)} Yα(x)=sin(απ)Jα(x)cos(απ)−J−α(x)
- 第三类
第三类Bessel函数又称汉克尔(Hankel)函数,表示为
H α ( 1 ) ( x ) = J α ( x ) + i Y α ( x ) H α ( 2 ) ( x ) = J α ( x ) − i Y α ( x ) \begin{aligned} H_\alpha^{(1)}(x)=J_\alpha(x)+iY_\alpha(x)\\ H_\alpha^{(2)}(x)=J_\alpha(x)-iY_\alpha(x) \end{aligned} Hα(1)(x)=Jα(x)+iYα(x)Hα(2)(x)=Jα(x)−iYα(x)
可得
H α ( 1 ) ( x ) = J − α ( x ) − e − i α π i sin ( α π ) H α ( 2 ) ( x ) = J α ( x ) − e − i α π − i sin ( α π ) \begin{aligned} H_\alpha^{(1)}(x)=\frac{J_{-\alpha}(x)-e^{-i\alpha\pi}}{i\sin(\alpha\pi)}\\ H_\alpha^{(2)}(x)=\frac{J_{\alpha}(x)-e^{-i\alpha\pi}}{-i\sin(\alpha\pi)}\\ \end{aligned} Hα(1)(x)=isin(απ)J−α(x)−e−iαπHα(2)(x)=−isin(απ)Jα(x)−e−iαπ
即Hankel函数可表示为第一类或第二类Bessel函数的组合。
- 递推公式
d d x [ x n J n ( x ) ] = x n J n − 11 ( x ) d d x [ x n J n ( x ) ] = x n J n − 11 ( x ) \begin{aligned} \frac{\text d}{\text dx}[x^nJ_n(x)]=x^nJ_{n-11}(x)\\ \frac{\text d}{\text dx}[x^nJ_n(x)]=x^nJ_{n-11}(x)\\ \end{aligned} dxd[xnJn(x)]=xnJn−11(x)dxd[xnJn(x)]=xnJn−11(x)
封装
在scipy.special
中,封装了如下Bessel函数。
整数阶 | 实数阶 | 指数标度 | |
---|---|---|---|
一类 | jv(v, z) | jve(v,z) | |
修正 | iv(v, z) | ive(v, z) | |
二类 | yn(n, x) | yv(v, z) | yve(v, z) |
修正 | kn(n, x) | nkv(v, z) | kve(v, z) |
三类1 | hankel1(v, z) | hankel1e(v, z) | |
三类2 | hankel2(v, z) | hankel2e(v, z) |
这些不同类型的Bessel函数,具有相似的输入变量,其中v
均表示阶数,z
均表示自变量。以jv(v,z)
为例,作为第一类实数阶Bessel函数,其表达式为
J v ( z ) = { exp ( v π ı ) I v ( − ı z ) ℑ ( z ) > 0 exp ( − v π ı ) I v ( ı z ) ℑ ( z ) < 0 J_v(z)=\left\{\begin{aligned} \exp(v\pi\imath)I_v(-\imath z)&\Im(z)>0\\ \exp(-v\pi\imath)I_v(\imath z)&\Im(z)<0 \end{aligned}\right. Jv(z)={exp(vπ)Iv(−z)exp(−vπ)Iv(z)ℑ(z)>0ℑ(z)<0
且
J − v ( z ) = J v ( z ) cos ( π v ) − Y v ( z ) sin ( π v ) J_{-v}(z)=J_v(z)\cos(\pi v)-Y_v(z)\sin(\pi v) J−v(z)=Jv(z)cos(πv)−Yv(z)sin(πv)
其函数图像为
绘图代码如下
import numpy as np
from scipy.special import jv
import matplotlib.pyplot as plt
v,z = np.indices([50,100])
ax = plt.subplot(projection='3d')
j = jv(v,z)
ax.plot_surface(v,z,j)
此外,还有wright_bessel(a,b,x)
为广义贝塞尔函数,表达式为
ϕ ( a , b , x ) = ∑ 0 ∞ x k k ! Γ ( a k + b ) \phi(a,b,x)=\sum^\infty_0\frac{x^k}{k!\Gamma(ak+b)} ϕ(a,b,x)=0∑∞k!Γ(ak+b)xk
其中,a,b,x
均大等于0。
更多推荐
所有评论(0)