|
Текст подпрограммы и версий sfa2r_p.zip sfa2e_p.zip |
Тексты тестовых примеров tsfa2r_p.zip tsfa2e_p.zip |
Вычисление функций Риккати - Бесселя первого рода Sn (x) и второго рода Cn (x) от вещественных аргументов.
Подпрограмма SFA2R вычисляет для вещественных аргументов x функции Риккати - Бесселя первого рода
Sn(x) = (πx/2)1/2 Jn+1/2(x) = x jn(x) , n = 0, 1, 2, ..., N
и второго рода
Cn(x) = (πx/2)1/2 Yn+1/2(x) = x yn(x) , n = 0, 1, 2, ..., N ,
где Jn + 1/2 и Yn + 1/2 - функции Бесселя первого и второго рода,
jn и yn - сферические функции Бесселя первого и второго рода.
Абрамовиц М., Стиган И. Справочник по специальным функциям. М.: Наука, 1979
procedure SFA2R(X :Real; N :Integer; var S :Array of Real;
var C :Array of Real);
Параметры
| X - | заданное значение аргумента (тип: вещественный); |
| N - | заданное значение максимального порядка, для которого необходимо вычислить функции Sn (x) и Cn (x), n = 0, 1, ..., N (тип: целый); |
| S, C - | вещественные одномерные массивы длины N + 1, в которых размещаются вычисленные значения S0 (x), ..., SN (x) и C0 (x), ..., CN (x) соответственно. |
Версии
| SFA2E - | вычисление функций Риккати - Бесселя первого рода Sn (x) и второго рода Cn (x) от вещественных аргументов в режиме расширенной (Extended) точности; при этом параметры X, S и C должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tsfa2r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SFA2R_p;
function tsfa2r: String;
implementation
function tsfa2r: String;
var
_i :Integer;
X :Real;
S :Array [0..2] of Real;
C :Array [0..2] of Real;
begin
Result := ''; { результат функции }
X := 3.0;
SFA2R(X,2,S,C);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
begin
Result := Result + Format('%14.6f ',[S[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
begin
Result := Result + Format('%14.6f ',[C[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tsfa2r',Result); { вывод результатов в файл tsfa2r.res }
exit;
end;
end.
Результаты:
S = 0.141120, 1.03703, 0.895913
C = -0.989992, -0.188878, 0.801115