|
Текст подпрограммы и версий sf75r_p.zip |
Тексты тестовых примеров tsf75r_p.zip |
Вычисление модифицированных функций Бесселя второго рода Kn (x) для последовательности целых индексов.
SF75R вычисляет значения модифицированных функций Бесселя второго рода Kp(x) для действительного аргумента x и последовательности целых индексов p от 0 до n. Расчеты осуществляются по рекуррентной формуле:
Kp+1(x) = (2p/x)*Kp(x) + Kp-1(x) .
Ошибка вычисления Kp (x) не pастет в pекуppентном процессе, примененном для возрастающих значений p. Поэтому сначала вычисляются с заданной точностью значения K0 (x) и K1 (x) с помощью разложений по полиномам Чебышева, а затем последовательно применяется рекуррентная формула для p = 2, 3, ..., n.
procedure SF75R(X :Real; N1 :Integer; S :Boolean;
var T :Array of Real);
Параметры
| X - | заданное значение аргумента x (тип: вещественный); |
| N1 - | максимальный порядок последовательности функций Kp (x), увеличенный на единицу (тип: целый); |
| S - |
логическая переменная, задающая режим работы
подпрограммы; при этом: если S=TRUE , то вычисляются функции Kp (x), если S=FALSE , то вычисляются функции ex Kp (x). |
| T - | вещественный вектоp длины N1 вычисленных значений функции Бесселя порядков от 0 до n; Kj (x) = T (j + 1), j = 0, ..., N. (N = N1 - 1). |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tsf75r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF75R_p;
function tsf75r: String;
implementation
function tsf75r: String;
var
N1,_i :Integer;
X :Real;
S :Boolean;
T :Array [0..20] of Real;
begin
Result := ''; { результат функции }
X := 5.0;
N1 := 21;
S := True;
SF75R(X,N1,S,T);
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('tsf75r',Result); { вывод результатов в файл tsf75r.res }
exit;
end;
end.
Результаты:
T(6) = 3.2706273712E-02
T(11) = 9.7585628291E+00
T(16) = 3.0169766300E+04
T(21) = 4.8270005205E+08