Текст подпрограммы и версий
sfa2r_p.zip  sfa2e_p.zip 
Тексты тестовых примеров
tsfa2r_p.zip  tsfa2e_p.zip 

Подпрограмма:  SFA2R (модуль SFA2R_p)

Назначение

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

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

Подпрограмма SFA2R вычисляет для вещественных аргументов  x  функции Риккати - Бесселя первого рода

           Sn(x)  =  (πx/2)1/2  Jn+1/2(x)  =  x jn(x) ,      n = 0, 1, 2, ..., N 

   и второго рода

           Cn(x)  =  (πx/2)1/2  Yn+1/2(x)  =  x yn(x) ,    n = 0, 1, 2, ..., N ,

  где  Jn + 1/2  и  Yn + 1/2  -  функции Бесселя первого и второго рода,
                         jn  и  yn  -  сферические функции Бесселя первого и второго рода.  

Абрамовиц М., Стиган И. Справочник по специальным функциям. М.: Наука, 1979

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

procedure SFA2R(X :Real; N :Integer; var S :Array of Real;
                var C :Array of Real);

Параметры

X - заданное значение аргумента (тип: вещественный);
N - заданное значение максимального порядка, для которого необходимо вычислить функции  Sn (x) и Cn (x),  n = 0, 1, ..., N (тип: целый);
S, C - вещественные одномерные массивы длины N + 1, в которых размещаются вычисленные значения  S0 (x), ..., SN (x)  и  C0 (x), ..., CN (x)  соответственно.

Версии

SFA2E - вычисление функций Риккати - Бесселя первого рода Sn (x)  и  второго рода Cn (x) от вещественных аргументов в режиме расширенной (Extended) точности; при этом параметры X, S и C должны иметь тип Extended.

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

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

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

Unit tsfa2r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SFA2R_p;

function tsfa2r: String;

implementation

function tsfa2r: String;
var
_i :Integer;
X :Real;
S :Array [0..2] of Real;
C :Array [0..2] of Real;
begin
Result := '';  { результат функции }
X := 3.0;
SFA2R(X,2,S,C);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%14.6f ',[S[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%14.6f ',[C[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tsfa2r',Result);  { вывод результатов в файл tsfa2r.res }
exit;
end;

end.


Результаты:

       S =   0.141120,   1.03703,  0.895913 
       C = -0.989992,  -0.188878,  0.801115