Juni /Juli 2015
Approximation von BESSEL-Funktionen durch FOURIER-Reihen
Univ.-Prof. Dr.-Ing. habil. Josef BETTEN
RWTH Aachen University
Mathematical Models in Materials Science and Continuum Mechanics
Augustinerbach 4-20
D-52056 A a c h e n , Germany
<betten@mmw.ewth-aachen.de>
Mit Hilfe der Maplesoftware können Bessel-Funktionen bequem dargestellt werden. So sind Bessel-Funktionen erster Art für gerade und ungerade Ordnung n folgendermaßen definiert.
restart:
J[2*n](x):=(1/Pi)*Int(cos(x*sin(t))*cos(2*n*t),t=0..Pi)= BesselJ(2*n,x); # n = 0,1,2,...
J[2*n+1](x):=(1/Pi)*Int(sin(x+sin(t))*sin((2*n+1)*t),t=0..Pi)= BesselJ(2*n+1,x); # n = 0,1,2,...
FOURIER-Reihen sind für den hier betrachteten Bereich [0..8*Pi] folgendermaßen definiert.
FOURIER_series(x):= a[0]/2+sum(a[k]*cos(k*x)+b[k]*sin(k*x),k=1..infinity);
a[k]:=(1/4/Pi)*Int(f(x)*cos(k*x),x=0..8*Pi);
a[0]:=simplify(subs(k=0,%));
b[k]:=(1/4/Pi)*Int(f(x)*sin(k*x),x=0..8*Pi);
# BESSEL-Funktion erster Art der Ordnung eins als Beispiel
J[1](x):=BesselJ(1,x);
F(x):=J[1](x);
A[0]:=simplify(value(subs(f(x)=F(x),a[0])));
A[0]:=evalf(%);
A[k]:=simplify(value(subs(f(x)=F(x),a[k])));
for i in [seq(i,i=1..5)] do A[i]:=evalf(subs(k=i,A[k])) od;
B[k]:=simplify(value(subs(f(x)=F(x),b[k])));
for i in [seq(i,i=1..5)] do B[i]:=evalf(subs(k=i,B[k])) od;
Y(x):=A[0]/2+evalf(sum(A[k]*cos(k*x)+B[k]*sin(k*x),k=1..5));
# graphische Darstellung der BESSEL-Funktion und ihre FOURIER-Approximation:
alias(th=thickness,co=color):
p[1]:=plot(J[1](x),x=0..8*Pi,th=3,co=black,axes=boxed):
p[2]:=plot(Y(x),x=0..8*Pi,th=2,co=black, title="BesselJ(1,x) und Fourier-Reihe k = 5"):
p[3]:=plot(0,x=0..8*Pi,linestyle=4,co=black):
plots[display](seq(p[k],k=1..3));
# L-zwei Fehlernorm:
L[2]:=sqrt((1/8/Pi)*Int((F(xi)-y(xi))^2,xi=0..8*Pi));
L[2][k=5]:=evalf(sqrt((1/8/Pi)*int((F(x)-Y(x))^2,x=0..8*Pi)));
# Glättung (smoothing):
g(k,N):=N*sin(Pi*k/N)/Pi/k; # smoothing factor
G(x,n,N):=Alpha[0]/2+sum(g(kappa,Nu)*(A[kappa]*cos(kappa*x)+ B[kappa]*sin(kappa*x)),kappa=1..n); # smoothing function
# Als Beispiel werde die Reihe Y(x) mit n = 5 und N = n + 1 gewählt:
g(k,6):=subs(N=6,g(k,N));
G(x,n=5,N=6):=evalf(subs({Alpha[0]=A[0],n=5,Nu=6,kappa=k, g(kappa,Nu)=g(k,6),A[kappa]=A[k],B[kappa]=B[k]},G(x,n,N)));
p[2]:=plot(G(x,n=5,N=6),x=0..8*Pi,th=2,co=black, title="BESSELJ(1,x) # G(x,n=5,N=6), smoothing"):
L[2][n=5,N=6]:=evalf(sqrt((1/8/Pi)*int((F(x)-G(x,n=5,N=6))^2,x=0..8*Pi)));
# L-zwei Fehlernorm zwischen Y(x) und seiner Glättung G(x,n=5,N=5):
L[2][Y,G]:=evalf(sqrt((1/8/Pi)*int((Y(x)-G(x,n=5,N=6))^2,x=0..8*Pi)));
# Dieses Ergebnis zeigt, dass sich Y nur geringfügig von ihrer Glättung G unterscheidet, so dass eine Glättung überflüssig ist. Somit stimmen auch L[2][k=5] und L[2][n=5,N=6] nahezu überein.
# Neben der oben betrachteten BESSEL-Funktion J(1,x) sind weitere BESSEL-Funtionen erster Art der Ordnung n bekannt:
J(n,x):=BesselJ(n,x);
for i in [0,1,2] do J(i,x):=subs(n=i,J(n,x)) od;
p[0]:=plot(J(0,x),x=0..8*Pi,th=1,co=black,axes=boxed):
p[1]:=plot(J(1,x),x=0..8*Pi,th=2,co=black):
p[2]:=plot(J(2,x),x=0..8*Pi,th=3,co=black):
p[4]:=plots[textplot]({[12.5,0.85,`BESSEL-Funktionen erster Art`],[2,0.7,`J[0]`],[3.5,0.6,`J[1]`],[4.5,0.5,`J[2]`]}):
plots[display](seq(p[k],k=0..4));
# entsprechend findet man weitere BESSEL-Funktionen erster Art:
for i in [3,5,8] do J[i](x):=subs(n=i,BesselJ(n,x)) od;
p[1]:=plot(J[3](x),x=0..8*Pi,th=1,axes=boxed,th=3,co=black):
p[2]:=plot(J[5](x),x=0..8*Pi,-0.4..0.8,th=2,co=black):
p[3]:=plot(J[8](x),x=0..8*Pi,th=3,co=black):
p[4]:=plot(0,x=0..8*Pi,linestyle=4,th=2,co=black):
p[5]:=plots[textplot]({[12.5,0.65,`BESSEL-Funktionen erster Art`],[4.5,0.48,`J[3]`],[7,0.42,`J[5]`],[10,0.37,`J[8]`]}):
plots[display](seq(p[k],k=1..5));
J[32](x):=BesselJ(32,x);
p[1]:=plot(J[32](x),x=0..8*Pi,axes=boxed,th=4,co=black):
p[2]:=plot(0,x=0..8*Pi,linestyle=4,th=3,co=black,title="BesselJ(32,x)"):
plots[display](seq(p[k],k=1..2));
# Die Ableitungen der Bessel-Funktionen ergeben sich zu:
`J'`(n,x):=Diff(J(n,x),x)=diff(J(n,x),x);
for i in [0,1,2,3] do `J'`(i,x):=subs(n=i,-J(n+1,x)+n*J(n,x)/x) od;
p[3]:=plot({seq((-BesselJ(n+1,x)+n*BesselJ(n,x)/x),n=0..3)}, x=0..8*Pi,axes=boxed,th=3,co=black):
p[4]:=plot(0,x=0..8*Pi,linestyle=4,th=2,co=black, title="Ableitungen J'(n,x) für n = [0,1,2,3]"):
plots[display](seq(p[k],k=3..4));
Andere BESSEL-Funktionen erster Art lassen sich ebenso nach obigem Muster durch FOURIER-Reihen approximieren. Das gilt auch für BESSEL-Funktionen zweiter Art oder für FRENELsche Integrale, die beispielsweise bei Problemen der Wellenausbreitung auftreten.