如果我听起来很愚蠢或模糊,我很抱歉,但我对贝塞尔函数的代码有疑问。我的任务是使用前五个0阶贝塞尔函数表示一个简单函数(f(x)= 1-x,确切地说),其中零点被缩放为一个。另外,我必须找到他们的系数。
首先,我知道我必须证明我在寻求帮助之前已经解决了这个问题,但我真的不知道从哪里开始。我知道一阶Bessel函数,我知道二阶Bessel函数,但我不知道0阶Bessel函数是什么。另外,我甚至不知道你可以代表贝塞尔函数的函数。我知道你可以使用泰勒展开或傅立叶表示近似函数,但我不知道如何用贝塞尔函数做到这一点。我搜索了这个网站,它似乎是我的一个同学,相当粗鲁,只是复制和粘贴我们的任务,因此该线程被关闭。
所以如果一个圣洁的人至少能指出我在这里正确的方向,那将是美好的。看来这是一个简单的函数,我知道Matlab有一个Bessel函数,所以编码它不会太难。我只是不知道如何使用求解微分方程的方法来表示另一个函数。哦,和系数?什么系数?请原谅我的无知和帮助!
答案 0 :(得分:0)
好的!通过大量的调查和工作,我已经确定了这个问题的答案。现在,这实际上是我第一次在这个网站上回答问题,所以请再次原谅我可能犯下的任何虚假人员。
首先,看来我对Bessel-Fourier系列是正确的。仅使用贝塞尔系列来获得函数近似是不可能的。通过从贝塞尔函数开始并缩放x并执行包含傅立叶变换的一系列技巧的漫长过程,我们得到可以确定函数的贝塞尔 - 傅立叶表示以
的形式给出f(x)= A1 * J_0(z1x)+ A2 * J_0(z2x)+ ....
其中z1是一阶贝塞尔函数的零,J_0是第0个一阶贝塞尔函数,A1是傅里叶 - 贝塞尔系列的系数。只需绘制贝塞尔函数即可轻松获得零,但系数是棘手的部分。它们由等式
给出An =(2 /(J_1(zn)^ 2))* integral(x * f(x)* J_0(zn * x),0,1)
毋庸置疑,其中最困难的部分是获得贝塞尔函数的积分。但是通过使用此lovely list,可以使过程变得简单。凌乱......但很简单。我还应该注意,积分是从0到1,因为这是我的任务的性质。如果问题是将其从0缩放到2,那么等式将是
An =(2 /(2 ^ 2)*(J_1(zn)^ 2))* integral(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);
然后我们走了。构造函数代码来自此place
我希望这有帮助,如果我犯了任何令人震惊的错误,请告诉我,但说实话,我不能再解释那些方程式,因为我刚从教科书中得到它们。
祝福!