Текст подпрограммы и версий
sf33r_c.zip  sf33d_c.zip 
Тексты тестовых примеров
tsf33r_c.zip  tsf33d_c.zip 

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

Назначение

Вычисление функции Бесселя первого рода целых порядков   Jn (x) и функции Неймана целых порядков  Nn (x).

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

sf33r_c вычисляет функции Бесселя первого рода  Jn (x) и функции Неймана (функции Бесселя второго рода) для вещественных значений аргумента  x (x > 0) и всех целых значений порядка  n от 0 до M  (M ≥ 1). Поскольку при малых x функции  Jn (x)  и   Nn (x) с pостом  n  быстро стремятся к  0  и  ∞, соответственно, то при 0 < x ≤ 1 вычисляются следующие функции:

     in (x) = n! (x / 2)- n Jn (x) ,
     k0 (x) = N0 (x) ,
     kn (x) = 2 (x / 2)n Nn (x) / (n - 1)! ,    n ≥ 1 

В.Н.Родин, Стандартные программы вычисления полных эллиптических интегралов, интеграла вероятностей, гамма - функции и функции Бесселя, Сб. "Численный анализ на ФОРТРАНе", вып. 8, Изд - во МГУ, 1974 г.

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

    int sf33r_c (real *x, integer *n, integer *nmax, real *fun1,
            real *fun2, real *work, integer *ierr)

Параметры

x - заданное значение аргумента x (тип: вещественный);
n - определяет, до какого порядка включительно надо вычислять функции, и его значение должно быть pавно m + 1, где m - максимальный порядок вычисляемых функций (тип: целый);
nmax - целая переменная, определяющая длины вектоpов fun1, fun2; необходимо при обращении задавать nmax ≥ max (n, 2*[x] + 4), где [x] - целая часть x;
         fun1 -
         fun2  
вещественные векторы длины nmax, в первых n компонентах которых помещаются вычисленные значения функций  Jn (x) и  Nn (x) соответственно (n = 0, 1, ..., n - 1);
work - вещественный вектоp длины nmax, используемый в подпрограмме как рабочий;
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы:
ierr=65 - если значение n (число значений порядка, для которых нужно посчитать функции  Jn  и  Nn)  меньше двух;
ierr=66 - если значение nmax (длина массивов fun1 и fun2) не удовлетворяет условию:  nmax ≥ max (n, 2*[x] + 4);
ierr=67 - если значение аргумента  x  меньше или pавно нулю;
ierr=68 - если значение вычисляемой функции превосходит максимально допустимое в машине число.

Версии

sf33d_c - вычисление функции Бесселя первого рода целых порядков  Jn (x)  и функции Неймана целых порядков  Nn (x)  с повышенной точностью.

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

utsf10_c - подпрограмма печати диагностических сообщений при работе подпрограммы sf33r_c.
utsf11_c - подпрограмма печати диагностических сообщений при работе подпрограммы sf33d_c.

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

  Для подпрограммы sf33d_c параметры fun1, fun2, x, work имеют тип double.

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

int main(void)
{
    /* Local variables */
    extern int sf33r_c(float *, int *, int *, float *, float *,
                       float *, int *);
    static int ierr, nmax;
    static float work[3];
    static int n;
    static float x, fun1[3], fun2[3];

    x = .1f;
    n = 3;
    nmax = 4;
    sf33r_c(&x, &n, &nmax, fun1, fun2, work, &ierr);

    printf("\n %5i \n",ierr);
    printf("\n %16.7e %16.7e %16.7e \n",fun1[0],fun1[1],fun1[2]);
    printf("\n %16.7e %16.7e %16.7e \n",fun2[0],fun2[1],fun2[2]);
    return 0;
} /* main */


Результаты:

       fun1(1)  =   0.997501562056, 
       fun1(2)  =   0.998750520715, 
       fun1(3)  =   0.999166927031;

       fun2(1)  =  -1.53423865134, 
       fun2(2)  =  -0.645895109469,
       fun2(3)  =  -0.638223916213;

       ierr  =  0