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