Python调用贝塞尔函数

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=0m!Γ(m+α+1)(1)m(2x)2m+α

α \alpha α为整数,则满足 J − n ( x ) = ( − 1 ) n J n ( x ) J_{-n}(x)=(-1)^nJ_n(x) Jn(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)eiαπHα(2)(x)=isin(απ)Jα(x)eiαπ

即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)]=xnJn11(x)dxd[xnJn(x)]=xnJn11(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) Jv(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)=0k!Γ(ak+b)xk

其中,a,b,x均大等于0。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217261.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:58
下一篇 2026年3月18日 上午9:59


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号