我很抱歉,如果我听起来很愚蠢或含糊,但是我对贝塞尔功能的代码有疑问。我的任务是代表一个简单函数的作业,使用前五个0阶bessel函数(f(x)= 1-x)将其缩放到一个。另外,我必须找到它们的系数。
首先,我知道我必须证明我在寻求帮助之前就解决了这个问题,但我真的不知道从哪里开始。我知道一阶Bessel功能,并且知道二阶Bessel功能,但是我不知道0阶Bessel函数是什么。另外,我什至不知道您可以用Bessel功能表示功能。我知道您可以使用泰勒的扩展或傅立叶表示来近似函数,但是我不知道如何使用贝塞尔功能来做到这一点。我搜索了这个网站,这似乎是我的同学,很粗鲁,只是复制并粘贴了我们的作业,因此该线程已关闭。
因此,如果某个圣人至少可以将我指向正确的方向,那就太好了。看到这是一个简单的功能,我知道Matlab具有Bessel功能的内容,因此编码它不会太难了。我只是不知道如何使用求解微分方程的方法来表示另一个函数。哦,系数?什么系数?原谅我的无知和帮助!
好吧!通过大量的调查和工作,我确定了这个问题的答案。现在,这实际上是我第一次在此网站上回答一个问题,所以请再次原谅我可能会承诺的任何人造pax。
首先,看来我对Bessel-Fourier系列是正确的。不可能仅使用贝塞尔系列来获得函数近似。通过从贝塞尔函数开始的冗长过程,并缩放x并执行包括傅立叶变换的大量技巧,我们可以确定一个函数的贝塞尔 - 弗夸夸脱表示形式以
的形式给出f(x)= a1*j_0(z1x) a2*j_0(z2x) ....
其中z1是一阶贝塞尔函数的零,j_0是0级贝塞尔函数,而a1是傅立叶贝塞尔系列的系数。仅通过绘制贝塞尔函数来轻松获取零,但是系数是棘手的部分。它们由方程式
给出an =(2/(j_1(zn)^2))
不必说,这很难获得贝塞尔功能的组成部分。但是,通过使用此可爱的列表,可以简单地使过程变得简单。凌乱....但很简单。我还应该注意,积分是从0到1,因为那是我任务的本质。如果问题是将其从0缩放到2,则方程将为
an =(2/(2^2)*(j_1(zn)^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功能代码来自此地点
我希望这会有所帮助,如果我犯了任何严重的错误,请告诉我,但是老实说,当我刚从教科书中得到它们时,我无法再解释那里的方程式。
。最好的祝福!