|
Текст подпрограммы и версий sfa1r_p.zip sfa1e_p.zip |
Тексты тестовых примеров tsfa1r_p.zip tsfa1e_p.zip |
Вычисление комплексной интегральной показательной функции.
Подпрограмма SFA1R вычисляет значение комплексной интегральной показательной функции
W(k, z) = Re W + i Im W =
∞
= zk ez ∫ e - t / zk dt ,
z
где z = x + i y, а k - вещественный параметр.
Вычисления проводятся по следующим рекуррентным формулам для n = 2, 3, 4, ...
Dn = z / (z + m Dn - 1) ,
Rn = (Dn - 1) Rn-1 ,
Cn = Cn-1 + Rn ,
где D1 = R1 = C1 = 1 ,
m = k - 1 + (n - 2)/2 , если n - четное
m = (n + 2)/2 , если n - нечетное
Вычисления прекращаются, когда модуль разности между Cn и Cn - 1 становится меньше заданной точности EPS.
Сходимость имеет место на всей комплексной плоскости, за исключением начала координат и отрицательной вещественной оси. Сходимость замедляется для | z | < 0.05 и для некоторой области, зависящей от k, внутри полосы | y | < 2, x < 0 .
Абрамовиц M., Стиган И. Справочник по специальным функциям. М.: Наука, 1979.
procedure SFA1R(X :Real; Y :Real; RK :Real; EPS :Real; var REW :Real;
var RIMW :Real; var N :Integer);
Параметры
| X, Y - | вещественная и мнимая части заданного значения аргумента z (тип: вещественный); |
| RK - | заданное значение параметра k (тип: вещественный); |
| EPS - | заданная точность вычисления комплексной интегральной показательной функции (тип: вещественный); |
|
REW - RIMW | вещественные переменные, которым присваиваются вычисленные вещественная и мнимая части комплексной интегральной показательной функции; |
| N - | целая переменная, значение которой полагается равным количеству итераций по рекуррентным расчетным формулам, выполненным для достижения заданной точности EPS. |
Версии
| SFA1E - | вычисление комплексной интегральной показательной функции в режиме расширенной (Extended) точности; при этом параметры X, Y, RK, EPS, REW, RIMW должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tsfa1r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SFA1R_p;
function tsfa1r: String;
implementation
function tsfa1r: String;
var
N :Integer;
X,Y,RK,EPS,REW,RIMW :Real;
begin
Result := ''; { результат функции }
X := 1.0;
Y := 1.0;
RK := 1.0;
EPS := 0.000001;
SFA1R(X,Y,RK,EPS,REW,RIMW,N);
Result := Result + Format(' %16.7f %16.7f ',[REW,RIMW]) + #$0D#$0A;
Result := Result + Format('%5d ',[N]) + #$0D#$0A;
UtRes('tsfa1r',Result); { вывод результатов в файл tsfa1r.res }
exit;
end;
end.
Результаты:
REW = 0.6733211 ,
RIMW = 0.1478637 ,
N = 34