|
Текст подпрограммы и версий sf33r_p.zip , sf33e_p.zip |
Тексты тестовых примеров tsf33r_p.zip , tsf33e_p.zip |
Вычисление функции Бесселя первого рода целых порядков 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