2

ばかげていたり曖昧に聞こえたら申し訳ありませんが、ベッセル関数に関するコードについて質問があります。私は、ゼロが 1 にスケーリングされる最初の 5 つの 0 次ベッセル関数を使用して、単純な関数 (正確には f(x)=1-x) を表す宿題を課されました。さらに、それらの係数を見つける必要があります。

まず、助けを求める前に、この問題に取り組んだことを示さなければならないことはわかっていますが、どこから始めればよいかわかりません。一次ベッセル関数と二次ベッセル関数については知っていますが、0 次ベッセル関数が何であるかはわかりません。さらに、ベッセル関数で関数を表現できることさえ知りませんでした。テイラー展開またはフーリエ表現を使用して関数を近似できることは知っていますが、ベッセル関数でそれを行う方法がわかりません。このウェブサイトを検索したところ、私の同級生のようで、失礼なことに、私たちの課題をコピーして貼り付けただけで、そのスレッドは閉じられました.

ですから、聖人がここで少なくとも私を正しい方向に向けることができれば、それは素晴らしいことです. これは単純な関数であり、Matlab にはベッセル関数があることを知っているので、コーディングはそれほど難しくありません。微分方程式を解く方法を使用して別の関数を表す方法がわかりません。ああ、そして係数?係数は?私の無知を許して、助けてください!

4

1 に答える 1

0

大丈夫!多くの調査と作業を通じて、私はこの問題に対する答えを決定しました。さて、私がこのサイトで質問に答えるのは実はこれが初めてです。

まず、ベッセル・フーリエ級数については正しかったようです。関数近似を得るためにベッセル級数だけを使用することは不可能です。ベッセル関数から始まり、x をスケーリングし、フーリエ変換を含む多くのトリックを実行する長いプロセスを通じて、関数のベッセル-フーリエ表現が次の形式で与えられることを確認できます。

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)

しかし、私は脱線します。私の課題では、最初の 5 つの値を個別にグラフ化し、それらを合計して、結果を実際の関数と比較することも求められていたので、それが私が行ったことです。したがって、ここにコードがあります。

%%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);

そして、そこに行きます。ストルーベ関数コードはこの場所からのものでした

これがお役に立てば幸いです。重大な間違いを犯した場合は教えてください。正直なところ、教科書から得たばかりなので、そこまでの方程式をこれ以上説明することはできません.

幸運をお祈りしています!

于 2012-10-31T08:36:26.173 に答える