贝塞尔函数来源于贝塞尔方程:
第一二类贝塞尔函数分别是该方程的两个线性无关解、
贝塞尔方程如下:
n阶第一类贝塞尔函数:(积分表达式和级数表达式)
第一类Hankel函数:
第二类Hankel函数:
可以看出,Hankel函数是贝塞尔函数特定的线性组合。
贝塞尔方程的一般解是上述任意两个的线性组合。
对于整数阶的贝塞尔函数,可以用FFT(快速傅里叶变换)来计算。
MATLAB包含有贝塞尔函数的表达,可以直接调用函数:
%J = besselj(nu,z);
第一个参数是贝塞尔函数的阶数,第二个参数是自变量
绘制前五阶的贝塞尔函数如下:
clear
M = 5;
N = 1001;%每一条曲线上的点数
Xmin = 0;
Xmax = 15;
x = linspace(Xmin,Xmax,N);
y = zeros(N,M);%y的每一列表示一阶贝塞尔函数
for m = 0:M-1
y(:,m+1) = besselj(m,x);%贝塞尔函数有0阶
end
plot(x,y);
[ymax pos] = max(y);
for i = 1:M
text(x(pos(i)+1),ymax(i)-0.05,['J_' num2str(i-1) '(x)']);
end
grid on
xlabel('x')
ylabel('J_n(x)')
结果:
需要注意,对于多行多列的矩阵y,max(y)返回的结果包括最大值和最大值的位置两部分。
贝塞尔函数的图形展现出震荡的特性,有无穷个零点。
阶数越大,对应的最大值约小,同时第一次达到最大值的时间(x值)越大。
同时,从(0,0)到第一个最大值的过程是一个渐渐变化的过程,阶数越大,变到最大值的过程越缓慢。
来源《高等光学仿真——光波导、激光》