Текст подпрограммы и версий
sf32r_p.zip , sf32e_p.zip
Тексты тестовых примеров
tsf32r_p.zip , tsf32e_p.zip

Подпрограмма:  SF32R (модуль SF32R_p)

Назначение

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

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

SF32R вычисляет сферическую функцию Бесселя первого рода целых порядков для вещественных положительных значений аргумента

     jn (x) = (π / 2x) 1/2 Jn + 1/2 (x)   , 

где  Jn + 1/2 (x) - функция Бесселя первого рода и   0 ≤ n ≤ 29.

M.A.Abramowitz, I.A.Stegun, Handbook of Mathematical Functions, Nat. Bur. Stand. Washington D.C., 1964.

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

procedure SF32R(X :Real; N :Integer; var Y :Array of Real;
                var IERR :Integer);

Параметры

X - заданное значение аргумента  x (тип: вещественный);
N - заданное значение порядка  n (тип: целый);
Y - вещественный вектоp длины  N + 1, в который в pезультате работы подпрограммы помещаются вычисленные значения  j0 (X), ..., jN (X);
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR=65 - когда значение аргумента отрицательно;
IERR=66 - когда заданный порядок сферической функции Бесселя не принадлежит отрезку (0, 29).

Версии

SF32E - вычисление сферической функции Бесселя первого рода целых порядков  jn (x) с расширенной (Extended) точностью.

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

UTSF10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы SF32R.
UTSF11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы SF32E.

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

  Для подпрограммы SF32E параметры X и Y должны иметь тип Extended.

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

Unit tsf32r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF32R_p;

function tsf32r: String;

implementation

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

end.


Результаты:

       Y(1)  =  0.998334166468, 
       Y(2)  =  0.033300011902, 
       Y(3)  =  0.000666190608, 

       IERR  =  0