|
Текст подпрограммы и версий sf74r_p.zip |
Тексты тестовых примеров tsf74r_p.zip |
Вычисление модифицированных функций Бесселя первого рода In (x) для последовательности целых индексов.
SF74R вычисляет значения модифицированных функций Бесселя первого рода Ip (x) для действительного аргумента x и последовательности целых индексов p от n до 0. Расчеты осуществляются по рекуррентной формуле:
Ip-1(x) = (2p/x)*Ip(x) + Ip+1(x) .
Ошибка вычисления Ip (x) не возрастает в pекуppентном процессе, применяемом при убывании p.
Вычисления начинаются с задания значений Ik + 1 = 0, Ik = 1 и числа k.
Величина k выбирается в зависимости от значений x и n. Затем последовательно вычисляются значения функций для p = k - 1, k - 2, ..., 0. Для достижения заданной точности eps рекурсия повторяется с большим k до тех пор, пока разность между pезультатами двух последних рекурсий не станет меньше eps.
| 1. | Абрамовиц М., Стиган И. Справочник по специальным функциям - М. Наука, 1979. |
| 2. | Goldstein M., Thaler R.M. Recurrence techniques for the calculation of Bessel functions. - M TAC, 1959, V. 13, N 66. |
procedure SF74R(X :Real; N1 :Integer; EPS :Real; var S :Boolean;
var T :Array of Real; var T1 :Array of Real);
Параметры
| X - | заданное значение аргумента x (тип: вещественный); |
| N1 - | максимальный порядок последовательности функций Ip (x), увеличенный на единицу (тип: целый); |
| EPS - | относительная точность вычисления последней функции последовательности In (x) (тип: вещественный); |
| S - |
логическая переменная, задающая режим работы
подпрограммы; при этом: если S = TRUE, то вычисляются функции Ip(x), если S = FALSE, то вычисляются функции e - x Ip(x); |
| T - | вещественный вектоp длины N1 вычисленных значений функций Бесселя порядков от 0 до n; Ij (x) = T (j + 1), j = 0, ..., N (N = N1 - 1); |
| T1 - | вещественный вектоp длины N1, используемый как рабочий. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
| Для значений x, при которых e - x меньше положительного наименьшего представимого в машине числа, значение S полагается равным FALSE |
Unit tsf74r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF74R_p;
function tsf74r: String;
implementation
function tsf74r: String;
var
_i :Integer;
S :Boolean;
T :Array [0..20] of Real;
T1 :Array [0..20] of Real;
const
X :Real = 5.0;
EPS :Real = 1.0E-9;
N1 :Integer = 21;
begin
Result := ''; { результат функции }
S := True;
SF74R(X,N1,EPS,S,T,T1);
Result := Result + #$0D#$0A;
for _i:=0 to 20 do
begin
Result := Result + Format('%16.7f ',[T[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tsf74r',Result); { вывод результатов в файл tsf74r.res }
exit;
end;
end.
Результаты:
T(5) = 5.1082347636E+00
T(11) = 4.580044192E-03
T(16) = 1.0479776754E-06
T(21) = 5.0242393580E-11