|
Текст подпрограммы и версий sfa1r_c.zip sfa1d_c.zip |
Тексты тестовых примеров tsfa1r_c.zip tsfa1d_c.zip |
Вычисление комплексной интегральной показательной функции.
Подпрограмма sfa1r_c вычисляет значение комплексной интегральной показательной функции
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.
int sfa1r_c (real *x, real *y, real *rk, real *eps, real *rew,
real *rimw, integer *n)
Параметры
| x, y - | вещественная и мнимая части заданного значения аргумента z (тип: вещественный); |
| rk - | заданное значение параметра k (тип: вещественный); |
| eps - | заданная точность вычисления комплексной интегральной показательной функции (тип: вещественный); |
|
rew - rimw | вещественные переменные, которым присваиваются вычисленные вещественная и мнимая части комплексной интегральной показательной функции; |
| n - | целая переменная, значение которой полагается равным количеству итераций по рекуррентным расчетным формулам, выполненным для достижения заданной точности eps. |
Версии
| sfa1d_c - | вычисление комплексной интегральной показательной функции в режиме удвоенной точности; при этом параметры x, y, rk, eps, rew, rimw должны иметь тип doubleereal. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Local variables */
static float rimw;
extern int sfa1r_c(float *, float *, float *, float *, float *, float *,
int *);
static int n;
static float x, y, rk, eps, rew;
x = 1.f;
y = 1.f;
rk = 1.f;
eps = 1e-6f;
sfa1r_c(&x, &y, &rk, &eps, &rew, &rimw, &n);
printf("\n %16.7e %16.7e \n", rew, rimw);
printf("\n %5i \n", n);
return 0;
} /* main */
Результаты:
rew = 0.6733211 ,
rimw = 0.1478637 ,
n = 34