Текст подпрограммы и версий
sf33r_p.zip , sf33e_p.zip
Тексты тестовых примеров
tsf33r_p.zip , tsf33e_p.zip

Подпрограмма:  SF33R (модуль SF33R_p)

Назначение

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

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

SF33R вычисляет функции Бесселя первого рода  Jn (x) и функции Неймана (функции Бесселя второго рода) для вещественных значений аргумента  x (x > 0) и всех целых значений порядка  n от 0 до M  (M ≥ 1). Поскольку при малых x функции  Jn (x)  и   Nn (x) с pостом  n  быстро стремятся к  0  и  ∞, соответственно, то при 0 < x ≤ 1 вычисляются следующие функции:

     in (x) = n! (x / 2)- n Jn (x) ,
     k0 (x) = N0 (x) ,
     kn (x) = 2 (x / 2)n Nn (x) / (n - 1)! ,    n ≥ 1 

В.Н.Родин, Стандартные программы вычисления полных эллиптических интегралов, интеграла вероятностей, гамма - функции и функции Бесселя, Сб. "Численный анализ на ФОРТРАНе", вып. 8, Изд - во МГУ, 1974 г.

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

procedure SF33R(X :Real; N :Integer; NMAX :Integer;
                var FUN1 :Array of Real; var FUN2 :Array of Real;
                var WORK :Array of Real; var IERR :Integer);

Параметры

X - заданное значение аргумента x (тип: вещественный);
N - определяет, до какого порядка включительно надо вычислять функции, и его значение должно быть pавно M + 1, где M - максимальный порядок вычисляемых функций (тип: целый);
NMAX - целая переменная, определяющая длины вектоpов FUN1, FUN2; необходимо при обращении задавать NMAX ≥ max (N, 2*[x] + 4), где [x] - целая часть X;
         FUN1 -
         FUN2  
вещественные векторы длины NMAX, в первых N компонентах которых помещаются вычисленные значения функций  Jn (x) и  Nn (x) соответственно (n = 0, 1, ..., N - 1);
WORK - вещественный вектоp длины NMAX, используемый в подпрограмме как рабочий;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы:
IERR=65 - если значение N (число значений порядка, для которых нужно посчитать функции  Jn  и  Nn)  меньше двух;
IERR=66 - если значение NMAX (длина массивов FUN1 и FUN2) не удовлетворяет условию:  NMAX ≥ max (N, 2*[x] + 4);
IERR=67 - если значение аргумента  x  меньше или pавно нулю;
IERR=68 - если значение вычисляемой функции превосходит максимально допустимое в машине число.

Версии

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

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

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

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

  Для подпрограммы SF33E параметры FUN1, FUN2, X, WORK имеют тип Extended.

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

Unit TSF33R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF33R_p;

function TSF33R: String;

implementation

function TSF33R: String;
var
N,NMAX,IERR :Integer;
X :Real;
FUN1 :Array [0..2] of Real;
FUN2 :Array [0..2] of Real;
WORK :Array [0..2] of Real;
begin
Result := '';  { результат функции }
X := 0.1;
N := 3;
NМАХ := 4;
SF33R(X,N,NMAX,FUN1,FUN2,WORK,IERR);
Result := Result + Format(' %5d  %20.16f  %20.16f %20.16f ',
 [IERR,FUN1[0],FUN1[1],FUN1[2]]) + #$0D#$0A;
Result := Result + Format(' %20.16f  %20.16f %20.16f ',
 [FUN2[0],FUN2[1],FUN2[2]]) + #$0D#$0A;
UtRes('TSF33R',Result);  { вывод результатов в файл TSF33R.res }
exit;
end;

end.

Результаты:

       FUN1(1)  =   0.997501562056, 
       FUN1(2)  =   0.998750520715, 
       FUN1(3)  =   0.999166927031;

       FUN2(1)  =  -1.53423865134, 
       FUN2(2)  =  -0.645895109469,
       FUN2(3)  =  -0.638223916213;

       IERR  =  0