Функция: SF13R (модуль SF13R_p)
Назначение
Вычисление экспоненциальных интегралов.
Математическое описание
Функция SF13R производит вычисления следующих интегралов
x
(1) y = ∫ (et / t) dt , для x > 0.0
-∞
∞
(2) y = - ∫ (e - t / t) dt , для x < 0.0
-x
∞
(3) y = ∫ (e - t / t) dt , для x > 0.0
x
x
(4) y = e - x ∫ (et / t) dt , для x > 0.0
-∞
∞
(5) y = - e - x ∫ (e - t / t) dt , для x < 0.0
-x
Алгоритм, реализованный в функции, изложен в статье
W.J.Cody, H.C.Thacher, Rational Chebyshev Approximation for
the Exponential Integral Ei (x), Math. Comp. 23, 1969.
Использование
function SF13R(X :Real; L :Integer; var IERR :Integer): Real;
Параметры
X -
|
заданное значение аргумента x (тип: вещественный);
|
L -
|
задает режим работы функции (тип: целый); при
этом если:
|
L = 1 -
|
вычисляется интеграл (1), если x > 0.0. или
интеграл (2), если x < 0.0;
|
L = 2 -
|
вычисляется интеграл (3), если x > 0.0;
|
L = 3 -
|
вычисляется интеграл (4), если x > 0.0, или
интеграл (5), если x < 0.0;
|
IERR -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы функции; при
этом:
|
IERR= 1 -
|
когда аргумент задан отрицательным
числом при L = 2; вычисления
производятся с использованием абсолютного
значения аргумента;
|
IERR=66 -
|
когда значение L меньше 1 или больше 3;
значение SF13R полагается равным 3.4E38;
|
IERR=67 -
|
когда значение аргумента pавно 0.;
значение SF13R полагается равным 3.4E38,
если L = 2, или - 3.4E38,
если L = 1 или 3;
|
IERR=68 -
|
когда значение аргумента превосходит
43.66 при L = 1; значение SF13R
полагается равным 3.4E38;
|
IERR=69 -
|
когда значение аргумента меньше - 41.18
при L = 1 или 2; значение SF13R
полагается равным 0.
|
Версии
SF13E -
|
вычисление экспоненциальных интегралов (1) - (5)
с расширенной (Extended) точностью.
|
Вызываемые подпрограммы
UTSF10 -
|
подпрограмма выдачи диагностических сообщений
при работе функции SF13R.
|
UTSF11 -
|
подпрограмма выдачи диагностических сообщений
при работе функции SF13E.
|
Замечания по использованию
|
Область допустимых значений аргумента для функций SF13R
и SF13E указана выше при описании параметра IERR, при
этом в случае функции SF13E вместо 3.4E38 берется
значение 1.7E308. Kpоме того, для функции SF13E аргумент
x имеет тип Extended и его максимальное значение
pавно 2.04E3 при L = 1 или 2 (IERR = 68),
а минимальное значение pавно - 2050 при
L = 1 или 2 (IERR = 69).
|
Пример использования
Unit tsf13r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF13R_p;
function tsf13r: String;
implementation
function tsf13r: String;
var
L,IERR :Integer;
X,Y :Real;
begin
Result := ''; { результат функции }
X := -0.5;
L := 1;
Y := SF13R(X,L,IERR);
Result := Result + Format('%s',[' Y=']);
Result := Result + Format('%20.16f ',[Y]) + #$0D#$0A;
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
UtRes('tsf13r',Result); { вывод результатов в файл tsf13r.res }
exit;
end;
end.
Результаты:
Y = -0.559773594775, IERR = 0