좋아요! 많은 조사와 작업을 통해이 문제에 대한 해답을 결정했습니다. 이제,이 사이트에 대한 질문에 처음으로 답변 한 것은 이번이 처음인데, 다시 한 번 제가 저지를 수있는 인색한 사람은 용서해주십시오.
우선, Bessel-Fourier 시리즈에 대해 필자가 맞았다. Bessel 시리즈를 사용하여 함수 근사값을 구하는 것은 불가능합니다. Bessel 함수로 시작하여 x를 스케일링하고 푸리에 변환을 포함하는 모든 트릭을 수행하는 긴 프로세스를 통해 함수의 베셀 - 푸리에 표현이
f 형식으로 제공되는지 확인할 수 있습니다 (z1x) + A2 * J_0 (z2x) + ...
여기서, z1은 1 차 베셀 함수의 0, J_0는 0 차 1 차 베셀 함수, A1 푸리에 - 베셀 (Fourier-Bessel) 계열의 계수입니다. 0은 베셀 함수를 플로팅하면 쉽게 얻을 수 있지만 계수는 까다로운 부분입니다. 이들은 식
= (2/(J_1 (아연)^2)) * 적분 (엑스 *의 F (X) * J_0 (아연 * X), 0, 1)
없이 주어진다 말하자면,이 어려운 부분은 Bessel 함수의 통합을 얻는 것입니다. 그러나이 lovely list을 사용하면 프로세스를 단순하게 만들 수 있습니다. 지저분한 ....하지만 간단합니다. 나는 또한 그것이 내 과제의 성격이기 때문에 0에서 1까지의 적분임을 주목해야한다. 0에서 2로 크기를 조정하는 것이 문제라면 방정식은
입니다. An = (2/(2^2) * (J_1 (zn)^2)) * integral (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);
우리가 간다.struve 함수 코드는 다음과 같습니다 place
나는 이것이 도움이 되었기를 바랍니다. 그리고 내가 중대한 오류를 범하면, 말해주세요. 솔직히 말해서 방금 방금 방금 방정식을 설명 할 수는 없습니다. 교과서에서.
나는 그것이 http://math.stackexchange.com/에 더 많이 속한다고 생각한다. – Synxis
글쎄, 나는 거기에 글을 올릴 예정 이었지만, 이것이 코딩상의 문제라고 생각하면서, 글을 올리는 것이 가장 좋을 것이라고 생각했다. –
"0 차 베셀 함수"로 'J_0'을 의미합니까? 아니면 "0 번째 종류의 베셀 함수"입니까? – Synxis