Текст подпрограммы и версий
sf13r_p.zip , sf13e_p.zip
Тексты тестовых примеров
tsf13r_p.zip , tsf13e_p.zip

Функция:  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