Текст подпрограммы и версий
sf74r_p.zip
Тексты тестовых примеров
tsf74r_p.zip

Подпрограмма:  SF74R (модуль SF74R_p)

Назначение

Вычисление модифицированных функций Бесселя первого рода   In (x) для последовательности целых индексов.

Математическое описание

SF74R вычисляет значения модифицированных функций Бесселя первого рода  Ip (x) для действительного аргумента  x и последовательности целых индексов  p от  n до 0. Расчеты осуществляются по рекуррентной формуле:

     Ip-1(x) = (2p/x)*Ip(x) + Ip+1(x) . 

Ошибка вычисления  Ip (x) не возрастает в pекуppентном процессе, применяемом при убывании  p.

Вычисления начинаются с задания значений  Ik + 1 = 0,   Ik = 1 и числа  k.

Величина  k выбирается в зависимости от значений  x и  n. Затем последовательно вычисляются значения функций для p = k - 1, k - 2, ..., 0. Для достижения заданной точности  eps рекурсия повторяется с большим  k до тех пор, пока разность между pезультатами двух последних рекурсий не станет меньше  eps.

1.  Абрамовиц М., Стиган И. Справочник по специальным функциям - М. Наука, 1979.
2.  Goldstein M., Thaler R.M. Recurrence techniques for the calculation of Bessel functions. - M TAC, 1959, V. 13, N 66.

Использование

procedure SF74R(X :Real; N1 :Integer; EPS :Real; var S :Boolean;
                var T :Array of Real; var T1 :Array of Real);

Параметры

X - заданное значение аргумента  x (тип: вещественный);
N1 - максимальный порядок последовательности функций   Ip (x), увеличенный на единицу (тип: целый);
EPS - относительная точность вычисления последней функции последовательности  In (x) (тип: вещественный);
S - логическая переменная, задающая режим работы подпрограммы; при этом:
если  S = TRUE, то вычисляются функции  Ip(x),
если  S = FALSE, то вычисляются функции e - x Ip(x);
T - вещественный вектоp длины N1 вычисленных значений функций Бесселя порядков от 0 до  n;   Ij (x) = T (j + 1),   j = 0, ..., N  (N = N1 - 1);
T1 - вещественный вектоp длины N1, используемый как рабочий.

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию

  Для значений  x, при которых  e - x меньше положительного наименьшего представимого в машине числа, значение S полагается равным FALSE

Пример использования

Unit tsf74r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF74R_p;

function tsf74r: String;

implementation

function tsf74r: String;
var
_i :Integer;
S :Boolean;
T :Array [0..20] of Real;
T1 :Array [0..20] of Real;
const
X :Real = 5.0;
EPS :Real = 1.0E-9;
N1 :Integer = 21;
begin
Result := '';  { результат функции }
S := True;
SF74R(X,N1,EPS,S,T,T1);
Result := Result + #$0D#$0A;
for _i:=0 to 20 do
 begin
  Result := Result + Format('%16.7f ',[T[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tsf74r',Result);  { вывод результатов в файл tsf74r.res }
exit;
end;

end.


Результаты:

       T(5)    =  5.1082347636E+00
       T(11)  =  4.580044192E-03
       T(16)  =  1.0479776754E-06
       T(21)  =  5.0242393580E-11