Функция: sf14r_c
Назначение
Вычисление полных эллиптических интегралов первого рода.
Математическое описание
Функция sf14r_c производит вычисление следующих интегралов
π/2
(1) y = ∫ (1 - x sin2 t) -1/2 dt для 0 ≤ x < 1
0
π/2
(2) y = ∫ (1 - x2 sin2 t) -1/2 dt для -1 < x < 1
0
π/2
(3) y = ∫ (1 - (1 - x) sin2 t) -1/2 dt для 0 < x ≤ 1
0
Алгоритм реализованный в функции, изложен в статье
W.J.Cody, Chebyshev Approximations for the Complete Elliptic
Integrals K and E, Math. Comp., 19, 1965.
Использование
real sf14r_c (real *x, integer *l, integer *ierr)
Параметры
x -
|
заданное значение аргумента x (тип: вещественный);
|
l -
|
задает режим работы функции (тип: целый); при
этом: если
|
l = 1 -
|
вычисляется интеграл (1);
|
l = 2 -
|
вычисляется интеграл (2);
|
l = 3 -
|
вычисляется интеграл (3);
|
ierr -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы функции; при этом:
|
ierr=65 -
|
когда значение l меньше 1 или больше 3;
значение функции полагается равным 3.4e38;
|
ierr=66 -
|
когда значение аргумента меньше 0. При l = 1;
значение функции полагается pавным 3.4e38;
|
ierr=67 -
|
когда значение аргумента больше или pавно 1.
При l = 1 и l = 2; значение
функции полагается равным 3.4e38;
|
ierr=68 -
|
когда значение аргумента больше 1. При l = 3;
значение функции полагается pавным 3.4e38;
|
ierr=69 -
|
когда значение аргумента меньше или pавно 0.
При l = 3; значение функции полагается равным 3.4e38.
|
Версии
sf14d_c -
|
вычисление полных эллиптических интегралов
первого рода с повышенной точностью.
|
Вызываемые подпрограммы
utsf10_c -
|
подпрограмма выдачи диагностических сообщений
при работе функции sf14r_c.
|
utsf11_c -
|
подпрограмма выдачи диагностических сообщений
при работе функции sf14d_c.
|
Замечания по использованию
|
Область допустимых значений аргумента для функции sf14r_c
и sf14d_c указана выше при описании параметра ierr. Для
функции sf14d_c аргумент x имеет тип двойной
точности и при нарушении области допустимых значений функция
sf14d_c полагается равной 1.7e308.
|
Пример использования
int main(void)
{
/* Local variables */
extern float sf14r_c(float *, int *, int *);
static int ierr, l;
static float x, y;
l = 1;
x = 0.f;
y = (float)sf14r_c(&x, &l, &ierr);
printf("\n %16.7e %5i \n",x,l);
printf("\n %5i %16.7e \n",ierr,y);
return 0;
} /* main */
Результаты:
y = 1.57079632679, ierr = 0