2

如果我听起来很愚蠢或含糊不清,我很抱歉,但我有一个关于 Bessel 函数的代码的问题。我的任务是使用前五个零阶贝塞尔函数来表示一个简单的函数(准确地说是 f(x)=1-x),其零被缩放为 1。另外我必须找到他们的系数。

首先,我知道在寻求帮助之前我必须证明我已经解决了这个问题,但我真的不知道从哪里开始。我知道一阶贝塞尔函数,我知道二阶贝塞尔函数,但我不知道什么是 0 阶贝塞尔函数。另外,我什至不知道你可以用贝塞尔函数来表示函数。我知道您可以使用泰勒展开式或傅里叶表示来近似函数,但我不知道如何使用贝塞尔函数来做到这一点。我搜索了这个网站,似乎是我的一个同学,相当粗鲁,只是复制并粘贴了我们的作业,因此该线程被关闭了。

因此,如果某个圣人至少可以在这里为我指明正确的方向,那就太好了。看到这是一个简单的函数,我知道 Matlab 有一个 Bessel 函数的东西,所以编码它不会太难。我只是不知道如何使用求解微分方程的方法来表示另一个函数。哦,系数呢?什么系数?请原谅我的无知和帮助!

4

1 回答 1

0

好吧!经过大量的调查和工作,我已经确定了这个问题的答案。现在,这实际上是我第一次在这个网站上回答问题,所以再一次,请原谅我可能犯的任何虚假。

首先,看来我对 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 函数代码来自这个地方

我希望这会有所帮助,如果我犯了任何严重的错误,请告诉我,但老实说,我无法进一步解释那里的方程式,因为我只是从教科书中得到它们。

最好的祝愿!

于 2012-10-31T08:36:26.173 回答