Текст подпрограммы и версий sf33r_c.zip sf33d_c.zip |
Тексты тестовых примеров tsf33r_c.zip tsf33d_c.zip |
Вычисление функции Бесселя первого рода целых порядков 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