Текст подпрограммы и версий sf75r_c.zip |
Тексты тестовых примеров tsf75r_c.zip |
Вычисление модифицированных функций Бесселя второго рода Kn (x) для последовательности целых индексов.
sf75r_c вычисляет значения модифицированных функций Бесселя второго рода Kp(x) для действительного аргумента x и последовательности целых индексов p от 0 до n. Расчеты осуществляются по рекуррентной формуле:
Kp+1(x) = (2p/x)*Kp(x) + Kp-1(x) .
Ошибка вычисления Kp (x) не pастет в pекуppентном процессе, примененном для возрастающих значений p. Поэтому сначала вычисляются с заданной точностью значения K0 (x) и K1 (x) с помощью разложений по полиномам Чебышева, а затем последовательно применяется рекуррентная формула для p = 2, 3, ..., n.
int sf75r_c (real *x, integer *n1, logical *s, real *t)
Параметры
x - | заданное значение аргумента x (тип: вещественный); |
n1 - | максимальный порядок последовательности функций Kp (x), увеличенный на единицу (тип: целый); |
s - |
логическая переменная, задающая режим работы
подпрограммы; при этом: если s=TRUE_ , то вычисляются функции Kp (x), если s=FALSE_ , то вычисляются функции ex Kp (x). |
t - | вещественный вектоp длины n1 вычисленных значений функции Бесселя порядков от 0 до n; Kj (x) = t (j + 1), j = 0, ..., n. (n = n1 - 1). |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Local variables */ extern int sf75r_c(float *, int *, logical *, float *); static logical s; static float t[21], x; static int n1, i; x = 5.f; n1 = 21; s = TRUE_; sf75r_c(&x, &n1, &s, t); for (i = 1; i <= 19; i += 3) { printf("\n %16.7e %16.7e %16.7e ",t[i-1], t[i], t[i+1]); } printf("\n \n"); return 0; } /* main */ Результаты: t(6) = 3.2706273712e-02 t(11) = 9.7585628291e+00 t(16) = 3.0169766300e+04 t(21) = 4.8270005205e+08