/********************************************************** * This program tests the subroutine BESSK to calculate the* * modified Bessel function of the third kind of order N * * for any real positive argument X. * * ------------------------------------------------------- * * SAMPLE RUN: * * * * X = 1.209700 * * * * N = 0 * * Y = 0.314324 * * * * N = 1 * * Y = 0.428051 * * * * N = 2 * * Y = 1.022022 * * * * N = 3 * * Y = 3.807473 * * * * N = 4 * * Y = 19.906737 * * * * ------------------------------------------------------- * * Reference: From Numath Library By Tuan Dang Trong * * in Fortran 77 [BIBLI 18]. * * * * C++ Version By J-P Moreau, Paris. * * (www.jpmoreau.fr) * **********************************************************/ #include #include #define BIG 1e30 double X, Y; int i, N; double BESSK0(double X); double BESSK1(double X); double BESSI0(double X); double BESSI1(double X); double BESSK(int N, double X) { /* ----------------------------------------------------------------------- ! CE SOUS-PROGRAMME CALCULE LA FONCTION BESSEL MODIFIFIEE 3E ESPECE ! D'ORDRE N ENTIER POUR TOUT X REEL POSITIF > 0. ON UTILISE ICI LA ! FORMULE DE RECURRENCE CLASSIQUE EN PARTANT DE BESSK0 ET BESSK1. ! ! THIS ROUTINE CALCULATES THE MODIFIED BESSEL FUNCTION OF THE THIRD ! KIND OF INTEGER ORDER, N FOR ANY POSITIVE REAL ARGUMENT, X. THE ! CLASSICAL RECURSION FORMULA IS USED, STARTING FROM BESSK0 AND BESSK1. ! ------------------------------------------------------------------------ ! REFERENCE: ! C.W.CLENSHAW, CHEBYSHEV SERIES FOR MATHEMATICAL FUNCTIONS, ! MATHEMATICAL TABLES, VOL.5, 1962. ! ----------------------------------------------------------------------*/ double TOX,BK,BKM,BKP; int J; if (N == 0) return BESSK0(X); if (N == 1) return BESSK1(X); if (X == 0.0) return BIG; //arbitrary big value TOX = 2.0/X; BK = BESSK1(X); BKM = BESSK0(X); for (J=1; J