Хорошо! В результате долгих исследований и работы я нашел ответ на эту проблему. На самом деле, это первый раз, когда я отвечаю на вопрос на этом сайте, так что еще раз, пожалуйста, простите мне любую оплошность, которую я могу совершить.
Во-первых, кажется, что я был прав насчет ряда Бесселя-Фурье. Невозможно использовать только ряд Бесселя, чтобы получить аппроксимацию функции. Путем длительного процесса, начиная с функции Бесселя и масштабируя 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)
Но я отвлекся. Итак, поскольку в моем задании я также нарисовал первые пять значений по отдельности, а затем сложил их вместе и сравнил результаты с фактической функцией, это то, что я сделал. Итак, вот код.
%%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 взят из этого места.
Я надеюсь, что это помогло, и если я сделал какие-либо вопиющие ошибки, пожалуйста, сообщите мне, но, честно говоря, я не могу дальше объяснять уравнения, так как я только что взял их из учебника.
С наилучшими пожеланиями!
person
Additional Pylons
schedule
31.10.2012
J_0
? Или функция Бесселя 0-го рода? - person Synxis   schedule 28.10.2012