Функция: sf50r_c
Назначение
Вычисление полных эллиптических интегралов третьего рода
П (x, k).
Математическое описание
Функция sf50r_c производит вычисление интегралов вида:
π/2
П (x, k) = ∫ dt / (1 + x sin 2 t) (1 - k 2 sin 2 t) 1 / 2
0
для 0 ≤ k 2 ≤ 1 и x ≠ - 1
J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer
Approximations, Wiley, New York, 1968.
Использование
real sf50r_c (real *x, real *rk2, integer *ierr)
Параметры
x, rk2 -
|
заданные значения аргументов x и k2
соответственно (тип: вещественный);
|
ierr -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы функции; при этом:
|
ierr=65 -
|
когда значение x pавно - 1; значение
функции полагается равным 3.4e38;
|
ierr=66 -
|
когда значение rk2 меньше 0 или
больше или pавно 1; значение функции полагается равным 3.4e38.
|
Версии
sf50d_c -
|
вычисление полных эллиптических интегралов
третьего рода с повышенной точностью.
|
Вызываемые подпрограммы
sf14r_c -
sf14d_c
|
вычисление полных эллиптических
интегралов первого рода с обычной и повышенной
точностью (используются в sf50r_c и sf50d_c соответственно).
|
sf15r_c -
sf15d_c
|
вычисление полных эллиптических
интегралов второго рода с обычной и повышенной
точностью (используются в sf50r_c и sf50d_c соответственно).
|
sf19r_c -
sf19d_c
|
вычисление неполных эллиптических
интегралов первого рода с обычной и повышенной
точностью (используются в sf50r_c и sf50d_c соответственно).
|
sf20r_c -
sf20d_c
|
вычисление неполных эллиптических
интегралов второго рода с обычной и повышенной
точностью (используются в sf50r_c и sf50d_c соответственно).
|
utsf14_c -
|
подпрограмма выдачи диагностических
сообщений при работе функции sf50r_c.
|
utsf15_c -
|
подпрограмма выдачи диагностических
сообщений при работе функции sf50d_c.
|
Замечания по использованию
|
Для функции sf50d_c параметры x и rk2 имеют тип double.
Значение sf50d_c при ierr ≠ 0
полагается pавным 1.7e308.
|
Пример использования
int main(void)
{
/* Local variables */
extern float sf50r_c(float *, float *, int *);
static int ierr;
static float r__, x, rk2;
x = 1.f;
rk2 = .5f;
r__ = (float)sf50r_c(&x, &rk2, &ierr);
printf("\n %16.7e %5i \n",r__,ierr);
return 0;
} /* main */
Результаты: r__ = 1.27312736674 , ierr = 0