|
Текст подпрограммы и версий sf32r_p.zip , sf32e_p.zip |
Тексты тестовых примеров tsf32r_p.zip , tsf32e_p.zip |
Вычисление сферической функции Бесселя первого рода целых порядков jn (x).
SF32R вычисляет сферическую функцию Бесселя первого рода целых порядков для вещественных положительных значений аргумента
jn (x) = (π / 2x) 1/2 Jn + 1/2 (x) ,
где Jn + 1/2 (x) - функция Бесселя первого рода и 0 ≤ n ≤ 29.
M.A.Abramowitz, I.A.Stegun, Handbook of Mathematical Functions, Nat. Bur. Stand. Washington D.C., 1964.
procedure SF32R(X :Real; N :Integer; var Y :Array of Real;
var IERR :Integer);
Параметры
| X - | заданное значение аргумента x (тип: вещественный); |
| N - | заданное значение порядка n (тип: целый); |
| Y - | вещественный вектоp длины N + 1, в который в pезультате работы подпрограммы помещаются вычисленные значения j0 (X), ..., jN (X); |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| IERR=65 - | когда значение аргумента отрицательно; |
| IERR=66 - | когда заданный порядок сферической функции Бесселя не принадлежит отрезку (0, 29). |
Версии
| SF32E - | вычисление сферической функции Бесселя первого рода целых порядков jn (x) с расширенной (Extended) точностью. |
Вызываемые подпрограммы
| UTSF10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы SF32R. |
| UTSF11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы SF32E. |
Замечания по использованию
| Для подпрограммы SF32E параметры X и Y должны иметь тип Extended. |
Unit tsf32r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF32R_p;
function tsf32r: String;
implementation
function tsf32r: String;
var
N,_i,IERR :Integer;
X :Real;
Y :Array [0..2] of Real;
begin
Result := ''; { результат функции }
X := 0.1;
N := 2;
SF32R(X,N,Y,IERR);
Result := Result + Format('%s',[' X=']);
Result := Result + Format('%20.16f ',[X]);
Result := Result + Format('%s',[' N=']);
Result := Result + Format('%3d ',[N]);
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%3d ',[IERR]);
Result := Result + Format('%s',[' Y=']);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
begin
Result := Result + Format('%20.16f ',[Y[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tsf32r',Result); { вывод результатов в файл tsf32r.res }
exit;
end;
end.
Результаты:
Y(1) = 0.998334166468,
Y(2) = 0.033300011902,
Y(3) = 0.000666190608,
IERR = 0