Текст подпрограммы и версий
sf10r_p.zip , sf10e_p.zip
Тексты тестовых примеров
tsf10r_p.zip , tsf10e_p.zip

Функция:  SF10R (модуль SF10R_p)

Назначение

Вычисление модифицированной функции Ханкеля нулевого порядка K0 (x).

Математическое описание

Модифицированную функцию Ханкеля называют иногда модифицированной функцией Бесселя второго рода или функцией Макдональда.

SF10R вычисляет функцию K0 (x)   или   ex K0 (x) для вещественных положительных  x,  используя минимаксные приближения рациональными функциями.

J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer Approximations, Wiley, New Уork, 1968.

Использование

function SF10R(X :Real; L :Integer; var IERR :Integer): Real;

Параметры

X - заданное значение аргумента  x (тип: вещественный);
L - задает режим работы функции (тип: целый); при этом: если
L = 1 - вычисляется функция K0 (x);
L = 2 - вычисляется функция ex K0 (x);
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы функции; при этом:
IERR=65 - когда условное число L ≠ 1 и ≠ 2; значение функции полагается равным 3.4E38;
IERR=66 - когда значение аргумента меньше или pавно 0.; значение функции полагается равным 3.4E38;
IERR=67 - когда значение аргумента больше 43.39; значение функции полагается равным 0.

Версии

SF10E - вычисление модифицированной функции Ханкеля нулевого порядка K0 (x) с расширенной (Extended) точностью.

Вызываемые подпрограммы

UTSF10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы SF10R.
UTSF11 - подпрограмма выдачи диагностических сообщений при работе функции SF10E.

Замечания по использованию

 

Областью допустимых значений аргумента x для функции SF10R является полуинтервал 0 < x ≤ 43.39, а для функции SF10E полуинтервал 0 < x ≤ 2048. Kpоме того, для функции SF10E аргумент  x  имеет тип Extended и при наpушении области допустимых значений функция SF10E полагается равной 1.7E308, а не 3.4E38 при IERR = 65 и IERR = 66.

Пример использования

Unit tsf10r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF10R_p;

function tsf10r: String;

implementation

function tsf10r: String;
var
L,IERR :Integer;
X,R :Real;
begin
Result := '';  { результат функции }
X := 0.5;
L := 1;
R := SF10R(X,L,IERR);
Result := Result + Format('%s',[' X=']);
Result := Result + Format('%20.16f ',[X]);
Result := Result + Format('%s',[' L=']);
Result := Result + Format('%8d ',[L]);
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%8d ',[IERR]);
Result := Result + Format('%s',[' R=']);
Result := Result + Format('%20.16f ',[R]) + #$0D#$0A;
UtRes('tsf10r',Result);  { вывод результатов в файл tsf10r.res }
exit;
end;

end.


Результаты:

       R  =  0.924419071228
       IERR  =  0