好吧!经过大量的调查和工作,我已经确定了这个问题的答案。现在,这实际上是我第一次在这个网站上回答问题,所以再一次,请原谅我可能犯的任何虚假。
首先,看来我对 Bessel-Fourier 级数的看法是正确的。仅使用贝塞尔级数来获得函数逼近是不可能的。通过从 Bessel 函数开始并缩放 x 并执行包括傅立叶变换在内的一系列技巧的漫长过程,我们可以确定函数的 Bessel-Fourier 表示形式为
f(x) = A1*J_0(z1x) + A2*J_0(z2x) + ....
其中 z1 是一阶贝塞尔函数的零点,J_0 是第 0 个一阶贝塞尔函数,A1 是傅里叶-贝塞尔级数的系数。只需绘制贝塞尔函数即可轻松获得零点,但系数是棘手的部分。它们由等式给出
An = (2/(J_1(zn)^2))*积分(x*f(x)*J_0(zn*x), 0, 1)
不用说,其中困难的部分是获得贝塞尔函数的积分。但是通过使用这个可爱的列表,这个过程可以变得简单。凌乱....但很简单。我还应该注意积分是从 0 到 1,因为这是我的任务的性质。如果问题是将其从 0 缩放到 2,那么等式将是
An = (2/(2^2)*(J_1(zn)^2))*积分(x*f(x)*J_0(zn*x), 0, 2)
但我离题了。因此,由于我的作业还让我单独绘制前五个值,然后将它们加在一起并将结果与实际函数进行比较,这就是我所做的。因此这里是代码。
%%Plotting the Bessel Functions
a=[2.40483, 5.52008, 8.65373, 11.7915, 14.9309]; %a matrix with the first 5 zeros for a first order Bessle Function
A=zeros(5,1);
F=zeros(1, 100);
X=linspace(0,1);
for i=1:1:5
A(i,1)= (2*(besselj(1,a(i))*struve(0,a(i))-besselj(0,a(i))*struve(1,a(i))))/((a(i)^2)*(besselj(1,a(i)))^2)*(3.14/2);
%the equation to determine the coefficients of the Bessel-Fourier series
end
for i=1:1:5
figure(i);
plot(X, A(i,1)*besselj(0, (a(i)*X))); %plot the first 5 Bessel functions
end
for i=1:1:5
F=F+A(i,1)*besselj(0, (a(i)*X)); %adding all the Bessel functions together
end
figure(6);
plot(X, F); %plotting the Bessel functions and 1-x
hold on
plot(X, 1-X);
%%Struve Function
function f=struve(v,x,n)
% Calculates the Struve Function
%
% struve(v,x)
% struve(v,x,n)
%
% H_v(x) is the struve function and n is the length of
% the series calculation (n=100 if unspecified)
%
% from: Abramowitz and Stegun: Handbook of Mathematical Functions
% http://www.math.sfu.ca/~cbm/aands/page_496.htm
if nargin<3
n=100;
end
k=0:n;
x=x(:)';
k=k(:);
xx=repmat(x,length(k),1);
kk=repmat(k,1,length(x));
TOP=(-1).^kk;
BOT=gamma(kk+1.5).*gamma(kk+v+1.5);
RIGHT=(xx./2).^(2.*kk+v+1);
FULL=TOP./BOT.*RIGHT;
f=sum(FULL);
我们开始了。struve 函数代码来自这个地方
我希望这会有所帮助,如果我犯了任何严重的错误,请告诉我,但老实说,我无法进一步解释那里的方程式,因为我只是从教科书中得到它们。
最好的祝愿!