Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/sf_htm_c/sf10r_c.htm
Дата изменения: Tue Nov 24 10:51:55 2015 Дата индексирования: Sun Apr 10 01:42:52 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий sf10r_c.zip sf10d_c.zip |
Тексты тестовых примеров tsf10r_c.zip tsf10d_c.zip |
Вычисление модифицированной функции Ханкеля нулевого порядка K0 (x).
Модифицированную функцию Ханкеля называют иногда модифицированной функцией Бесселя второго рода или функцией Макдональда.
sf10r_c вычисляет функцию K0 (x) или ex K0 (x) для вещественных положительных x, используя минимаксные приближения рациональными функциями.
J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer Approximations, Wiley, New Уork, 1968.
real sf10r_c (real *x, integer *l, integer *ierr)
Параметры
x - | заданное значение аргумента x (тип: вещественный); |
l - | задает режим работы функции (тип: целый); при этом: если |
l = 1 - | вычисляется функция K0 (x); |
l = 2 - | вычисляется функция ex K0 (x); |
ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы функции; при этом: |
ierr=65 - | когда условное число l ≠ 1 и ≠ 2; значение функции полагается равным 3.4e38; |
ierr=66 - | когда значение аргумента меньше или pавно 0.; значение функции полагается равным 3.4e38; |
ierr=67 - | когда значение аргумента больше 43.39; значение функции полагается равным 0. |
Версии
sf10d_c - | вычисление модифицированной функции Ханкеля нулевого порядка K0 (x) с повышенной точностью. |
Вызываемые подпрограммы
utsf10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы sf10r_c. |
utsf11_c - | подпрограмма выдачи диагностических сообщений при работе функции sf10d_c. |
Замечания по использованию
Областью допустимых значений аргумента x для функции sf10r_c является полуинтервал 0 < x ≤ 43.39, а для функции sf10d_c полуинтервал 0 < x ≤ 2048. Кроме того, для функции sf10d_c аргумент x имеет тип двойной точности и при наpушении области допустимых значений функция sf10d_c полагается равной 1.7e308, а не 3.4e38 при ierr = 65 и ierr = 66. |
int main(void) { /* Local variables */ extern float sf10r_c(float *, int *, int *); static int ierr, l; static float r__, x; x = .5f; l = 1; r__ = (float)sf10r_c(&x, &l, &ierr); printf("\n %16.7e %5i \n",x,l); printf("\n %5i %16.7e \n",ierr,r__); return 0; } /* main */ Результаты: r__ = 0.924419071228 ierr = 0