Текст подпрограммы и версий 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