Текст подпрограммы и версий
sf18r_c.zip  sf18d_c.zip 
Тексты тестовых примеров
tsf18r_c.zip  tsf18d_c.zip 

Подпрограмма:  sf18r_c

Назначение

Вычисление функций Кельвина первого порядка.

Математическое описание

sf18r_c вычисляет функции Кельвина первого рода (ber1 (x) и bei1(x)) и второго рода (ker1 (x) и kei1 (x)) первого порядка.

J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer Approximations, Wiley, New York, 1968.

Использование

    int sf18r_c (real *x, real *ber1, real *bei1, real *aker1,
            real *akei1, integer *ierr)

Параметры

x - заданное значение аргумента  x (тип: вещественный);
            ber1 -
            bei1  
         aker1  
         akei1  
вычисленные значения функций ber1 (x), bei1 (x), ker1 (x), kei1 (x) соответственно (тип :вещественный);
ierr - целая переменая, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
ierr= 1 - когда значение аргумента меньше 0.; значения aker1 и akei1 полагаются равными 3.4e38;
ierr=66 - когда абсолютное значение аргумента больше 57.58; значения ber1 и bei1 полагаются равными 0.; в случае, когда аргумент неотрицателен, aker1 и akei1 также полагаются равными 0., иначе aker1 и akei1 полагаются равными 3.4e38.

Версии

sf18d_c - вычисление функций Кельвина первого порядка с повышенной точностью.

Вызываемые подпрограммы

       sf17r_c -
       sf17d_c  
подпрограммы вычисления производных функций Кельвина нулевого порядка с обычной и повышенной точностью (используются в sf18r_c и sf18d_c).
utsf10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы sf18r_c.
utsf11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы sf18d_c.

Замечания по использованию

 

Для подпрограммы sf18d_c параметры x, ber1, bei1, aker1 и akei1 имеют тип double  и абсолютное значение аргумента не должно превосходить 2.04e03. При нарушении этого условия значение ierr полагается равным 66 и для отрицательного x значения aker1 и akei1 полагаются pавными 1.7e308.

При x = 0, ber1 = 0., bei1 = 0., aker1 = akei1 = - 3.4e38 (для sf18r_c) или - 1.7e308 (для sf18d_c).

Пример использования

int main(void)
{
    /* Local variables */
    static int ierr;
    extern int sf18r_c(float *, float *, float *, float *, float *, int *);
    static float akei1, aker1, x, bei1, ber1;

    x = .4f;
    sf18r_c(&x, &ber1, &bei1, &aker1, &akei1, &ierr);

    printf("\n %16.7e %16.7e \n",ber1, bei1);
    printf("\n %16.7e %16.7e \n",aker1, akei1);
    printf("\n %5i \n",ierr);
    return 0;
} /* main */


Результаты:

       ber1     =  -0.144230864453, 
       bei1      =   0.138574135911, 
       aker1  =  -1.88202405043, 
       akei1   =  -1.44430515029, 
       ierr      =   0