diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/hyper/pages/nags.ht | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/hyper/pages/nags.ht')
-rw-r--r-- | src/hyper/pages/nags.ht | 7689 |
1 files changed, 7689 insertions, 0 deletions
diff --git a/src/hyper/pages/nags.ht b/src/hyper/pages/nags.ht new file mode 100644 index 00000000..c6ee4a2c --- /dev/null +++ b/src/hyper/pages/nags.ht @@ -0,0 +1,7689 @@ +\begin{page}{manpageXXs}{NAG On-line Documentation: s} +\beginscroll +\begin{verbatim} + + + + S(3NAG) Foundation Library (12/10/92) S(3NAG) + + + + S -- Approximations of Special Functions Introduction -- S + Chapter S + Approximations of Special Functions + + 1. Scope of the Chapter + + This chapter is concerned with the provision of some commonly + occurring physical and mathematical functions. + + 2. Background to the Problems + + The majority of the routines in this chapter approximate real- + valued functions of a single real argument, and the techniques + involved are described in Section 2.1. In addition the chapter + contains routines for elliptic integrals (see Section 2.2), + Bessel and Airy functions of a complex argument (see Section 2.3) + , and exponential of a complex argument. + + 2.1. Functions of a Single Real Argument + + Most of the routines for functions of a single real argument have + been based on truncated Chebyshev expansions. This method of + approximation was adopted as a compromise between the conflicting + requirements of efficiency and ease of implementation on many + different machine ranges. For details of the reasons behind this + choice and the production and testing procedures followed in + constructing this chapter see Schonfelder [7]. + + Basically if the function to be approximated is f(x), then for + xis in [a,b] an approximation of the form + + + --' + f(x)=g(x) > C T (t) + -- r r + r=0 + + --' + is used, ( > denotes, according to the usual convention, a + -- + summation in which the first term is halved), where g(x) is some + suitable auxiliary function which extracts any singularities, + asymptotes and, if possible, zeros of the function in the range + in question and t=t(x) is a mapping of the general range [a,b] to + the specific range [-1,+1] required by the Chebyshev polynomials, + T (t). For a detailed description of the properties of the + r + Chebyshev polynomials see Clenshaw [5] and Fox and Parker [6]. + + The essential property of these polynomials for the purposes of + function approximation is that T (t) oscillates between +-1 and + n + it takes its extreme values n+1 times in the interval [-1,+1]. + Therefore, provided the coefficients C decrease in magnitude + r + sufficiently rapidly the error made by truncating the Chebyshev + expansion after n terms is approximately given by + + + E(t)~=C T (t) + n n + + That is the error oscillates between +-C and takes its extreme + n + value n+1 times in the interval in question. Now this is just the + condition that the approximation be a mini-max representation, + one which minimizes the maximum error. By suitable choice of the + interval, [a,b], the auxiliary function, g(x), and the mapping of + the independent variable, t(x), it is almost always possible to + obtain a Chebyshev expansion with rapid convergence and hence + truncations that provide near mini-max polynomial approximations + to the required function. The difference between the true mini- + max polynomial and the truncated Chebyshev expansion is seldom + sufficiently great to be of significance. + + The evaluation of the Chebyshev expansions follows one of two + methods. The first and most efficient, and hence most commonly + used, works with the equivalent simple polynomial. The second + method, which is used on the few occasions when the first method + proves to be unstable, is based directly on the truncated + Chebyshev series and uses backward recursion to evaluate the sum. + For the first method, a suitably truncated Chebyshev expansion + (truncation is chosen so that the error is less than the machine + precision) is converted to the equivalent simple polynomial. That + is we evaluate the set of coefficients b such that + r + + n-1 n-1 + -- r --' + y(t)= > b t = > C T (t). + -- r -- r r + r=0 r=0 + + The polynomial can then be evaluated by the efficient Horner's + method of nested multiplications, + + y(t)=(b +t(b +t(b +...t(b +tb )))...). + 0 1 2 n-2 n-1 + + This method of evaluation results in efficient routines but for + some expansions there is considerable loss of accuracy due to + cancellation effects. In these cases the second method is used. + It is well known that if + + b =C + n-1 n-1 + + b =2tb +C + n-2 n-1 n-2 + + b =2tb -b +C , j=n-3,n-4,...,0 + j j+1 j+2 j + + then + + --' 1 + > C T (t)= -(b -b ) + -- r r 2 0 2 + r=0 + + and this is always stable. This method is most efficiently + implemented by using three variables cyclically and explicitly + constructing the recursion. + + That is, + + (alpha) = C + n-1 + (beta) = 2t(alpha)+C + n-2 + (gamma) = 2t(beta)-(alpha)+C + n-3 + (alpha) = 2t(gamma)-(beta)+C + n-4 + (beta) = 2t(alpha)-(gamma)+C + n-5 + ... + ... + (alpha) = 2t(gamma)-(beta)+C (say) + 2 + (beta) = 2t(alpha)-(gamma)+C + 1 + 1 + y(t) = t(beta)-(alpha)+ -C + 2 0 + + The auxiliary functions used are normally functions compounded of + simple polynomial (usually linear) factors extracting zeros, and + the primary compiler-provided functions, sin, cos, ln, exp, sqrt, + which extract singularities and/or asymptotes or in some cases + basic oscillatory behaviour, leaving a smooth well-behaved + function to be approximated by the Chebyshev expansion which can + therefore be rapidly convergent. + + The mappings of [a,b] to [-1,+1] used, range from simple linear + mappings to the case when b is infinite and considerable + improvement in convergence can be obtained by use of a bilinear + form of mapping. Another common form of mapping is used when the + function is even, that is it involves only even powers in its + expansion. In this case an approximation over the whole interval + (x)2 + [-a,a] can be provided using a mapping t=2(-) -1. This embodies + (a) + the evenness property but the expansion in t involves all powers + and hence removes the necessity of working with an expansion with + half its coefficients zero. + + For many of the routines an analysis of the error in principle is + given, viz, if E and (nabla) are the absolute errors in function + and argument and (epsilon) and (delta) are the corresponding + relative errors, then + + E~=|f'(x)|(nabla) + + E~=|xf'(x)|(delta) + + | xf'(x)| + (epsilon)~=| ------|(delta) + | f(x) | + + If we ignore errors that arise in the argument of the function by + propagation of data errors etc and consider only those errors + that result from the fact that a real number is being represented + in the computer in floating-point form with finite precision, + then (delta) is bounded and this bound is independent of the + magnitude of x; e.g. on an 11-digit machine + + -11 + |(delta)|<=10 . + + (This of course implies that the absolute error (nabla)=x(delta) + is also bounded but the bound is now dependent on x). However + because of this the last two relations above are probably of more + interest. If possible the relative error propagation is + discussed; that is the behaviour of the error amplification + factor |xf'(x)/f(x)| is described, but in some cases, such as + near zeros of the function which cannot be extracted explicitly, + absolute error in the result is the quantity of significance and + here the factor |xf'(x)| is described. In general, testing of the + functions has shown that their error behaviour follows fairly + well these theoretical error behaviours. In regions, where the + error amplification factors are less than or of the order of one, + the errors are slightly larger than the above predictions. The + errors are here limited largely by the finite precision of + arithmetic in the machine but (epsilon) is normally no more than + a few times greater than the bound on (delta). In regions where + the amplification factors are large, order of ten or greater, the + theoretical analysis gives a good measure of the accuracy + obtainable. + + It should be noted that the definitions and notations used for + the functions in this chapter are all taken from Abramowitz and + Stegun [1]. Users are strongly recommended to consult this book + for details before using the routines in this chapter. + + 2.2. Approximations to Elliptic Integrals + + The functions provided here are symmetrised variants of the + classic elliptic integrals. These alternative definitions have + been suggested by Carlson (see [2], [3] and [4]) and he also + developed the basic algorithms used in this chapter. + + The standard integral of the first kind is represented by + + + infty + 1 / dt + R (x,y,z)= - | ----------------- + F 2 / + 0 \/(t+x)(t+y)(t+z) + + where x,y,z>=0 and at most one may be equal to zero. + + 1 + The normalisation factor, -, is chosen so as to make + 2 + + + + R (x,x,x)=1/\/x. + F + + If any two of the variables are equal, R degenerates into the + F + second function + + + infty + 1 / dt + R (x,y)=R (x,y,y)= - | ---------- + C F 2 / + 0 \/t+x(t+y) + + where the argument restrictions are now x>=0 and y/=0. + + This function is related to the logarithm or inverse hyperbolic + functions if 0<y<x, and to the inverse circular functions if + 0<=x<=y. + + The integrals of the second kind are defined by + + infty + 3 / dt + R (x,y,z)= - | ------------------- + D 2 / + 0 / 3 + \/ (t+x)(t+y)(t+z) + + with z>0, x>=0 and y>=0 but only one of x or y may be zero. + + The function is a degenerate special case of the integral of the + third kind + + infty + 3 / dt + R (x,y,z,(rho))= - | ---------------------------- + J 2 / ( ) + 0 (\/(t+x)(t+y)(t+z))(t+(rho)) + + with (rho)/=0, x,y,z>=0 with at most one equality holding. Thus + R (x,y,z)=R (x,y,z,z). The normalisation of both these functions + D J + is chosen so that + + + + R (x,x,x)=R (x,x,x,x)=1/(x\/x) + D J + + The algorithms used for all these functions are based on + duplication theorems. These allow a recursion system to be + established which constructs a new set of arguments from the old + using a combination of arithmetic and geometric means. The value + of the function at the original arguments can then be simply + related to the value at the new arguments. These recursive + reductions are used until the arguments differ from the mean by + an amount small enough for a Taylor series about the mean to give + sufficient accuracy when retaining terms of order less than six. + Each step of the recurrences reduces the difference from the mean + by a factor of four, and as the truncation error is of order six, + -n + the truncation error goes like (4096) , where n is the number of + iterations. + + The above forms can be related to the more traditional canonical + forms (see Abramowitz and Stegun [1], 17.2). + + 2 2 2 + If we write q=cos (phi),r=1-m.sin (phi),s=1+n.sin (phi), where + 1 + 0<(phi)<= -(pi), we have: the elliptic integral of the first + 2 + kind: + + sin(phi) -1/2 1-/2 + / 2 2 + F((phi)|m)= | (1-t ) (1-mt ) dt=sin(phi).R (q,r,1); + / F + 0 + + the elliptic integral of the second kind: + + sin(phi) -1/2 -1/2 + / 2 2 + E((phi)|m) = | (1-t ) (1-mt ) dt + / + 0 + 1 3 + = sin(phi).R (q,r,1)- -m.sin (phi).R (q,r,1) + F 3 D + + the elliptic integral of the third kind: + + sin(phi) -1/2 -1/2 + / 2 2 2 -1 + (Pi)(n;(phi)|m) = | (1-t ) (1-mt ) (1+nt ) dt + / + 0 + 1 3 + =sin(phi).R (q,r,1)- -n.sin (phi).R (q,r,1,s) + F 3 J + + Also the complete elliptic integral of the first kind: + + (pi)/2 + / 2 -1/2 + K(m)= | (1-m.sin (theta)) d(theta)=R (0,1-m,1); + / F + 0 + + the complete elliptic integral of the second kind: + + + (pi)/2 + / 2 1/2 1 + E(m)= | (1-m.sin (theta)) d(theta)=R (0,1-m,1)- -mR (0,1-m,1). + / F 3 D + 0 + + + 2.3. Bessel and Airy Functions of a Complex Argument + + The routines for Bessel and Airy functions of a real argument are + based on Chebyshev expansions, as described in Section 2.1. The + routines for functions of a complex argument, however, use + different methods. These routines relate all functions to the + modified Bessel functions I (z) and K (z) computed in the + (nu) (nu) + right-half complex plane, including their analytic continuations. + I and K are computed by different methods according to + (nu) (nu) + the values of zand (nu). The methods include power series, + asymptotic expansions and Wronskian evaluations. The relations + between functions are based on well known formulae (see + Abramowitz and Stegun [1]). + + 2.4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Carlson B C (1977) Special Functions of Applied Mathematics. + Academic Press. + + [3] Carlson B C (1965) On Computing Elliptic Integrals and + Functions. J Math Phys. 44 36--51. + + [4] Carlson B C (1977) Elliptic Integrals of the First Kind. + SIAM J Math Anal. 8 231--242. + + [5] Clenshaw C W (1962) Mathematical Tables. Chebyshev Series + for Mathematical Functions. HMSO. + + [6] Fox L and Parker I B (1968) Chebyshev Polynomials in + Numerical Analysis. Oxford University Press. + + [7] Schonfelder J L (1976 ) The Production of Special Function + Routines for a Multi-Machine Library. Software Practice and + Experience. 6(1) + + 3. Recommendations on Choice and Use of Routines + + 3.1. Elliptic Integrals + + IMPORTANT ADVICE: users who encounter elliptic integrals in the + course of their work are strongly recommended to look at + transforming their analysis directly to one of the Carlson forms, + rather than the traditional canonical Legendre forms. In general, + the extra symmetry of the Carlson forms is likely to simplify the + analysis, and these symmetric forms are much more stable to + calculate. + + The routine S21BAF for R is largely included as an auxiliary to + C + the other routines for elliptic integrals. This integral + essentially calculates elementary functions, e.g. + + + (( 1+x)2 ) + lnx=(x-1).R (( ---) ,x),x>0; + C(( 2 ) ) + + 2 + arcsinx=x.R (1-x ,1),|x|<=1; + C + + 2 + arcsinhx=x.R (1+x ,1), etc + C + + In general this method of calculating these elementary functions + is not recommended as there are usually much more efficient + specific routines available in the Library. However, S21BAF may + be used, for example, to compute lnx/(x-1) when x is close to 1, + without the loss of significant figures that occurs when lnx and + x-1 are computed separately. + + 3.2. Bessel and Airy Functions + + For computing the Bessel functions J (x), Y (x), I (x) + (nu) (nu) (nu) + and K (x) where x is real and (nu)=0 or 1, special routines + (nu) + are provided, which are much faster than the more general + routines that allow a complex argument and arbitrary real (nu)>=0 + functions and their derivatives Ai(x), Bi(x), Ai'(x), Bi'(x) for + a real argument which are much faster than the routines for + complex arguments. + + 3.3. Index + + Airy function, Ai, real argument S17AGF + Airy function, Ai', real argument S17AJF + Airy function, Ai or Ai', complex argument, optionally S17DGF + scaled + Airy function, Bi, real argument S17AHF + Airy function, Bi', real argument S17AKF + Airy function, Bi or Bi', complex argument, optionally S17DHF + scaled + Bessel function, J , real argument S17AEF + 0 + Bessel function, J , real argument S17AFF + 1 + Bessel function, J , complex argument, optionally S17DEF + (nu) + scaled + Bessel function, Y , real argument S17ACF + 0 + Bessel function, Y , real argument S17ADF + 1 + Bessel function, Y , complex argument, optionally S17DCF + (nu) + scaled + Complement of the Error function S15ADF + Cosine Integral S13ACF + Elliptic integral, symmetrised, degenerate of 1st kind, S21BAF + R + C + Elliptic integral, symmetrised, of 1st kind, R S21BBF + F + Elliptic integral, symmetrised, of 2nd kind, R S21BCF + D + Elliptic integral, symmetrised, of 3rd kind, R S21BDF + J + Erf, real argument S15AEF + Erfc, real argument S15ADF + Error function S15AEF + Exponential, complex S01EAF + Exponential Integral S13AAF + Fresnel Integral, C S20ADF + Fresnel Integral, S S20ACF + Gamma function S14AAF + Gamma function, incomplete S14BAF + Generalized Factorial function S14AAF + (1) (2) + Hankel function H or H , complex argument, S17DLF + (nu) (nu) + optionally scaled + Incomplete Gamma function S14BAF + Jacobian elliptic functions, sn, cn, dn S21CAF + Kelvin function, bei x S19ABF + Kelvin function, ber x S19AAF + Kelvin function, kei x S19ADF + Kelvin function, ker x S19ACF + Logarithm of Gamma function S14ABF + Modified Bessel function, I , real argument S18AEF + 0 + Modified Bessel function, I , real argument S18AFF + 1 + Modified Bessel function, I , complex argument, S18DEF + (nu) + optionally scaled + Modified Bessel function, K , real argument S18ACF + 0 + Modified Bessel function, K , real argument S18ADF + 1 + Modified Bessel function, K , complex argument, S18DCF + (nu) + optionally scaled + Sine integral S13ADF + + + S -- Approximations of Special Functions Contents -- S + Chapter S + + Approximations of Special Functions + + z + S01EAF Complex exponential, e + + S13AAF Exponential integral E (x) + 1 + + S13ACF Cosine integral Ci(x) + + S13ADF Sine integral Si(x) + + S14AAF Gamma function + + S14ABF Log Gamma function + + S14BAF Incomplete gamma functions P(a,x) and Q(a,x) + + S15ADF Complement of error function erfc x + + S15AEF Error function erf x + + S17ACF Bessel function Y (x) + 0 + + S17ADF Bessel function Y (x) + 1 + + S17AEF Bessel function J (x) + 0 + + S17AFF Bessel function J (x) + 1 + + S17AGF Airy function Ai(x) + + S17AHF Airy function Bi(x) + + S17AJF Airy function Ai'(x) + + S17AKF Airy function Bi'(x) + + S17DCF Bessel functions Y (z), real a>=0, complex z, + (nu)+a + (nu)=0,1,2,... + + S17DEF Bessel functions J (z), real a>=0, complex z, + (nu)+a + (nu)=0,1,2,... + + S17DGF Airy functions Ai(z) and Ai'(z), complex z + + S17DHF Airy functions Bi(z) and Bi'(z), complex z + + (j) + S17DLF Hankel functions H (z), j=1,2, real a>=0, complex z, + (nu)+a + (nu)=0,1,2,... + + S18ACF Modified Bessel function K (x) + 0 + + S18ADF Modified Bessel function K (x) + 1 + + S18AEF Modified Bessel function I (x) + 0 + + S18AFF Modified Bessel function I (x) + 1 + + S18DCF Modified Bessel functions K (z), real a>=0, complex + (nu)+a + z, (nu)=0,1,2,... + + S18DEF Modified Bessel functions I (z), real a>=0, complex + (nu)+a + z, (nu)=0,1,2,... + + S19AAF Kelvin function ber x + + S19ABF Kelvin function bei x + + S19ACF Kelvin function ker x + + S19ADF Kelvin function kei x + + S20ACF Fresnel integral S(x) + + S20ADF Fresnel integral C(x) + + S21BAF Degenerate symmetrised elliptic integral of 1st kind + R (x,y) + C + + S21BBF Symmetrised elliptic integral of 1st kind R (x,y,z) + F + + S21BCF Symmetrised elliptic integral of 2nd kind R (x,y,z) + D + + S21BDF Symmetrised elliptic integral of 3rd kind R (x,y,z,r) + J + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs01eaf}{NAG On-line Documentation: s01eaf} +\beginscroll +\begin{verbatim} + + + + S01EAF(3NAG) Foundation Library (12/10/92) S01EAF(3NAG) + + + + S01 -- Approximations of Special Functions S01EAF + S01EAF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + z + S01EAF evaluates the exponential function e , for complex z. + + 2. Specification + + COMPLEX(KIND(1.0D0)) FUNCTION S01EAF (Z, IFAIL) + INTEGER IFAIL + COMPLEX(KIND(1.0D0)) Z + + 3. Description + + z + This routine evaluates the exponential function e , taking care + to avoid machine overflow, and giving a warning if the result + cannot be computed to more than half precision. The function is + z x + evaluated as e =e (cosy+isiny), where x and y are the real and + imaginary parts respectively of z. + + Since cosy and siny are less than or equal to 1 in magnitude, it + x x x + is possible that e may overflow although e cosy or e siny does + x+ln|cosy| + not. In this case the alternative formula sign(cosy)e + is used for the real part of the result, and + x+ln|siny| + sign(siny)e for the imaginary part. If either part of + the result still overflows, a warning is returned through + parameter IFAIL. + + If Im z is too large, precision may be lost in the evaluation of + siny and cosy. Again, a warning is returned through IFAIL. + + 4. References + + None. + + 5. Parameters + + 1: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument z of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + The real part of the result overflows, and is set to the + largest safe number with the correct sign. The imaginary + part of the result is meaningful. + + IFAIL= 2 + The imaginary part of the result overflows, and is set to + the largest safe number with the correct sign. The real part + of the result is meaningful. + + IFAIL= 3 + Both real and imaginary parts of the result overflow, and + are set to the largest safe number with the correct signs. + + IFAIL= 4 + The computed result is accurate to less than half precision, + due to the size of Im z. + + IFAIL= 5 + The computed result has no precision, due to the size of Im + z, and is set to zero. + + 7. Accuracy + + Accuracy is limited in general only by the accuracy of the + Fortran intrinsic functions in the computation of siny, cosy and + x + e , where x=Re z, y=Im z. As y gets larger, precision will + probably be lost due to argument reduction in the evaluation of + the sine and cosine functions, until the warning error IFAIL = 4 + + + occurs when y gets larger than \/1/(epsilon), where (epsilon) is + the machine precision. Note that on some machines, the intrinsic + functions SIN and COS will not operate on arguments larger than + + + about \/1/(epsilon), and so IFAIL can never return as 4. + + In the comparatively rare event that the result is computed by + x+ln|cosy| x+ln|siny| + the formulae sign(cosy)e and sign(siny)e , a + further small loss of accuracy may be expected due to rounding + errors in the logarithmic function. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument z from a file, + evaluates the function at each value of z and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs13aaf}{NAG On-line Documentation: s13aaf} +\beginscroll +\begin{verbatim} + + + + S13AAF(3NAG) Foundation Library (12/10/92) S13AAF(3NAG) + + + + S13 -- Approximations of Special Functions S13AAF + S13AAF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S13AAF returns the value of the exponential integral E (x), via + 1 + the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S13AAF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + The routine calculates an approximate value for + + infty + / e-u + E (x)= | - du , x>0. + 1 / u + x + + For 0<x<=4, the approximation is based on the Chebyshev expansion + + -- 1 + E (x)=y(t)-lnx= > 'a T (t)-lnx , where t= -x-1. + 1 -- r r 2 + r + + For x>4, + + -x -x + e e --' + E (x)= ---y(t)= --- > a T (t), + 1 x x -- r r + r + + 11.25-x + where t=-1.0+14.5/(x+3.25)= -------. + 3.25+x + + In both cases, -1<=t<=+1. + + To guard against producing underflows, if x>x the result is set + hi + directly to zero. For the value x see the Users' Note for your + hi + implementation. + + 4. References + + [1] Abramowitz M and Stegun I A (1965) Handbook of Mathematical + Functions. Dover Publications. Ch. 26. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + 0. + + 2: IFAIL -- INTEGER Input/Output + Before entry, IFAIL must be assigned a value. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + Unless the routine detects an error (see Section 6), IFAIL + contains 0 on exit. + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + The routine has been called with an argument less than or + equal to zero for which the function is not defined. The + result returned is zero. + + 7. Accuracy + + If (delta) and (epsilon) are the relative errors in argument and + result respectively, then in principle, + + | -x | + | e | + |(epsilon)|~=| -----*(delta)| + | E (x) | + | 1 | + + so the relative error in the argument is amplified in the result + -x + by at least a factor e /E (x). The equality should hold if + 1 + (delta) is greater than the machine precision ((delta) due to + data errors etc) but if (delta) is simply a result of round-off + in the machine representation, it is possible that an extra + figure may be lost in internal calculation and round-off. + + The behaviour of this amplification factor is shown in Figure 1. + + + Figure 1 + Please see figure in printed Reference Manual + + It should be noted that, for small x, the amplification factor + tends to zero and eventually the error in the result will be + limited by machine precision. + + For large x, + + (epsilon)~x(delta)=(Delta), + + the absolute error in the argument. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs13acf}{NAG On-line Documentation: s13acf} +\beginscroll +\begin{verbatim} + + + + S13ACF(3NAG) Foundation Library (12/10/92) S13ACF(3NAG) + + + + S13 -- Approximations of Special Functions S13ACF + S13ACF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S13ACF returns the value of the cosine integral + + x + / cosu-1 + Ci(x)=(gamma)+lnx+ | ------du, x>0 + / u + 0 + + via the routine name, where (gamma) denotes Euler's constant. + + 2. Specification + + DOUBLE PRECISION FUNCTION S13ACF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + The routine calculates an approximate value for Ci(x). + + For 0<x<=16 it is based on the Chebyshev expansion + + --' ( x )2 + Ci(x)=lnx+ > a T (t) , t=2( --) -1. + -- r r ( 16) + r=0 + + For 16<x<x where the value of x is given in the Users' Note + hi hi + for your implementation, + + f(x)sinx g(x)cosx + Ci(x)= --------- -------- + x 2 + x + + --' --' ( 16)2 + where f(x)= > f T (t) and g(x)= > g T (t), t=2( --) -1. + -- r r -- r r ( x ) + r=0 r=0 + + For x>=x , Ci(x)=0 to within the accuracy possible (see Section + hi + 7). + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + The routine has been called with an argument less than or + equal to zero for which the function is not defined. The + result returned is zero. + + 7. Accuracy + + If E and (epsilon) are the absolute and relative errors in the + result and (delta) is the relative error in the argument then in + principle these are related by + + | (delta)cosx| + |E|~=|(delta)cosx| and |(epsilon)|~=| -----------|. + | Ci(x) | + + That is accuracy will be limited by machine precision near the + origin and near the zeros of cosx, but near the zeros of Ci(x) + only absolute accuracy can be maintained. + + The behaviour of this amplification is shown in Figure 1. + + + Figure 1 + Please see figure in printed Reference Manual + + sinx + For large values of x, Ci(x)~ ---- therefore + x + (epsilon)~(delta)xcotx and since (delta) is limited by the finite + precision of the machine it becomes impossible to return results + which have any relative accuracy. That is, when x>=1/(delta) we + have that |Ci(x)|<=1/x~E and hence is not significantly different + from zero. + + Hence x is chosen such that for values of x>=x , Ci(x) in + hi hi + principle would have values less than the machine precision and + so is essentially zero. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs13adf}{NAG On-line Documentation: s13adf} +\beginscroll +\begin{verbatim} + + + + S13ADF(3NAG) Foundation Library (12/10/92) S13ADF(3NAG) + + + + S13 -- Approximations of Special Functions S13ADF + S13ADF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S13ADF returns the value of the sine integral + + x + / sinu + Si(x)= | ----du, + / u + 0 + + via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S13ADF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + The routine calculates an approximate value for Si(x). + + For |x|<=16.0 it is based on the Chebyshev expansion + + --' ( x )2 + Si(x)=x > a T (t) , t=2( --) -1. + -- r r ( 16) + r=0 + + For 16<|x|<x , where x is an implementation dependent number, + hi hi + + { (pi) f(x)cosx g(x)sinx} + Si(x)=sign(x){ ----- --------- --------} + { 2 x 2 } + { x } + + --' --' ( 16)2 + where f(x)= > f T (t) and g(x)= > g T (t), t=2( --) -1. + -- r r -- r r ( x ) + r=0 r=0 + + 1 + For |x|>=x , Si(x)= -(pi)signx to within machine precision. + hi 2 + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + There are no failure exits from this routine. The parameter IFAIL + has been included for consistency with other routines in this + chapter. + + 7. Accuracy + + If (delta) and (epsilon) are the relative errors in the argument + and result, respectively, then in principle + + | (delta)sinx| + |(epsilon)|~=| -----------|. + | Si(x) | + + The equality may hold if (delta) is greater than the machine + precision ((delta) due to data errors etc) but if (delta) is + simply due to round-off in the machine representation, then since + the factor relating (delta) to (epsilon) is always less than one, + the accuracy will be limited by machine precision. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs14aaf}{NAG On-line Documentation: s14aaf} +\beginscroll +\begin{verbatim} + + + + S14AAF(3NAG) Foundation Library (12/10/92) S14AAF(3NAG) + + + + S14 -- Approximations of Special Functions S14AAF + S14AAF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S14AAF returns the value of the Gamma function (Gamma)(x), via + the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S14AAF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Gamma function + (Gamma)(x). The routine is based on the Chebyshev expansion: + + --' + (Gamma)(1+u)= > a T (t) , where 0<=u<1 , t=2u-1, + -- r r + r=0 + + and uses the property (Gamma)(1+x)=x(Gamma)(x). If x=N+1+u where + N is integral and 0<=u<1 then it follows that: + + for N>0 (Gamma)(x)=(x-1)(x-2)...(x-N)(Gamma)(1+u), + + for N=0 (Gamma)(x)=(Gamma)(1+u), + + (Gamma)(1+u) + for N<0 (Gamma)(x)= ---------------------. + x(x+1)(x+2)...(x-N-1) + + There are four possible failures for this routine: + + (i) if x is too large, there is a danger of overflow since + (Gamma)(x) could become too large to be represented in the + machine; + + (ii) if x is too large and negative, there is a danger of + underflow; + + (iii) if x is equal to a negative integer, (Gamma)(x) would + overflow since it has poles at such points; + + (iv) if x is too near zero, there is again the danger of + 1 + overflow on some machines. For small x, (Gamma)(x)~= -, and + x + on some machines there exists a range of non-zero but small + values of x for which 1/x is larger than the greatest + representable value. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X must + not be a negative integer. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + The argument is too large. On soft failure the routine + returns the approximate value of (Gamma)(x) at the nearest + valid argument. + + IFAIL= 2 + The argument is too large and negative. On soft failure the + routine returns zero. + + IFAIL= 3 + The argument is too close to zero. On soft failure the + routine returns the approximate value of (Gamma)(x) at the + nearest valid argument. + + IFAIL= 4 + The argument is a negative integer, at which value + (Gamma)(x) is infinite. On soft failure the routine returns + a large positive value. + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and the result respectively. If (delta) is somewhat larger than + the machine precision (i.e., is due to data errors etc), then + (epsilon) and (delta) are approximately related by: + + (epsilon)~=|x(Psi)(x)|(delta) + + (provided (epsilon) is also greater than the representation + (Gamma)'(x) + error). Here (Psi)(x) is the digamma function -----------. + (Gamma)(x) + Figure 1 shows the behaviour of the error amplification factor + |x(Psi)(x)|. + + + Figure 1 + Please see figure in printed Reference Manual + + If (delta) is of the same order as machine precision, then + rounding errors could make (epsilon) slightly larger than the + above relation predicts. + + There is clearly a severe, but unavoidable, loss of accuracy for + arguments close to the poles of (Gamma)(x) at negative integers. + However relative accuracy is preserved near the pole at x=0 right + up to the point of failure arising from the danger of overflow. + + Also accuracy will necessarily be lost as x becomes large since + in this region + + (epsilon)~=(delta)xlnx. + + However since (Gamma)(x) increases rapidly with x, the routine + must fail due to the danger of overflow before this loss of + accuracy is too great. (e.g. for x=20, the amplification factor + ~= 60.) + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs14abf}{NAG On-line Documentation: s14abf} +\beginscroll +\begin{verbatim} + + + + S14ABF(3NAG) Foundation Library (12/10/92) S14ABF(3NAG) + + + + S14 -- Approximations of Special Functions S14ABF + S14ABF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S14ABF returns a value for the logarithm of the Gamma function, + ln(Gamma)(x), via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S14ABF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to ln(Gamma)(x). It is + based on two Chebyshev expansions. + + For 0<x<=x , ln(Gamma)(x)=-lnx to within machine accuracy. + small + + For x <x<=15.0, the recursive relation + small + (Gamma)(1+x)=x(Gamma)(x) is used to reduce the calculation to one + involving (Gamma)(1+u), 0<=u<1 which is evaluated as: + + --' + (Gamma)(1+u)= > a T (t), t=2u-1. + -- r r + r=0 + + Once (Gamma)(x) has been calculated, the required result is + produced by taking the logarithm. + + For 15.0<x<=x , + big + + 1 1 + ln(Gamma)(x)=(x- -)lnx-x+ -ln2(pi)+y(x)/x + 2 2 + 2 + --' ( 15) + where y(x)= > b T (t), t=2( --) -1. + -- r r ( x ) + r=0 + + For x <x<=x the term y(x)/x is negligible and so its + big vbig + calculation is omitted. + + For x>x there is a danger of setting overflow so the routine + vbig + must fail. + + For x<=0.0 the function is not defined and the routine fails. + + Note: x is calculated so that if x<x , (Gamma)(x)=1/x to + small small + within machine accuracy. x is calculated so that if x>x , + big big + + 1 1 + ln(Gamma)(x)=(x- -)lnx-x+ -ln2(pi) + 2 2 + + to within machine accuracy. x is calculated so that + vbig + ln(Gamma)(x ) is close to the value returned by X02ALF(*). + vbig + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X <= 0.0, the function is undefined. On soft failure, the + routine returns zero. + + IFAIL= 2 + X is too large, the function would overflow. On soft + failure, the routine returns the value of the function at + the largest permissible argument. + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and result respectively, and E be the absolute error in the + result. + + If (delta) is somewhat larger than the relative machine + precision, then + + | x*(Psi)(x) | + E~=|x*(Psi)(x)|(delta) and (epsilon)~=| ------------|(delta) + | ln(Gamma)(x)| + + (Gamma)'(x) + where (Psi)(x) is the digamma function -----------. Figure 1 and + (Gamma)(x) + Figure 2 show the behaviour of these error amplification factors. + + + Figure 1 + Please see figure in printed Reference Manual + + Figure 2 + Please see figure in printed Reference Manual + + These show that relative error can be controlled, since except + near x=1 or 2 relative error is attenuated by the function or at + least is not greatly amplified. + + ( 1 ) + For large x, (epsilon)~=(1+ ---)(delta) and for small x, + ( lnx) + 1 + (epsilon)~= ---(delta). + lnx + + The function ln(Gamma)(x) has zeros at x=1 and 2 and hence + relative accuracy is not maintainable near those points. However + absolute accuracy can still be provided near those zeros as is + shown above. + + If however, (delta) is of the order of the machine precision, + then rounding errors in the routine's internal arithmetic may + result in errors which are slightly larger than those predicted + by the equalities. It should be noted that even in areas where + strong attenuation of errors is predicted the relative precision + is bounded by the effective machine precision. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs14baf}{NAG On-line Documentation: s14baf} +\beginscroll +\begin{verbatim} + + + + S14BAF(3NAG) Foundation Library (12/10/92) S14BAF(3NAG) + + + + S14 -- Approximations of Special Functions S14BAF + S14BAF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S14BAF computes values for the incomplete gamma functions P(a,x) + and Q(a,x). + + 2. Specification + + SUBROUTINE S14BAF (A, X, TOL, P, Q, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION A, X, TOL, P, Q + + 3. Description + + This subroutine evaluates the incomplete gamma functions in the + normalised form + + x + 1 / a-1 -t + P(a,x)= ---------- |t e dt, + (Gamma)(a) / + 0 + + infty + 1 / a-1 -t + Q(a,x)= ---------- | t e dt, + (Gamma)(a) / + x + + with x>=0 and a>0, to a user-specified accuracy. With this + normalisation, P(a,x)+Q(a,x)=1. + + Several methods are used to evaluate the functions depending on + the arguments a and x, the methods including Taylor expansion for + P(a,x), Legendre's continued fraction for Q(a,x), and power + series for Q(a,x). When both a and x are large, and a~=x, the + uniform asymptotic expansion of Temme [3] is employed for greater + efficiency - specifically, this expansion is used when a>=20 and + 0.7a<=x<=1.4a. + + Once either of P or Q is computed, the other is obtained by + subtraction from 1. In order to avoid loss of relative precision + in this subtraction, the smaller of P and Q is computed first. + + This routine is derived from subroutine GAM in Gautschi [2]. + + 4. References + + [1] Gautschi W (1979) A Computational Procedure for Incomplete + Gamma Functions. ACM Trans. Math. Softw. 5 466--481. + + [2] Gautschi W (1979) Algorithm 542: Incomplete Gamma Functions. + ACM Trans. Math. Softw. 5 482--489. + + [3] Temme N M (1987) On the Computation of the Incomplete Gamma + Functions for Large Values of the Parameters. Algorithms for + Approximation. (ed J C Mason and M G Cox) Oxford University + Press. + + 5. Parameters + + 1: A -- DOUBLE PRECISION Input + On entry: the argument a of the functions. Constraint: A > + 0.0. + + 2: X -- DOUBLE PRECISION Input + On entry: the argument x of the functions. Constraint: X >= + 0.0. + + 3: TOL -- DOUBLE PRECISION Input + On entry: the relative accuracy required by the user in the + results. If S14BAF is entered with TOL greater than 1.0 or + less than machine precision, then the value of machine + precision is used instead. + + 4: P -- DOUBLE PRECISION Output + + 5: Q -- DOUBLE PRECISION Output + On exit: the values of the functions P(a,x) and Q(a,x) + respectively. + + 6: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + On entry A <= 0.0. + + IFAIL= 2 + On entry X < 0.0. + + IFAIL= 3 + Convergence of the Taylor series or Legendre continued + fraction fails within 600 iterations. This error is + extremely unlikely to occur; if it does, contact NAG. + + 7. Accuracy + + There are rare occasions when the relative accuracy attained is + somewhat less than that specified by parameter TOL. However, the + error should never exceed more than one or two decimal places. + Note also that there is a limit of 18 decimal places on the + achievable accuracy, because constants in the routine are given + to this precision. + + 8. Further Comments + + The time taken for a call of S14BAF depends on the precision + requested through TOL, and also varies slightly with the input + arguments a and x. + + 9. Example + + The example program reads values of the argument a and x from a + file, evaluates the function and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs15adf}{NAG On-line Documentation: s15adf} +\beginscroll +\begin{verbatim} + + + + S15ADF(3NAG) Foundation Library (12/10/92) S15ADF(3NAG) + + + + S15 -- Approximations of Special Functions S15ADF + S15ADF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S15ADF returns the value of the complementary error function, + erfcx, via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S15ADF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + The routine calculates an approximate value for the complement of + the error function + + 2 + infty -u + 2 / + erfc x= ------ | e du=1-erf x. + / + \/(pi) x + + For x>=0, it is based on the Chebyshev expansion + + 2 + -x + erfc x=e y(x), + + --' + where y(x)= > a T (t) and t=(x-3.75)/(x+3.75), -1<=t<=+1. + -- r r + r=0 + + For x>=x , where there is a danger of setting underflow, the + hi + result is returned as zero. + + 2 + -x + For x<0, erfc x=2-e y(|x|). + + For x<x <0, the result is returned as 2.0 which is correct to + low + within machine precision. The values of x and x are given in + hi low + the Users' Note for your implementation. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + There are no failure exits from this routine. The parameter IFAIL + has been included for consistency with other routines in this + chapter. + + 7. Accuracy + + If (delta) and (epsilon) are relative errors in the argument and + result, respectively, then in principle + + | 2 | + | -x | + | 2xe | + |(epsilon)|~=| ------------(delta)|. + | | + + | \/(pi)erfc x | + + That is, the relative error in the argument, x, is amplified by a + 2 + -x + 2xe + factor ------------ in the result. + + + \/(pi)erfc x + + The behaviour of this factor is shown in Figure 1. + + + Figure 1 + + Please see figure in printed Reference Manual + + 2x + It should be noted that near x=0 this factor behaves as ------ + + + \/(pi) + and hence the accuracy is largely determined by the machine + precision. Also for large negative x, where the factor is + 2 + -x + xe + ~ ------, accuracy is mainly limited by machine precision. + + + \/(pi) + 2 + However, for large positive x, the factor becomes ~2x and to an + extent relative accuracy is necessarily lost. The absolute + accuracy E is given by + + 2 + -x + 2xe + E~= ------(delta) + + + \/(pi) + + so absolute accuracy is guaranteed for all x. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs15aef}{NAG On-line Documentation: s15aef} +\beginscroll +\begin{verbatim} + + + + S15AEF(3NAG) Foundation Library (12/10/92) S15AEF(3NAG) + + + + S15 -- Approximations of Special Functions S15AEF + S15AEF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S15AEF returns the value of the error function erfx, via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S15AEF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + Evaluates the error function, + + 2 + x -t + 2 / + erf x = ------ |e dt. + / + \/(pi) 0 + + For |x|<=2, + --' 1 2 + erf x = x > a T (t), where t= -x -1. + -- r r 2 + r=0 + + For 2<|x|<x , + hi + { 2 } + { -x } + { e -- } x-7 + erf x = signx{1- --------- > 'b T (t)}, where t= ---. + { -- r r } x+3 + { |x|\/(pi) r=0 } + + For |x|>=x , + hi + erf x = signx. + + x is the value above which erf x=+-1 within machine precision. + hi + Its value is given in the Users' Note for your implementation. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + There are no failure exits from this routine. The parameter IFAIL + has been included for consistency with other routines in this + chapter. + + 7. Accuracy + + On a machine with approximately 11 significant figures the + routine agrees with available tables to 10 figures and + consistency checking with S15ADF of the relation + + erf x+erfc x=1.0 + + shows errors in at worst the 11th figure. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17acf}{NAG On-line Documentation: s17acf} +\beginscroll +\begin{verbatim} + + + + S17ACF(3NAG) Foundation Library (12/10/92) S17ACF(3NAG) + + + + S17 -- Approximations of Special Functions S17ACF + S17ACF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17ACF returns the value of the Bessel Function Y (x), via the + 0 + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17ACF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Bessel Function of + the second kind Y (x). + 0 + + Note: Y (x) is undefined for x<=0 and the routine will fail for + 0 + such arguments. + + The routine is based on four Chebyshev expansions: + + For 0<x<=8, + 2 + 2 --' --' ( x) + Y (x)= ----lnx > a T (t)+ > b T (t), with t=2( -) -1, + 0 (pi) -- r r -- r r ( 8) + r=0 r=0 + + For x>8, + + + + / 2 { ( (pi)) ( (pi))} + Y (x)= / -----{P (x)sin(x- ----)+Q (x)cos(x- ----)} + 0 \/ (pi)x{ 0 ( 4 ) 0 ( 4 )} + + --' + where P (x)= > c T (t), + 0 -- r r + r=0 + 2 + 8 --' ( 8) + and Q (x)= - > d T (t), with t=2( -) -1. + 0 x -- r r ( x) + r=0 + + 2 ( ( x) ) + For x near zero, Y (x)~= ----(ln( -)+(gamma)), where (gamma) + 0 (pi)( ( 2) ) + denotes Euler's constant. This approximation is used when x is + sufficiently small for the result to be correct to machine + precision. + + For very large x, it becomes impossible to provide results with + any reasonable accuracy (see Section 7), hence the routine fails. + Such arguments contain insufficient information to determine the + + + / 2 + phase of oscillation of Y (x); only the amplitude, / -, can be + 0 \/ x + determined and this is returned on soft failure. The range for + which this occurs is roughly related to the machine precision: + the routine will fail if x>~1/machine precision (see the Users' + Note for your implementation for details). + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Clenshaw C W (1962) Mathematical Tables. Chebyshev Series + for Mathematical Functions. HMSO. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large. On soft failure the routine returns the + amplitude of the Y oscillation, \/2/(pi)x. + 0 + + IFAIL= 2 + X <= 0.0, Y is undefined. On soft failure the routine + 0 + returns zero. + + 7. Accuracy + + Let (delta) be the relative error in the argument and E be the + absolute error in the result. (Since Y (x) oscillates about zero, + 0 + absolute error and not relative error is significant, except for + very small x.) + + If (delta) is somewhat larger than the machine representation + error (e.g. if (delta) is due to data errors etc), then E and + (delta) are approximately related by + + E~=|xY (x)|(delta) + 1 + + (provided E is also within machine bounds). Figure 1 displays the + behaviour of the amplification factor |xY (x)|. + 1 + + + Figure 1 + Please see figure in printed Reference Manual + + However, if (delta) is of the same order as the machine + representation errors, then rounding errors could make E slightly + larger than the above relation predicts. + + For very small x, the errors are essentially independent of + (delta) and the routine should provide relative accuracy bounded + by the machine precision. + + For very large x, the above relation ceases to apply. In this + + + / 2 ( (pi)) / 2 + region, Y (x)~= / -----sin(x- ----). The amplitude / ----- + 0 \/ (pi)x ( 4 ) / (pi)x + can be calculated with reasonable accuracy for all x, but + ( (pi)) (pi) + sin(x- ----) cannot. If x- ---- is written as 2N(pi)+(theta) + ( 4 ) 4 + ( (pi)) + where N is an integer and 0<=(theta)<2(pi), then sin(x- ----) is + ( 4 ) + -1 + determined by (theta) only. If x>~(delta) , (theta) cannot be + determined with any accuracy at all. Thus if x is greater than, + or of the order of the inverse of machine precision, it is + impossible to calculate the phase of Y (x) and the routine must + 0 + fail. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17adf}{NAG On-line Documentation: s17adf} +\beginscroll +\begin{verbatim} + + + + S17ADF(3NAG) Foundation Library (12/10/92) S17ADF(3NAG) + + + + S17 -- Approximations of Special Functions S17ADF + S17ADF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17ADF returns the value of the Bessel Function Y (x), via the + 1 + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17ADF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Bessel Function of + the second kind Y (x). + 1 + + Note: Y (x) is undefined for x<=0 and the routine will fail for + 1 + such arguments. + + The routine is based on four Chebyshev expansions: + + For 0<x<=8, + + 2 x --' 2 x --' + Y (x)= ----lnx - > a T (t)- ----x+ - > b T (t) , with t + 1 (pi) 8 -- r r (pi) 8 -- r r + r=0 r=0 + 2 + ( x) + =2( -) -1; + ( 8) + + + For x>8, + + + / 2 { ( (pi)) ( (pi))} + Y (x)= / -----{P (x)sin(x-3 ----)+Q (x)cos(x-3 ----)} + 1 \/ (pi)x{ 1 ( 4 ) 1 ( 4 )} + + --' + where P (x)= > c T (t), + 1 -- r r + r=0 + 2 + 8 --' ( 8) + and Q (x)= - > d T (t), with t=2( -) -1. + 1 x -- r r ( x) + r=0 + + 2 + For x near zero, Y (x)~=- -----. This approximation is used when + 1 (pi)x + x is sufficiently small for the result to be correct to machine + precision. For extremely small x, there is a danger of overflow + 2 + in calculating - ----- and for such arguments the routine will + (pi)x + fail. + + For very large x, it becomes impossible to provide results with + any reasonable accuracy (see Section 7), hence the routine fails. + Such arguments contain insufficient information to determine the + + + / 2 + phase of oscillation of Y (x), only the amplitude, / -----, + 1 \/ (pi)x + can be determined and this is returned on soft failure. The range + for which this occurs is roughly related to machine precision; + the routine will fail if x>~1/machine precision (see the Users' + Note for your implementation for details). + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Clenshaw C W (1962) Mathematical Tables. Chebyshev Series + for Mathematical Functions. HMSO. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large. On soft failure the routine returns the + + + / 2 + amplitude of the Y oscillation, / -----. + 1 \/ (pi)x + + IFAIL= 2 + X <= 0.0, Y is undefined. On soft failure the routine + 1 + returns zero. + + IFAIL= 3 + X is too close to zero, there is a danger of overflow. On + soft failure, the routine returns the value of Y (x) at the + 1 + smallest valid argument. + + 7. Accuracy + + Let (delta) be the relative error in the argument and E be the + absolute error in the result. (Since Y (x) oscillates about zero, + 1 + absolute error and not relative error is significant, except for + very small x.) + + If (delta) is somewhat larger than the machine precision (e.g. if + (delta) is due to data errors etc), then E and (delta) are + approximately related by: + + E~=|xY (x)-Y (x)|(delta) + 0 1 + + (provided E is also within machine bounds). Figure 1 displays the + behaviour of the amplification factor |xY (x)-Y (x)|. + 0 1 + + + Figure 1 + Please see figure in printed Reference Manual + + However, if (delta) is of the same order as machine precision, + then rounding errors could make E slightly larger than the above + relation predicts. + + For very small x, absolute error becomes large, but the relative + error in the result is of the same order as (delta). + + For very large x, the above relation ceases to apply. In this + 2(pi) ( 3(pi)) 2(pi) + region, Y (x)~= -----sin(x- -----). The amplitude ----- can be + 1 x ( 4 ) x + ( 3(pi)) + calculated with reasonable accuracy for all x, but sin(x- -----) + ( 4 ) + 3(pi) + cannot. If x- ----- is written as 2N(pi)+(theta) where N is an + 4 + ( 3(pi)) + integer and 0<=(theta)<2(pi), then sin(x- -----) is determined by + ( 4 ) + -1 + (theta) only. If x>(delta) , (theta) cannot be determined with + any accuracy at all. Thus if x is greater than, or of the order + of, the inverse of the machine precision, it is impossible to + calculate the phase of Y (x) and the routine must fail. + 1 + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17aef}{NAG On-line Documentation: s17aef} +\beginscroll +\begin{verbatim} + + + + S17AEF(3NAG) Foundation Library (12/10/92) S17AEF(3NAG) + + + + S17 -- Approximations of Special Functions S17AEF + S17AEF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17AEF returns the value of the Bessel Function J (x), via the + 0 + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17AEF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Bessel Function of + the first kind J (x). + 0 + + Note: J (-x)=J (x), so the approximation need only consider x>=0. + 0 0 + + The routine is based on three Chebyshev expansions: + + For 0<x<=8, 2 + --' ( x) + J (x)= > a T (t), with t=2( -) -1. + 0 -- r r ( 8) + r=0 + + For x>8, + + + / 2 { ( (pi)) ( (pi))} + J (x)= / -----{P (x)cos(x- ----)-Q (x)sin(x- ----)} + 0 \/ (pi)x{ 0 ( 4 ) 0 ( 4 )} + + --' + where P (x) = > b T (t), + 0 -- r r + r=0 + 2 + 8 --' ( 8) + and Q (x) = - > c T (t), with t=2( -) -1. + 0 x -- r r ( x) + r=0 + + For x near zero, J (x)~=1. This approximation is used when x is + 0 + sufficiently small for the result to be correct to machine + precision. + + For very large x, it becomes impossible to provide results with + any reasonable accuracy (see Section 7), hence the routine fails. + Such arguments contain insufficient information to determine the + + + / 2 + phase of oscillation of J (x); only the amplitude, / -------, + 0 \/ (pi)|x| + can be determined and this is returned on soft failure. The range + for which this occurs is roughly related to the machine + precision; the routine will fail if |x|>~1/machine precision (see + the Users' Note for your implementation). + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Clenshaw C W (1962) Mathematical Tables. Chebyshev Series + for Mathematical Functions. HMSO. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large. On soft failure the routine returns the + + + / 2 + amplitude of the J oscillation, / -------. + 0 \/ (pi)|x| + + 7. Accuracy + + Let (delta) be the relative error in the argument and E be the + absolute error in the result. (Since J (x) oscillates about zero, + 0 + absolute error and not relative error is significant.) + + If (delta) is somewhat larger than the machine precision (e.g. if + (delta) is due to data errors etc), then E and (delta) are + approximately related by: + + E~=|xJ (x)|(delta) + 1 + + (provided E is also within machine bounds). Figure 1 displays the + behaviour of the amplification factor |xJ (x)|. + 1 + + + Figure 1 + Please see figure in printed Reference Manual + + However, if (delta) is of the same order as machine precision, + then rounding errors could make E slightly larger than the above + relation predicts. + + For very large x, the above relation ceases to apply. In this + + + / 2 ( (pi)) + region, J (x)~= / -------cos(x- ----). The amplitude + 0 \/ (pi)|x| ( 4 ) + + + / 2 + / ------- can be calculated with reasonable accuracy for all x + \/ (pi)|x| + ( (pi)) (pi) + but cos(x- ----) cannot. If x- ---- is written as + ( 4 ) 4 + 2N(pi)+(theta) where N is an integer and 0 <= (theta) < 2(pi), + ( (pi)) -1 + then cos(x- ----) is determined by (theta) only. If x>~(delta) , + ( 4 ) + (theta) cannot be determined with any accuracy at all. Thus if x + is greater than, or of the order of, the inverse of the machine + precision, it is impossible to calculate the phase of J (x) and + 0 + the routine must fail. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17aff}{NAG On-line Documentation: s17aff} +\beginscroll +\begin{verbatim} + + + + S17AFF(3NAG) Foundation Library (12/10/92) S17AFF(3NAG) + + + + S17 -- Approximations of Special Functions S17AFF + S17AFF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17AFF returns the value of the Bessel Function J (x), via the + 1 + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17AFF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Bessel Function of + the first kind J (x). + 1 + + Note: J (-x)=-J (x), so the approximation need only consider x>=0 + 1 1 + + The routine is based on three Chebyshev expansions: + + For 0<x<=8, 2 + x --' ( x) + J (x)= - > a T (t) , with t=2( -) -1. + 1 8 -- r r ( 8) + r=0 + + For x>8, + + + / 2 { ( 3(pi)) ( 3(pi))} + J (x)= / ----x{P (x)cos(x- -----)-Q (x)sin(x- -----)} + 1 \/ (pi) { 1 ( 4 ) 1 ( 4 )} + + --' + whereP (x)= > b T (t), + 1 -- r r + r=0 + 2 + 8 --' ( 8) + and Q (x)= - > c T (t), with t=2( -) -1. + 1 x -- r r ( x) + r=0 + x + For x near zero, J (x)~= -. This approximation is used when x is + 1 2 + sufficiently small for the result to be correct to machine + precision. + + For very large x, it becomes impossible to provide results with + any reasonable accuracy (see Section 7), hence the routine fails. + Such arguments contain insufficient information to determine the + + + / 2 + phase of oscillation of J (x); only the amplitude, / -------, + 1 \/ (pi)|x| + can be determined and this is returned on soft failure. The range + for which this occurs is roughly related to the machine + precision; the routine will fail if |x|>~1/machine precision (see + the Users' Note for your implementation for details). + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Clenshaw C W (1962) Mathematical Tables. Chebyshev Series + for Mathematical Functions. HMSO. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large. On soft failure the routine returns the + + + / 2 + amplitude of the J oscillation, / -------. + 1 \/ (pi)|x| + + 7. Accuracy + + + Let (delta) be the relative error in the argument and E be the + absolute error in the result. (Since J (x) oscillates about zero, + 1 + absolute error and not relative error is significant.) + + If (delta) is somewhat larger than machine precision (e.g. if + (delta) is due to data errors etc), then E and (delta) are + approximately related by: + + E~=|xJ (x)-J (x)|(delta) + 0 1 + + (provided E is also within machine bounds). Figure 1 displays the + behaviour of the amplification factor |xJ (x)-J (x)|. + 0 1 + + + Figure 1 + Please see figure in printed Reference Manual + + However, if (delta) is of the same order as machine precision, + then rounding errors could make E slightly larger than the above + relation predicts. + + For very large x, the above relation ceases to apply. In this + + + / 2 ( 3(pi)) + region, J (x)~= / -------cos(x- -----). The amplitude + 1 \/ (pi)|x| ( 4 ) + + + / 2 + / ------- can be calculated with reasonable accuracy for all x + \/ (pi)|x| + ( 3(pi)) 3(pi) + but cos(x- -----) cannot. If x- ----- is written as + ( 4 ) 4 + 2N(pi)+(theta) where N is an integer and 0<=(theta)<2(pi), then + ( 3(pi)) -1 + cos(x- -----) is determined by (theta) only. If x>~(delta) , + ( 4 ) + (theta) cannot be determined with any accuracy at all. Thus if x + is greater than, or of the order of, machine precision, it is + impossible to calculate the phase of J (x) and the routine must + 1 + fail. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17agf}{NAG On-line Documentation: s17agf} +\beginscroll +\begin{verbatim} + + + + S17AGF(3NAG) Foundation Library (12/10/92) S17AGF(3NAG) + + + + S17 -- Approximations of Special Functions S17AGF + S17AGF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17AGF returns a value for the Airy function, Ai(x), via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17AGF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Airy function, + Ai(x). It is based on a number of Chebyshev expansions: + + For x<-5, + + a(t)sinz-b(t)cosz + Ai(x)= ----------------- + 1/4 + (-x) + + + + (pi) 2 / 3 + where z= ----+ -\/ -x , and a(t) and b(t) are expansions in the + 4 3 + 3 + ( 5) + variable t=-2( -) -1. + ( x) + + For -5<=x<=0, + + Ai(x)=f(t)-xg(t), + 3 + ( x) + where f and g are expansions in t=-2( -) -1. + ( 5) + + For 0<x<4.5, + + -3x/2 + Ai(x)=e y(t), + + where y is an expansion in t=4x/9-1. + + For 4.5<=x<9, + + -5x/2 + Ai(x)=e u(t), + + where u is an expansion in t=4x/9-3. + + For x>=9, + + -z + e v(t) + Ai(x)= -------, + 1/4 + x + + + + 2 / 3 ( 18) + where z= -\/ x and v is an expansion in t=2( --)-1. + 3 ( z ) + + For |x|< the machine precision, the result is set directly to + Ai(0). This both saves time and guards against underflow in + intermediate calculations. + + For large negative arguments, it becomes impossible to calculate + the phase of the oscillatory function with any precision and so + 2/3 + ( 3 ) + the routine must fail. This occurs if x<-( ----------) , where + ( 2(epsilon)) + (epsilon) is the machine precision. + + For large positive arguments, where Ai decays in an essentially + exponential manner, there is a danger of underflow so the routine + must fail. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large and positive. On soft failure, the routine + returns zero. + + IFAIL= 2 + X is too large and negative. On soft failure, the routine + returns zero. + + 7. Accuracy + + For negative arguments the function is oscillatory and hence + absolute error is the appropriate measure. In the positive region + the function is essentially exponential-like and here relative + error is appropriate. The absolute error, E, and the relative + error, (epsilon), are related in principle to the relative error + in the argument, (delta), by + + | xAi'(x)| + E~=|xAi'(x)|(delta), (epsilon)~=| -------|(delta). + | Ai(x) | + + In practice, approximate equality is the best that can be + expected. When (delta), (epsilon) or E is of the order of the + machine precision, the errors in the result will be somewhat + larger. + + For small x, errors are strongly damped by the function and hence + will be bounded by the machine precision. + + For moderate negative x, the error behaviour is oscillatory but + the amplitude of the error grows like + + 5/4 + ( E ) |x| + amplitude ( -------)~ ------. + ( (delta)) + \/(pi) + + + + 2 / 3 + However the phase error will be growing roughly like -\/ |x| + 3 + and hence all accuracy will be lost for large negative arguments + due to the impossibility of calculating sin and cos to any + + + 2 / 3 1 + accuracy if -\/ |x| > -------. + 3 (delta) + + For large positive arguments, the relative error amplification is + considerable: + + + + (epsilon) / 3 + ---------~\/ x . + (delta) + + This means a loss of roughly two decimal places accuracy for + arguments in the region of 20. However very large arguments are + not possible due to the danger of setting underflow and so the + errors are limited in practice. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17ahf}{NAG On-line Documentation: s17ahf} +\beginscroll +\begin{verbatim} + + + + S17AHF(3NAG) Foundation Library (12/10/92) S17AHF(3NAG) + + + + S17 -- Approximations of Special Functions S17AHF + S17AHF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17AHF returns a value of the Airy function, Bi(x), via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17AHF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Airy function + Bi(x). It is based on a number of Chebyshev expansions. + + For x<-5, + + a(t)cosz+b(t)sinz + Bi(x)= -----------------, + 1/4 + (-x) + + + + (pi) 2 / 3 + where z= ----+ -\/ -x and a(t) and b(t) are expansions in the + 4 3 + 3 + ( 5) + variable t=-2( -) -1. + ( x) + + For -5<=x<=0, + + + + Bi(x)=\/3(f(t)+xg(t)), + 3 + ( x) + where f and g are expansions in t=-2( -) -1. + ( 5) + + For 0<x<4.5, + + 11x/8 + Bi(x)=e y(t), + + where y is an expansion in t=4x/9-1. + + For 4.5<=x<=9, + + 5x/2 + Bi(x)=e v(t), + + where v is an expansion in t=4x/9-3. + + For x>=9, + + z + e u(t) + Bi(x)= ------, + 1/4 + x + + + + 2 / 3 ( 18) + where z= -\/ x and u is an expansion in t=2( --)-1. + 3 ( z ) + + For |x|< the machine precision, the result is set directly to + Bi(0). This both saves time and avoids possible intermediate + underflows. + + For large negative arguments, it becomes impossible to calculate + the phase of the oscillating function with any accuracy so the + 2/3 + ( 3 ) + routine must fail. This occurs if x<-( ----------) , where + ( 2(epsilon)) + (epsilon) is the machine precision. + + For large positive arguments, there is a danger of causing + overflow since Bi grows in an essentially exponential manner, so + the routine must fail. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large and positive. On soft failure, the routine + returns zero. + + IFAIL= 2 + X is too large and negative. On soft failure, the routine + returns zero. + + 7. Accuracy + + For negative arguments the function is oscillatory and hence + absolute error is the appropriate measure. In the positive region + the function is essentially exponential-like and here relative + error is appropriate. The absolute error, E, and the relative + error, (epsilon), are related in principle to the relative error + in the argument, (delta), by + + | xBi'(x)| + E~=|xBi'(x)|(delta), (epsilon)~=| -------|(delta). + | Bi(x) | + + In practice, approximate equality is the best that can be + expected. When (delta), (epsilon) or E is of the order of the + machine precision, the errors in the result will be somewhat + larger. + + For small x, errors are strongly damped and hence will be bounded + essentially by the machine precision. + + For moderate to large negative x, the error behaviour is clearly + oscillatory but the amplitude of the error grows like amplitude + 5/4 + ( E ) |x| + ( -------)~ ------. + ( (delta)) + \/(pi) + + + + 2 / 3 + However the phase error will be growing roughly as -\/ |x| and + 3 + hence all accuracy will be lost for large negative arguments. + + This is due to the impossibility of calculating sin and cos to + + + 2 / 3 1 + any accuracy if -\/ |x| > -------. + 3 (delta) + + For large positive arguments, the relative error amplification is + considerable: + + + + (epsilon) / 3 + ---------~\/ x . + (delta) + + This means a loss of roughly two decimal places accuracy for + arguments in the region of 20. However very large arguments are + not possible due to the danger of causing overflow and errors are + therefore limited in practice. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17ajf}{NAG On-line Documentation: s17ajf} +\beginscroll +\begin{verbatim} + + + + S17AJF(3NAG) Foundation Library (12/10/92) S17AJF(3NAG) + + + + S17 -- Approximations of Special Functions S17AJF + S17AJF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17AJF returns a value of the derivative of the Airy function + Ai(x), via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17AJF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the derivative of the + Airy function Ai(x). It is based on a number of Chebyshev + expansions. + + For x<-5, + + 4 [ b(t) ] + Ai'(x)=\/-x[a(t)cosz+ ------sinz], + [ (zeta) ] + + + + (pi) 2 / 3 + where z= ----+(zeta), (zeta)= -\/ -x and a(t) and b(t) are + 4 3 + 3 + ( 5) + expansions in variable t=-2( -) -1. + ( x) + + For -5<=x<=0, + + 2 + Ai'(x)=x f(t)-g(t), + 3 + ( x) + where f and g are expansions in t=-2( -) -1. + ( 5) + + For 0<x<4.5, + + -11x/8 + Ai'(x)=e y(t), + + ( x) + where y(t) is an expansion in t=4( -)-1. + ( 9) + + For 4.5<=x<9, + + -5x/2 + Ai'(x)=e v(t), + + ( x) + where v(t) is an expansion in t=4( -)-3. + ( 9) + + For x>=9, + + 4 -z + Ai'(x)=\/-xe u(t), + + + 2 / 3 ( 18) + where z= -\/ x and u(t) is an expansion in t=2( --)-1. + 3 ( z ) + + For |x|< the square of the machine precision, the result is set + directly to Ai'(0). This both saves time and avoids possible + intermediate underflows. + + For large negative arguments, it becomes impossible to calculate + a result for the oscillating function with any accuracy and so + 4/7 + ( ) + ( \/(pi) ) + the routine must fail. This occurs for x<-( ---------) , where + ( (epsilon)) + (epsilon) is the machine precision. + + For large positive arguments, where Ai' decays in an essentially + exponential manner, there is a danger of underflow so the routine + must fail. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large and positive. On soft failure, the routine + returns zero. + + IFAIL= 2 + X is too large and negative. On soft failure, the routine + returns zero. + + 7. Accuracy + + For negative arguments the function is oscillatory and hence + absolute error is the appropriate measure. In the positive region + the function is essentially exponential in character and here + relative error is needed. The absolute error, E, and the relative + error, (epsilon), are related in principle to the relative error + in the argument, (delta), by + + | 2 | + 2 | x Ai(x)| + E~=|x Ai(x)|(delta) (epsilon)~=| -------|(delta). + | Ai'(x) | + + In practice, approximate equality is the best that can be + expected. When (delta), (epsilon) or E is of the order of the + machine precision, the errors in the result will be somewhat + larger. + + For small x, positive or negative, errors are strongly attenuated + by the function and hence will be roughly bounded by the machine + precision. + + For moderate to large negative x, the error, like the function, + is oscillatory; however the amplitude of the error grows like + + 7/4 + |x| + ------. + + \/(pi) + + + Therefore it becomes impossible to calculate the function with + + + 7/4 \/(pi) + any accuracy if |x| > -------. + (delta) + + For large positive x, the relative error amplification is + considerable: + + + + (epsilon) / 3 + ---------~=\/ x . + (delta) + + However, very large arguments are not possible due to the danger + of underflow. Thus in practice error amplification is limited. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17akf}{NAG On-line Documentation: s17akf} +\beginscroll +\begin{verbatim} + + + + S17AKF(3NAG) Foundation Library (12/10/92) S17AKF(3NAG) + + + + S17 -- Approximations of Special Functions S17AKF + S17AKF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17AKF returns a value for the derivative of the Airy function + Bi(x), via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S17AKF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine calculates an approximate value for the derivative + of the Airy function Bi(x). It is based on a number of Chebyshev + expansions. + + For x<-5, + + 4 [ b(t) ] + Bi'(x)=\/-x[-a(t)sinz+ ------cosz], + [ (zeta) ] + + + + (pi) 2 / 3 + where z= ----+(zeta),(zeta)= -\/ -x and a(t) and b(t) are + 4 3 + 3 + ( 5) + expansions in the variable t=-2( -) -1. + ( x) + + For -5<=x<=0, + + 2 + Bi'(x)=\/3(x f(t)+g(t)), + 3 + ( x) + where f and g are expansions in t=-2( -) -1. + ( 5) + + For 0<x<4.5, + + 3x/2 + Bi'(x)=e y(t), + + where y(t) is an expansion in t=4x/9-1. + + For 4.5<=x<9, + + 21x/8 + Bi'(x)=e u(t), + + where u(t) is an expansion in t=4x/9-3. + + For x>=9, + + 4 z + Bi'(x)=\/xe v(t), + + + + 2 / 3 ( 18) + where z= -\/ x and v(t) is an expansion in t=2( --)-1. + 3 ( z ) + + For |x|< the square of the machine precision, the result is set + directly to Bi'(0). This saves time and avoids possible + underflows in calculation. + + For large negative arguments, it becomes impossible to calculate + a result for the oscillating function with any accuracy so the + 4/7 + ( ) + ( \/(pi) ) + routine must fail. This occurs for x<-( ---------) , where + ( (epsilon)) + (epsilon) is the machine precision. + + For large positive arguments, where Bi' grows in an essentially + exponential manner, there is a danger of overflow so the routine + must fail. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large and positive. On soft failure the routine + returns zero. + + IFAIL= 2 + X is too large and negative. On soft failure the routine + returns zero. + + 7. Accuracy + + For negative arguments the function is oscillatory and hence + absolute error is appropriate. In the positive region the + function has essentially exponential behaviour and hence relative + error is needed. The absolute error, E, and the relative error + (epsilon), are related in principle to the relative error in the + argument (delta), by + + | 2 | + 2 | x Bi(x)| + E~=|x Bi(x)|(delta) (epsilon)~=| -------|(delta). + | Bi'(x) | + + In practice, approximate equality is the best that can be + expected. When (delta), (epsilon) or E is of the order of the + machine precision, the errors in the result will be somewhat + larger. + + For small x, positive or negative, errors are strongly attenuated + by the function and hence will effectively be bounded by the + machine precision. + + For moderate to large negative x, the error is, like the + function, oscillatory. However, the amplitude of the absolute + 7/4 + |x| + error grows like ------. Therefore it becomes impossible to + + + \/(pi) + + + 7/4 \/(pi) + calculate the function with any accuracy if |x| > -------. + (delta) + + For large positive x, the relative error amplification is + + + (epsilon) / 3 + considerable: ---------~\/ x . However, very large arguments are + (delta) + not possible due to the danger of overflow. Thus in practice the + actual amplification that occurs is limited. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17dcf}{NAG On-line Documentation: s17dcf} +\beginscroll +\begin{verbatim} + + + + S17DCF(3NAG) Foundation Library (12/10/92) S17DCF(3NAG) + + + + S17 -- Approximations of Special Functions S17DCF + S17DCF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17DCF returns a sequence of values for the Bessel functions + Y (z) for complex z, non-negative (nu) and n=0,1,...,N-1, + (nu)+n + with an option for exponential scaling. + + 2. Specification + + SUBROUTINE S17DCF (FNU, Z, N, SCALE, CY, NZ, CWRK, IFAIL) + INTEGER N, NZ, IFAIL + DOUBLE PRECISION FNU + COMPLEX(KIND(1.0D0)) Z, CY(N), CWRK(N) + CHARACTER*1 SCALE + + 3. Description + + This subroutine evaluates a sequence of values for the Bessel + function Y (z), where z is complex, -(pi) < arg z <= (pi), and + (nu) + (nu) is the real, non-negative order. The N-member sequence is + generated for orders (nu), (nu)+1,...,(nu)+N-1. Optionally, the + -|Im z| + sequence is scaled by the factor e . + + Note: although the routine may not be called with (nu) less than + zero, for negative orders the formula + Y (z)=Y (z)cos((pi)(nu))+J (z)sin((pi)(nu)) may be used + -(nu) (nu) (nu) + (for the Bessel function J (z), see S17DEF). + (nu) + + The routine is derived from the routine CBESY in Amos [2]. It is + (1) (2) + H (z)-H (z) + (nu) (nu) (1) + based on the relation Y (z)= -----------------, where H (z) + (nu) 2i (nu) + (2) + and H (z) are the Hankel functions of the first and second + (nu) + kinds respectively (see S17DLF). + + When N is greater than 1, extra values of Y (z) are computed + (nu) + using recurrence relations. + + For very large |z| or ((nu)+N-1), argument reduction will cause + total loss of accuracy, and so no computation is performed. For + slightly smaller |z| or ((nu)+N-1), the computation is performed + but results are accurate to less than half of machine precision. + If |z| is very small, near the machine underflow threshold, or + ((nu)+N-1) is too large, there is a risk of overflow and so no + computation is performed. In all the above cases, a warning is + given by the routine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Amos D E (1986) Algorithm 644: A Portable Package for Bessel + Functions of a Complex Argument and Nonnegative Order. ACM + Trans. Math. Softw. 12 265--273. + + 5. Parameters + + 1: FNU -- DOUBLE PRECISION Input + On entry: the order, (nu), of the first member of the + sequence of functions. Constraint: FNU >= 0.0. + + 2: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument, z, of the functions. Constraint: Z + /= (0.0, 0.0). + + 3: N -- INTEGER Input + On entry: the number, N, of members required in the sequence + Y (z), Y (z),...,Y (z). Constraint: N >= 1. + (nu) (nu)+1 (nu)+N-1 + + 4: SCALE -- CHARACTER*1 Input + On entry: the scaling option. + + If SCALE = 'U', the results are returned unscaled. + + If SCALE = 'S', the results are returned scaled by the + -|Imz| + factor e . Constraint: SCALE = 'U' or 'S'. + + 5: CY(N) -- COMPLEX(KIND(1.0D)) array Output + On exit: the N required function values: CY(i) contains + Y (z), for i=1,2,...,N. + (nu)+i-1 + + 6: NZ -- INTEGER Output + On exit: the number of components of CY that are set to zero + due to underflow. The positions of such components in the + array CY are arbitrary. + + 7: CWRK(N) -- COMPLEX(KIND(1.0D)) array Workspace + + 8: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry FNU < 0.0, + + or Z = (0.0, 0.0), + + or N < 1, + + or SCALE /= 'U' or 'S'. + + IFAIL= 2 + No computation has been performed due to the likelihood of + overflow, because ABS(Z) is less than a machine-dependent + threshold value (given in the Users' Note for your + implementation). + + IFAIL= 3 + No computation has been performed due to the likelihood of + overflow, because FNU + N - 1 is too large - how large + depends on Z as well as the overflow threshold of the + machine. + + IFAIL= 4 + The computation has been performed, but the errors due to + argument reduction in elementary functions make it likely + that the results returned by S17DCF are accurate to less + than half of machine precision. This error exit may occur if + either ABS(Z) or FNU + N - 1 is greater than a machine- + dependent threshold value (given in the Users' Note for + your implementation). + + IFAIL= 5 + No computation has been performed because the errors due to + argument reduction in elementary functions mean that all + precision in results returned by S17DCF would be lost. This + error exit may occur if either ABS(Z) or FNU + N - 1 is + greater than a machine-dependent threshold value (given in + the Users' Note for your implementation). + + IFAIL= 6 + No results are returned because the algorithm termination + condition has not been met. This may occur because the + parameters supplied to S17DCF would have caused overflow or + underflow. + + 7. Accuracy + + All constants in subroutine S17DCF are given to approximately 18 + digits of precision. Calling the number of digits of precision in + the floating-point arithmetic being used t, then clearly the + maximum number of correct digits in the results obtained is + limited by p=min(t,18). Because of errors in argument reduction + when computing elementary functions inside S17DCF, the actual + number of correct digits is limited, in general, by p-s, where + s~max(1,|log |z||,|log (nu)|) represents the number of digits + 10 10 + lost due to the argument reduction. Thus the larger the values of + |z| and (nu), the less the precision in the result. If S17DCF is + called with N>1, then computation of function values via + recurrence may lead to some further small loss of accuracy. + + If function values which should nominally be identical are + computed by calls to S17DCF with different base values of (nu) + and different N, the computed values may not agree exactly. + Empirical tests with modest values of (nu) and z have shown that + the discrepancy is limited to the least significant 3-4 digits of + precision. + + 8. Further Comments + + The time taken by the routine for a call of S17DCF is + approximately proportional to the value of N, plus a constant. In + general it is much cheaper to call S17DCF with N greater than 1, + rather than to make N separate calls to S17DCF. + + Paradoxically, for some values of z and (nu), it is cheaper to + call S17DCF with a larger value of N than is required, and then + discard the extra function values returned. However, it is not + possible to state the precise circumstances in which this is + likely to occur. It is due to the fact that the base value used + to start recurrence may be calculated in different regions for + different N, and the costs in each region may differ greatly. + + Note that if the function required is Y (x) or Y (x), i.e., (nu) + 0 1 + = 0.0 or 1.0, where x is real and positive, and only a single + unscaled function value is required, then it may be much cheaper + to call S17ACF or S17ADF respectively. + + 9. Example + + The example program prints a caption and then proceeds to read + sets of data from the input data stream. The first datum is a + value for the order FNU, the second is a complex value for the + argument, Z, and the third is a value for the parameter SCALE. + The program calls the routine with N = 2 to evaluate the function + for orders FNU and FNU + 1, and it prints the results. The + process is repeated until the end of the input data stream is + encountered. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17def}{NAG On-line Documentation: s17def} +\beginscroll +\begin{verbatim} + + + + S17DEF(3NAG) Foundation Library (12/10/92) S17DEF(3NAG) + + + + S17 -- Approximations of Special Functions S17DEF + S17DEF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17DEF returns a sequence of values for the Bessel functions + J (z) for complex z, non-negative (nu) and n=0,1,...,N-1, + (nu)+n + with an option for exponential scaling. + + 2. Specification + + SUBROUTINE S17DEF (FNU, Z, N, SCALE, CY, NZ, IFAIL) + INTEGER N, NZ, IFAIL + DOUBLE PRECISION FNU + COMPLEX(KIND(1.0D0)) Z, CY(N) + CHARACTER*1 SCALE + + 3. Description + + This subroutine evaluates a sequence of values for the Bessel + function J (z), where z is complex, -(pi) < arg z <= (pi), and + (nu) + (nu) is the real, non-negative order. The N-member sequence is + generated for orders (nu), (nu)+1,...,(nu)+N-1. Optionally, the + -|Im z| + sequence is scaled by the factor e . + + Note: although the routine may not be called with (nu) less than + zero, for negative orders the formula + J (z)=J (z)cos((pi)(nu))-Y (z)sin((pi)(nu)) may be used + -(nu) (nu) (nu) + (for the Bessel function Y (z), see S17DCF). + (nu) + + The routine is derived from the routine CBESJ in Amos [2]. It is + (nu)(pi)i/2 + based on the relations J (z)=e I (-iz), Im z>=0.0 + (nu) (nu) + -(nu)(pi)i/2 + and J (z)=e I (iz), Im z<0.0. + (nu) (nu) + + The Bessel function I (z) is computed using a variety of + (nu) + techniques depending on the region under consideration. + + When N is greater than 1, extra values of J (z) are computed + (nu) + using recurrence relations. + + For very large |z| or ((nu)+N-1), argument reduction will cause + total loss of accuracy, and so no computation is performed. For + slightly smaller |z| or ((nu)+N-1), the computation is performed + but results are accurate to less than half of machine precision. + If Im z is large, there is a risk of overflow and so no + computation is performed. In all the above cases, a warning is + given by the routine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Amos D E (1986) Algorithm 644: A Portable Package for Bessel + Functions of a Complex Argument and Nonnegative Order. ACM + Trans. Math. Softw. 12 265--273. + + 5. Parameters + + 1: FNU -- DOUBLE PRECISION Input + On entry: the order, (nu), of the first member of the + sequence of functions. Constraint: FNU >= 0.0. + + 2: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument z of the functions. + + 3: N -- INTEGER Input + On entry: the number, N, of members required in the sequence + J (z),J (z),...,J (z). Constraint: N >= 1. + (nu) (nu)+1 (nu)+N-1 + + 4: SCALE -- CHARACTER*1 Input + On entry: the scaling option. + If SCALE = 'U', the results are returned unscaled. + + If SCALE = 'S', the results are returned scaled by the + -|Imz| + factor e . + Constraint: SCALE = 'U' or 'S'. + + 5: CY(N) -- COMPLEX(KIND(1.0D)) array Output + On exit: the N required function values: CY(i) contains + J (z), for i=1,2,...,N. + (nu)+i-1 + + 6: NZ -- INTEGER Output + On exit: the number of components of CY that are set to zero + due to underflow. If NZ > 0, then elements CY(N-NZ+1), CY(N- + NZ+2),...,CY(N) are set to zero. + + 7: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry FNU < 0.0, + + or N < 1, + + or SCALE /= 'U' or 'S'. + + IFAIL= 2 + No computation has been performed due to the likelihood of + overflow, because Im Z is larger than a machine-dependent + threshold value (given in the Users' Note for your + implementation). This error exit can only occur when SCALE = + 'U'. + + IFAIL= 3 + The computation has been performed, but the errors due to + argument reduction in elementary functions make it likely + that the results returned by S17DEF are accurate to less + than half of machine precision. This error exit may occur if + either ABS(Z) or FNU + N - 1 is greater than a machine- + dependent threshold value (given in the Users' Note for + your implementation). + + IFAIL= 4 + No computation has been performed because the errors due to + argument reduction in elementary functions mean that all + precision in results returned by S17DEF would be lost. This + error exit may occur when either ABS(Z) or FNU + N - 1 is + greater than a machine-dependent threshold value (given in + the Users' Note for your implementation). + + IFAIL= 5 + No results are returned because the algorithm termination + condition has not been met. This may occur because the + parameters supplied to S17DEF would have caused overflow or + underflow. + + 7. Accuracy + + All constants in subroutine S17DEF are given to approximately 18 + digits of precision. Calling the number of digits of precision in + the floating-point arithmetic being used t, then clearly the + maximum number of correct digits in the results obtained is + limited by p=min(t,18). Because of errors in argument reduction + when computing elementary functions inside S17DEF, the actual + number of correct digits is limited, in general, by p-s, where + s~max(1,|log |(|z|),|log (nu)|) represents the number of digits + 10 10 + lost due to the argument reduction. Thus the larger the values of + |z| and (nu), the less the precision in the result. If S17DEF is + called with N>1, then computation of function values via + recurrence may lead to some further small loss of accuracy. + + If function values which should nominally be identical are + computed by calls to S17DEF with different base values of (nu) + and different N, the computed values may not agree exactly. + Empirical tests with modest values of (nu) and z have shown that + the discrepancy is limited to the least significant 3-4 digits of + precision. + + 8. Further Comments + + The time taken by the routine for a call of S17DEF is + approximately proportional to the value of N, plus a constant. In + general it is much cheaper to call S17DEF with N greater than 1, + rather than to make N separate calls to S17DEF. + + Paradoxically, for some values of z and (nu), it is cheaper to + call S17DEF with a larger value of N than is required, and then + discard the extra function values returned. However, it is not + possible to state the precise circumstances in which this is + likely to occur. It is due to the fact that the base value used + to start recurrence may be calculated in different regions for + different N, and the costs in each region may differ greatly. + + Note that if the function required is J (x) or J (x), i.e., (nu) + 0 1 + = 0.0 or 1.0, where x is real and positive, and only a single + unscaled function value is required, then it may be much cheaper + to call S17AEF or S17AFF respectively. + + 9. Example + + The example program prints a caption and then proceeds to read + sets of data from the input data stream. The first datum is a + value for the order FNU, the second is a complex value for the + argument, Z, and the third is a value for the parameter SCALE. + + The program calls the routine with N = 2 to evaluate the function + for orders FNU and FNU + 1, and it prints the results. The + process is repeated until the end of the input data stream is + encountered. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17dgf}{NAG On-line Documentation: s17dgf} +\beginscroll +\begin{verbatim} + + + + S17DGF(3NAG) Foundation Library (12/10/92) S17DGF(3NAG) + + + + S17 -- Approximations of Special Functions S17DGF + S17DGF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17DGF returns the value of the Airy function Ai(z) or its + derivative Ai'(z) for complex z, with an option for exponential + scaling. + + 2. Specification + + SUBROUTINE S17DGF (DERIV, Z, SCALE, AI, NZ, IFAIL) + INTEGER NZ, IFAIL + COMPLEX(KIND(1.0D0)) Z, AI + CHARACTER*1 DERIV, SCALE + + 3. Description + + This subroutine returns a value for the Airy function Ai(z) or + its derivative Ai'(z), where z is complex, -(pi) < arg z <= (pi). + + + 2z\/z/3 + Optionally, the value is scaled by the factor e . + + The routine is derived from the routine CAIRY in Amos [2]. It is + + + \/zK (w) -zK (w) + 1/3 2/3 + based on the relations Ai(z)= ----------, and Ai'(z)= ---------, + + + (pi)\/3 (pi)/3 + + + where K is the modified Bessel function and w=2z\/z/3. + (nu) + + For very large |z|, argument reduction will cause total loss of + accuracy, and so no computation is performed. For slightly + smaller |z|, the computation is performed but results are + accurate to less than half of machine precision. If Re w is too + large, and the unscaled function is required, there is a risk of + overflow and so no computation is performed. In all the above + cases, a warning is given by the routine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Amos D E (1986) Algorithm 644: A Portable Package for Bessel + Functions of a Complex Argument and Nonnegative Order. ACM + Trans. Math. Softw. 12 265--273. + + 5. Parameters + + 1: DERIV -- CHARACTER*1 Input + On entry: specifies whether the function or its derivative + is required. + If DERIV = 'F', Ai(z) is returned. + + If DERIV = 'D', Ai'(z) is returned. + Constraint: DERIV = 'F' or 'D'. + + 2: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument z of the function. + + 3: SCALE -- CHARACTER*1 Input + On entry: the scaling option. + + If SCALE = 'U', the result is returned unscaled. + + If SCALE = 'S', the result is returned scaled by the factor + + + 2z\/z/3 + e . Constraint: SCALE = 'U' or 'S'. + + 4: AI -- COMPLEX(KIND(1.0D0)) Output + On exit: the required function or derivative value. + + 5: NZ -- INTEGER Output + On exit: NZ indicates whether or not AI is set to zero due + to underflow. This can only occur when SCALE = 'U'. + + If NZ = 0, AI is not set to zero. + + If NZ = 1, AI is set to zero. + + 6: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry DERIV /= 'F' or 'D'. + + or SCALE /= 'U' or 'S'. + + IFAIL= 2 + No computation has been performed due to the likelihood of + + + overflow, because Re w is too large, where w=2Z\/Z/3 -- how + large depends on Z and the overflow threshold of the + machine. This error exit can only occur when SCALE = 'U'. + + IFAIL= 3 + The computation has been performed, but the errors due to + argument reduction in elementary functions make it likely + that the result returned by S17DGF is accurate to less than + half of machine precision. This error exit may occur if ABS + (Z) is greater than a machine-dependent threshold value + (given in the Users' Note for your implementation). + + IFAIL= 4 + No computation has been performed because the errors due to + argument reduction in elementary functions mean that all + precision in the result returned by S17DGF would be lost. + This error exit may occur if ABS(Z) is greater than a + machine-dependent threshold value (given in the Users' Note + for your implementation). + + IFAIL= 5 + No result is returned because the algorithm termination + condition has not been met. This may occur because the + parameters supplied to S17DGF would have caused overflow or + underflow. + + 7. Accuracy + + All constants in subroutine S17DGF are given to approximately 18 + digits of precision. Calling the number of digits of precision in + the floating-point arithmetic being used t, then clearly the + maximum number of correct digits in the results obtained is + limited by p=min(t,18). Because of errors in argument reduction + when computing elementary functions inside S17DGF, the actual + number of correct digits is limited, in general, by p-s, where + s~max(1,|log |z||) represents the number of digits lost due to + 10 + the argument reduction. Thus the larger the value of |z|, the + less the precision in the result. + + Empirical tests with modest values of z, checking relations + between Airy functions Ai(z), Ai'(z), Bi(z) and Bi'(z), have + shown errors limited to the least significant 3-4 digits of + precision. + + 8. Further Comments + + Note that if the function is required to operate on a real + argument only, then it may be much cheaper to call S17AGF or + S17AJF. + + 9. Example + + The example program prints a caption and then proceeds to read + sets of data from the input data stream. The first datum is a + value for the parameter DERIV, the second is a complex value for + the argument, Z, and the third is a value for the parameter + SCALE. The program calls the routine and prints the results. The + process is repeated until the end of the input data stream is + encountered. + + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17dhf}{NAG On-line Documentation: s17dhf} +\beginscroll +\begin{verbatim} + + + + S17DHF(3NAG) Foundation Library (12/10/92) S17DHF(3NAG) + + + + S17 -- Approximations of Special Functions S17DHF + S17DHF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17DHF returns the value of the Airy function Bi(z) or its + derivative Bi'(z) for complex z, with an option for exponential + scaling. + + 2. Specification + + SUBROUTINE S17DHF (DERIV, Z, SCALE, BI, IFAIL) + INTEGER IFAIL + COMPLEX(KIND(1.0D0)) Z, BI + CHARACTER*1 DERIV, SCALE + + 3. Description + + This subroutine returns a value for the Airy function Bi(z) or + its derivative Bi'(z), where z is complex, -(pi) < argz <= (pi). + + + |Re (2z\/z/3)| + Optionally, the value is scaled by the factor e . + + The routine is derived from the routine CBIRY in Amos [2]. It is + + + \/z + based on the relations Bi(z)= ---(I (w)+I (w)), and + -1/3 1/3 + \/3 + z + Bi'(z)= ---(I (w)+I (w)), where I is the modified Bessel + -2/3 2/3 (nu) + \/3 + + + function and w=2z\/z/3. + + For very large |z|, argument reduction will cause total loss of + accuracy, and so no computation is performed. For slightly + smaller |z|, the computation is performed but results are + accurate to less than half of machine precision. If Re z is too + large, and the unscaled function is required, there is a risk of + overflow and so no computation is performed. In all the above + cases, a warning is given by the routine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Hammersley J M and Handscomb D C (1967) Monte-Carlo Methods. + Methuen. + + 5. Parameters + + 1: DERIV -- CHARACTER*1 Input + On entry: specifies whether the function or its derivative + is required. + If DERIV = 'F', Bi(z) is returned. + + If DERIV = 'D', Bi'(z) is returned. + Constraint: DERIV = 'F' or 'D'. + + 2: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument z of the function. + + 3: SCALE -- CHARACTER*1 Input + On entry: the scaling option. + If SCALE = 'U', the result is returned unscaled. + + If SCALE = 'S', the result is returned scaled by the + + + |Re(2z\/z/3)| + factor e . + Constraint: SCALE = 'U' or 'S'. + + 4: BI -- COMPLEX(KIND(1.0D0)) Output + On exit: the required function or derivative value. + + 5: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry DERIV /= 'F' or 'D'. + + or SCALE /= 'U' or 'S'. + + IFAIL= 2 + No computation has been performed due to the likelihood of + overflow, because real(Z) is too large - how large depends + on the overflow threshold of the machine. This error exit + can only occur when SCALE = 'U'. + + IFAIL= 3 + The computation has been performed, but the errors due to + argument reduction in elementary functions make it likely + that the result returned by S17DHF is accurate to less than + half of machine precision. This error exit may occur if ABS + (Z) is greater than a machine-dependent threshold value + (given in the Users' Note for your implementation). + + IFAIL= 4 + No computation has been performed because the errors due to + argument reduction in elementary functions mean that all + precision in the result returned by S17DHF would be lost. + This error exit may occur if ABS(Z) is greater than a + machine-dependent threshold value (given in the Users' Note + for your implementation). + + IFAIL= 5 + No result is returned because the algorithm termination + condition has not been met. This may occur because the + parameters supplied to S17DHF would have caused overflow or + underflow. + + 7. Accuracy + + All constants in subroutine S17DHF are given to approximately 18 + digits of precision. Calling the number of digits of precision in + the floating-point arithmetic being used t, then clearly the + maximum number of correct digits in the results obtained is + limited by p=min(t,18). Because of errors in argument reduction + when computing elementary functions inside S17DHF, the actual + number of correct digits is limited, in general, by p-s, where + s~max(1,|log |z||) represents the number of digits lost due to + 10 + the argument reduction. Thus the larger the value of |z|, the + less the precision in the result. + + Empirical tests with modest values of z, checking relations + between Airy functions Ai(z), Ai'(z), Bi(z) and Bi'(z), have + shown errors limited to the least significant 3-4 digits of + precision. + + 8. Further Comments + + Note that if the function is required to operate on a real + argument only, then it may be much cheaper to call S17AHF or + S17AKF. + + 9. Example + + The example program prints a caption and then proceeds to read + sets of data from the input data stream. The first datum is a + value for the parameter DERIV, the second is a complex value for + the argument, Z, and the third is a value for the parameter + SCALE. The program calls the routine and prints the results. The + process is repeated until the end of the input data stream is + encountered. + + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs17dlf}{NAG On-line Documentation: s17dlf} +\beginscroll +\begin{verbatim} + + + + S17DLF(3NAG) Foundation Library (12/10/92) S17DLF(3NAG) + + + + S17 -- Approximations of Special Functions S17DLF + S17DLF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S17DLF returns a sequence of values for the Hankel functions + (1) (2) + H (z) or H (z) for complex z, non-negative (nu) and + (nu)+n (nu)+n + n=0,1,...,N-1, with an option for exponential scaling. + + 2. Specification + + SUBROUTINE S17DLF (M, FNU, Z, N, SCALE, CY, NZ, IFAIL) + INTEGER M, N, NZ, IFAIL + DOUBLE PRECISION FNU + COMPLEX(KIND(1.0D0)) Z, CY(N) + CHARACTER*1 SCALE + + 3. Description + + This subroutine evaluates a sequence of values for the Hankel + (1) (2) + function H (z) or H (z), where z is complex, -(pi) < argz + (nu) (nu) + <= (pi), and (nu) is the real, non-negative order. The N-member + sequence is generated for orders (nu), (nu)+1,...,(nu)+N-1. + -iz + Optionally, the sequence is scaled by the factor e if the + (1) iz + function is H (z) or by the factor e if the function is + (nu) + (2) + H (z). + (nu) + + Note: although the routine may not be called with (nu) less than + zero, for negative orders the formulae + (1) (nu)(pi)i (1) (2) -(nu)(pi)i (2) + H (z)=e H (z), and H (z)=e H (z) + -(nu) (nu) -(nu) (nu) + may be used. + + The routine is derived from the routine CBESH in Amos [2]. It is + based on the relation + + (m) 1 -p(nu) -p + H (z)= -e K (ze ), + (nu) p (nu) + + (pi) (pi) + where p=i ---- if m=1 and p=-i ---- if m=2, and the Bessel + 2 2 + function K (z) is computed in the right half-plane only. + (nu) + Continuation of K (z) to the left half-plane is computed in + (nu) + terms of the Bessel function I (z). These functions are + (nu) + evaluated using a variety of different techniques, depending on + the region under consideration. + + (m) + When N is greater than 1, extra values of H (z) are computed + (nu) + using recurrence relations. + + For very large |z| or ((nu)+N-1), argument reduction will cause + total loss of accuracy, and so no computation is performed. For + slightly smaller |z| or ((nu)+N-1), the computation is performed + but results are accurate to less than half of machine precision. + If |z| is very small, near the machine underflow threshold, or + ((nu)+N-1) is too large, there is a risk of overflow and so no + computation is performed. In all the above cases, a warning is + given by the routine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Amos D E (1986) Algorithm 644: A Portable Package for Bessel + Functions of a Complex Argument and Nonnegative Order. ACM + Trans. Math. Softw. 12 265--273. + + 5. Parameters + + 1: M -- INTEGER Input + On entry: the kind of functions required. + (1) + If M = 1, the functions are H (z). + (nu) + + (2) + If M = 2, the functions are H (z). + (nu) + Constraint: M = 1 or 2. + + 2: FNU -- DOUBLE PRECISION Input + On entry: the order, (nu), of the first member of the + sequence of functions. Constraint: FNU >= 0.0. + + 3: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument z of the functions. Constraint: Z /= + (0.0, 0.0). + + 4: N -- INTEGER Input + On entry: the number, N, of members required in the sequence + (M) (M) (M) + H , H ,..., H . Constraint: N >= 1. + (nu) (nu)+1 (nu)+N-1 + + 5: SCALE -- CHARACTER*1 Input + On entry: the scaling option. + If SCALE = 'U', the results are returned unscaled. + + If SCALE = 'S', the results are returned scaled by the + -iz iz + factor e when M = 1, or by the factor e when M = + 2. + Constraint: SCALE = 'U' or 'S'. + + 6: CY(N) -- COMPLEX(KIND(1.0D)) array Output + On exit: the N required function values: CY(i) contains + (M) + H , for i=1,2,...,N. + (nu)+i-1 + + 7: NZ -- INTEGER Output + On exit: the number of components of CY that are set to zero + due to underflow. If NZ > 0, then if Imz>0.0 and M = 1, or + Imz<0.0 and M = 2, elements CY(1), CY(2),...,CY(NZ) are set + to zero. In the complementary half-planes, NZ simply states + the number of underflows, and not which elements they are. + + 8: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry M /= 1 and M /= 2, + + or FNU < 0.0, + + or Z = (0.0, 0.0), + + or N < 1, + + or SCALE /= 'U' or 'S'. + + IFAIL= 2 + No computation has been performed due to the likelihood of + overflow, because ABS(Z) is less than a machine-dependent + threshold value (given in the Users' Note for your + implementation). + + IFAIL= 3 + No computation has been performed due to the likelihood of + overflow, because FNU + N - 1 is too large - how large + depends on Z and the overflow threshold of the machine. + + IFAIL= 4 + The computation has been performed, but the errors due to + argument reduction in elementary functions make it likely + that the results returned by S17DLF are accurate to less + than half of machine precision. This error exit may occur if + either ABS(Z) or FNU + N - 1 is greater than a machine- + dependent threshold value (given in the Users' Note for + your implementation). + + IFAIL= 5 + No computation has been performed because the errors due to + argument reduction in elementary functions mean that all + precision in results returned by S17DLF would be lost. This + error exit may occur when either of ABS(Z) or FNU + N - 1 is + greater than a machine-dependent threshold value (given in + the Users' Note for your implementation). + + IFAIL= 6 + No results are returned because the algorithm termination + condition has not been met. This may occur because the + parameters supplied to S17DLF would have caused overflow or + underflow. + + 7. Accuracy + + All constants in subroutine S17DLF are given to approximately 18 + digits of precision. Calling the number of digits of precision in + the floating-point arithmetic being used t, then clearly the + maximum number of correct digits in the results obtained is + limited by p=min(t,18). Because of errors in argument reduction + when computing elementary functions inside S17DLF, the actual + number of correct digits is limited, in general, by p-s, where + s~max(1,|log |z||,|log (nu)|) represents the number of digits + 10 10 + lost due to the argument reduction. Thus the larger the values of + |z| and (nu), the less the precision in the result. If S17DLF is + called with N>1, then computation of function values via + recurrence may lead to some further small loss of accuracy. + + If function values which should nominally be identical are + computed by calls to S17DLF with different base values of (nu) + and different N, the computed values may not agree exactly. + Empirical tests with modest values of (nu) and z have shown that + the discrepancy is limited to the least significant 3-4 digits of + precision. + + 8. Further Comments + + The time taken by the routine for a call of S17DLF is + approximately proportional to the value of N, plus a constant. In + general it is much cheaper to call S17DLF with N greater than 1, + rather than to make N separate calls to S17DLF. + + Paradoxically, for some values of z and (nu), it is cheaper to + call S17DLF with a larger value of N than is required, and then + discard the extra function values returned. However, it is not + possible to state the precise circumstances in which this is + likely to occur. It is due to the fact that the base value used + to start recurrence may be calculated in different regions for + different N, and the costs in each region may differ greatly. + + 9. Example + + The example program prints a caption and then proceeds to read + sets of data from the input data stream. The first datum is a + value for the kind of function, M, the second is a value for the + order FNU, the third is a complex value for the argument, Z, and + the fourth is a value for the parameter SCALE. The program calls + the routine with N = 2 to evaluate the function for orders FNU + and FNU + 1, and it prints the results. The process is repeated + until the end of the input data stream is encountered. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs18acf}{NAG On-line Documentation: s18acf} +\beginscroll +\begin{verbatim} + + + + S18ACF(3NAG) Foundation Library (12/10/92) S18ACF(3NAG) + + + + S18 -- Approximations of Special Functions S18ACF + S18ACF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S18ACF returns the value of the modified Bessel Function K (x), + 0 + via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S18ACF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the modified Bessel + Function of the second kind K (x). + 0 + + Note: K (x) is undefined for x<=0 and the routine will fail for + 0 + such arguments. + + The routine is based on five Chebyshev expansions: + + For 0<x<=1, + + --' --' 2 + K (x)=-lnx > a T (t)+ > b T (t) , where t=2x -1; + 0 -- r r -- r r + r=0 r=0 + + For 1<x<=2, + + -x --' + K (x)=e > c T (t) , where t=2x-3; + 0 -- r r + r=0 + + For 2<x<=4, + + -x --' + K (x)=e > d T (t) , where t=x-3; + 0 -- r r + r=0 + For x>4, + + -x + e --' 9-x + K (x)= --- > e T (t) , where t= ---. + 0 -- r r 1+x + \/x r=0 + + ( x) + For x near zero, K (x)~=-(gamma)-ln( -), where (gamma) denotes + 0 ( 2) + Euler's constant. This approximation is used when x is + sufficiently small for the result to be correct to machine + precision. + + For large x, where there is a danger of underflow due to the + smallness of K , the result is set exactly to zero. + 0 + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X <= 0.0, K is undefined. On soft failure the routine + 0 + returns zero. + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and result respectively. + + If (delta) is somewhat larger than the machine precision (i.e., + if (delta) is due to data errors etc), then (epsilon) and (delta) + are approximately related by: + + | xK (x)| + | 1 | + (epsilon)~=| ------|(delta). + | K (x) | + | 0 | + + Figure 1 shows the behaviour of the error amplification factor + + | xK (x)| + | 1 | + | ------|. + | K (x) | + | 0 | + + Figure 1 + Please see figure in printed Reference Manual + + However, if (delta) is of the same order as machine precision, + then rounding errors could make (epsilon) slightly larger than + the above relation predicts. + + | 1 | + For small x, the amplification factor is approximately | ---|, + | lnx| + which implies strong attenuation of the error, but in general + (epsilon) can never be less than the machine precision. + + For large x, (epsilon)~=x(delta) and we have strong amplification + of the relative error. Eventually K , which is asymptotically + 0 + -x + e + given by ---, becomes so small that it cannot be calculated + + + \/x + without underflow and hence the routine will return zero. Note + that for large x the errors will be dominated by those of the + Fortran intrinsic function EXP. + + 8. Further Comments + + For details of the time taken by the routine see the appropriate + the Users' Note for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs18adf}{NAG On-line Documentation: s18adf} +\beginscroll +\begin{verbatim} + + + + S18ADF(3NAG) Foundation Library (12/10/92) S18ADF(3NAG) + + + + S18 -- Approximations of Special Functions S18ADF + S18ADF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S18ADF returns the value of the modified Bessel Function K (x), + 1 + via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S18ADF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the modified Bessel + Function of the second kind K (x). + 1 + + Note: K (x) is undefined for x<=0 and the routine will fail for + 1 + such arguments. + + The routine is based on five Chebyshev expansions: + + For 0<x<=1, + + 1 --' --' 2 + K (x)= -+xlnx > a T (t)-x > b T (t) , where t=2x -1; + 1 x -- r r -- r r + r=0 r=0 + + For 1<x<=2, + + -x --' + K (x)=e > c T (t) , where t=2x-3; + 1 -- r r + r=0 + + For 2<x<=4, + + -x --' + K (x)=e > d T (t) , where t=x-3; + 1 -- r r + r=0 + + For x>4, + + -x + e --' 9-x + K (x)= --- > e T (t) , where t= ---. + 1 -- r r 1+x + \/x r=0 + + 1 + For x near zero, K (x)~= -. This approximation is used when x is + 1 x + sufficiently small for the result to be correct to machine + precision. For very small x on some machines, it is impossible to + 1 + calculate - without overflow and the routine must fail. + x + + For large x, where there is a danger of underflow due to the + smallness of K , the result is set exactly to zero. + 1 + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X <= 0.0, K is undefined. On soft failure the routine + 1 + returns zero. + + IFAIL= 2 + X is too small, there is a danger of overflow. On soft + failure the routine returns approximately the largest + representable value. + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and result respectively. + + If (delta) is somewhat larger than the machine precision (i.e., + if (delta) is due to data errors etc), then (epsilon) and (delta) + are approximately related by: + + | xK (x)-K (x)| + | 0 1 | + (epsilon)~=| ------------|(delta). + | K (x) | + | 1 | + + Figure 1 shows the behaviour of the error amplification factor + + | xK (x)-K (x)| + | 0 1 | + | ------------|. + | K (x) | + | 1 | + + Figure 1 + Please see figure in printed Reference Manual + + However if (delta) is of the same order as the machine precision, + then rounding errors could make (epsilon) slightly larger than + the above relation predicts. + + For small x, (epsilon)~=(delta) and there is no amplification of + errors. + + For large x, (epsilon)~=x(delta) and we have strong amplification + of the relative error. Eventually K , which is asymptotically + 1 + -x + e + given by ---, becomes so small that it cannot be calculated + + + \/x + without underflow and hence the routine will return zero. Note + that for large x the errors will be dominated by those of the + Fortran intrinsic function EXP. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs18aef}{NAG On-line Documentation: s18aef} +\beginscroll +\begin{verbatim} + + + + S18AEF(3NAG) Foundation Library (12/10/92) S18AEF(3NAG) + + + + S18 -- Approximations of Special Functions S18AEF + S18AEF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S18AEF returns the value of the modified Bessel Function I (x), + 0 + via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S18AEF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the modified Bessel + Function of the first kind I (x). + 0 + + Note: I (-x)=I (x), so the approximation need only consider x>=0. + 0 0 + + The routine is based on three Chebyshev expansions: + + For 0<x<=4, + + x --' ( x) + I (x)=e > a T (t) , where t=2( -)-1; + 0 -- r r ( 4) + r=0 + + For 4<x<=12, + + x --' x-8 + I (x)=e > b T (t) , where t= ---; + 0 -- r r 4 + r=0 + + For x>12, + + x + e --' ( 12) + I (x)= --- > c T (t) , where t=2( --)-1. + 0 -- r r ( x ) + \/x r=0 + + For small x, I (x)~=1. This approximation is used when x is + 0 + sufficiently small for the result to be correct to machine + precision. + + For large x, the routine must fail because of the danger of + x + overflow in calculating e . + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large. On soft failure the routine returns the + approximate value of I (x) at the nearest valid argument. + 0 + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and result respectively. + + If (delta) is somewhat larger than the machine precision (i.e., + if (delta) is due to data errors etc), then (epsilon) and (delta) + are approximately related by: + + | xI (x)| + | 1 | + (epsilon)~=| ------|(delta). + | I (x) | + | 0 | + + Figure 1 shows the behaviour of the error amplification factor + + | xI (x)| + | 1 | + | ------|. + | I (x) | + | 0 | + + Figure 1 + Please see figure in printed Reference Manual + + However if (delta) is of the same order as machine precision, + then rounding errors could make (epsilon) slightly larger than + the above relation predicts. + + 2 + x + For small x the amplification factor is approximately --, which + 2 + implies strong attenuation of the error, but in general (epsilon) + can never be less than the machine precision. + + For large x, (epsilon)~=x(delta) and we have strong amplification + of errors. However the routine must fail for quite moderate + values of x, because I (x) would overflow; hence in practice the + 0 + loss of accuracy for large x is not excessive. Note that for + large x the errors will be dominated by those of the Fortran + intrinsic function EXP. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs18aff}{NAG On-line Documentation: s18aff} +\beginscroll +\begin{verbatim} + + + + S18AFF(3NAG) Foundation Library (12/10/92) S18AFF(3NAG) + + + + S18 -- Approximations of Special Functions S18AFF + S18AFF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S18AFF returns a value for the modified Bessel Function I (x), + 1 + via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S18AFF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the modified Bessel + Function of the first kind I (x). + 1 + + Note: I (-x)=-I (x), so the approximation need only consider x>=0 + 1 1 + + The routine is based on three Chebyshev expansions: + + For 0<x<=4, + + --' ( x)2 + I (x)=x > a T (t) , where t=2( -) -1; + 1 -- r r ( 4) + r=0 + + For 4<x<=12, + + x --' x-8 + I (x)=e > b T (t) , where t= ---; + 1 -- r r 4 + r=0 + + For x>12, + + x + e --' ( 12) + I (x)= --- > c T (t) , where t=2( --)-1. + 1 -- r r ( x ) + \/x r=0 + + For small x, I (x)~=x. This approximation is used when x is + 1 + sufficiently small for the result to be correct to machine + precision. + + For large x, the routine must fail because I (x) cannot be + 1 + represented without overflow. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + X is too large. On soft failure the routine returns the + approximate value of I (x) at the nearest valid argument. + 1 + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and result respectively. + + If (delta) is somewhat larger than the machine precision (i.e., + if (delta) is due to data errors etc), then (epsilon) and (delta) + are approximately related by: + + | xI (x)-I (x)| + | 0 1 | + (epsilon)~=| ------------|(delta). + | I (x) | + | 1 | + + Figure 1 shows the behaviour of the error amplification factor + + | xI (x)-I (x)| + | 0 1 | + | ------------|, + | I (x) | + | 1 | + + Figure 1 + Please see figure in printed Reference Manual + + However if (delta) is of the same order as machine precision, + then rounding errors could make (epsilon) slightly larger than + the above relation predicts. + + For small x, (epsilon)~=(delta) and there is no amplification of + errors. + + For large x, (epsilon)~=x(delta) and we have strong amplification + of errors. However the routine must fail for quite moderate + values of x because I (x) would overflow; hence in practice the + 1 + loss of accuracy for large x is not excessive. Note that for + large x, the errors will be dominated by those of the Fortran + intrinsic function EXP. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs18dcf}{NAG On-line Documentation: s18dcf} +\beginscroll +\begin{verbatim} + + + + S18DCF(3NAG) Foundation Library (12/10/92) S18DCF(3NAG) + + + + S18 -- Approximations of Special Functions S18DCF + S18DCF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S18DCF returns a sequence of values for the modified Bessel + functions K (z) for complex z, non-negative (nu) and + (nu)+n + n=0,1,...,N-1, with an option for exponential scaling. + + 2. Specification + + SUBROUTINE S18DCF (FNU, Z, N, SCALE, CY, NZ, IFAIL) + INTEGER N, NZ, IFAIL + DOUBLE PRECISION FNU + COMPLEX(KIND(1.0D0)) Z, CY(N) + CHARACTER*1 SCALE + + 3. Description + + This subroutine evaluates a sequence of values for the modified + Bessel function K (z), where z is complex, -(pi) < arg z <= + (nu) + (pi), and (nu) is the real, non-negative order. The N-member + sequence is generated for orders (nu), (nu)+1,...,(nu)+N-1. + z + Optionally, the sequence is scaled by the factor e . + + The routine is derived from the routine CBESK in Amos [2]. + + Note: although the routine may not be called with (nu) less than + zero, for negative orders the formula K (z)=K (z) may be + -(nu) (nu) + used. + + When N is greater than 1, extra values of K (z) are computed + (nu) + using recurrence relations. + + For very large |z| or ((nu)+N-1), argument reduction will cause + total loss of accuracy, and so no computation is performed. For + slightly smaller |z| or ((nu)+N-1), the computation is performed + but results are accurate to less than half of machine precision. + If |z| is very small, near the machine underflow threshold, or + ((nu)+N-1) is too large, there is a risk of overflow and so no + computation is performed. In all the above cases, a warning is + given by the routine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Amos D E (1986) Algorithm 644: A Portable Package for Bessel + Functions of a Complex Argument and Nonnegative Order. ACM + Trans. Math. Softw. 12 265--273. + + 5. Parameters + + 1: FNU -- DOUBLE PRECISION Input + On entry: the order, (nu), of the first member of the + sequence of functions. Constraint: FNU >= 0.0. + + 2: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument z of the functions. Constraint: Z /= + (0.0, 0.0). + + 3: N -- INTEGER Input + On entry: the number, N, of members required in the sequence + K (z), K (z),..., K (z). Constraint: N >= 1. + (nu) (nu)+1 (nu)+N-1 + + 4: SCALE -- CHARACTER*1 Input + On entry: the scaling option. + + If SCALE = 'U', the results are returned unscaled. + + If SCALE = 'S', the results are returned scaled by the + z + factor e . Constraint: SCALE = 'U' or 'S'. + + 5: CY(N) -- COMPLEX(KIND(1.0D)) array Output + On exit: the N required function values: CY(i) contains + K (z), for i=1,2,...,N. + (nu)+i-1 + + 6: NZ -- INTEGER Output + On exit: the number of components of CY that are set to zero + due to underflow. If NZ > 0 and Rez>=0.0, elements CY(1),CY + (2),...,CY(NZ) are set to zero. If Rez<0.0, NZ simply states + the number of underflows, and not which elements they are. + + 7: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry FNU < 0.0, + + or Z = (0.0, 0.0), + + or N < 1, + + or SCALE /= 'U' or 'S'. + + IFAIL= 2 + No computation has been performed due to the likelihood of + overflow, because ABS(Z) is less than a machine-dependent + threshold value (given in the Users' Note for your + implementation). + + IFAIL= 3 + No computation has been performed due to the likelihood of + overflow, because FNU + N - 1 is too large - how large + depends on Z and the overflow threshold of the machine. + + IFAIL= 4 + The computation has been performed, but the errors due to + argument reduction in elementary functions make it likely + that the results returned by S18DCF are accurate to less + than half of machine precision. This error exit may occur if + either ABS(Z) or FNU + N - 1 is greater than a machine- + dependent threshold value (given in the Users' Note for + your implementation). + + IFAIL= 5 + No computation has been performed because the errors due to + argument reduction in elementary functions mean that all + precision in results returned by S18DCF would be lost. This + error exit may occur when either ABS(Z) or FNU + N - 1 is + greater than a machine-dependent threshold value (given in + the Users' Note for your implementation). + + IFAIL= 6 + No results are returned because the algorithm termination + condition has not been met. This may occur because the + parameters supplied to S18DCF would have caused overflow or + underflow. + + 7. Accuracy + + + All constants in subroutine S18DCF are given to approximately 18 + digits of precision. Calling the number of digits of precision in + the floating-point arithmetic being used t, then clearly the + maximum number of correct digits in the results obtained is + limited by p=min(t,18). Because of errors in argument reduction + when computing elementary functions inside S18DCF, the actual + number of correct digits is limited, in general, by p-s, where + s~max(1,|log |z||,|log (nu)|) represents the number of digits + 10 10 + lost due to the argument reduction. Thus the larger the values of + |z| and (nu), the less the precision in the result. If S18DCF is + called with N>1, then computation of function values via + recurrence may lead to some further small loss of accuracy. + + If function values which should nominally be identical are + computed by calls to S18DCF with different base values of (nu) + and different N, the computed values may not agree exactly. + Empirical tests with modest values of (nu) and z have shown that + the discrepancy is limited to the least significant 3-4 digits of + precision. + + 8. Further Comments + + The time taken by the routine for a call of S18DCF is + approximately proportional to the value of N, plus a constant. In + general it is much cheaper to call S18DCF with N greater than 1, + rather than to make N separate calls to S18DCF. + + Paradoxically, for some values of z and (nu), it is cheaper to + call S18DCF with a larger value of N than is required, and then + discard the extra function values returned. However, it is not + possible to state the precise circumstances in which this is + likely to occur. It is due to the fact that the base value used + to start recurrence may be calculated in different regions for + different N, and the costs in each region may differ greatly. + + Note that if the function required is K (x) or K (x), i.e., + 0 1 + (nu)=0.0 or 1.0, where x is real and positive, and only a single + function value is required, then it may be much cheaper to call + S18ACF, S18ADF, S18CCF(*) or S18CDF(*), depending on whether a + scaled result is required or not. + + 9. Example + + The example program prints a caption and then proceeds to read + sets of data from the input data stream. The first datum is a + value for the order FNU, the second is a complex value for the + argument, Z, and the third is a value for the parameter SCALE. + The program calls the routine with N = 2 to evaluate the function + for orders FNU and FNU + 1, and it prints the results. The + process is repeated until the end of the input data stream is + encountered. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs18def}{NAG On-line Documentation: s18def} +\beginscroll +\begin{verbatim} + + + + S18DEF(3NAG) Foundation Library (12/10/92) S18DEF(3NAG) + + + + S18 -- Approximations of Special Functions S18DEF + S18DEF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S18DEF returns a sequence of values for the modified Bessel + functions I (z) for complex z, non-negative (nu) and + (nu)+n + n=0,1,...,N-1, with an option for exponential scaling. + + 2. Specification + + SUBROUTINE S18DEF (FNU, Z, N, SCALE, CY, NZ, IFAIL) + INTEGER N, NZ, IFAIL + DOUBLE PRECISION FNU + COMPLEX(KIND(1.0D0)) Z, CY(N) + CHARACTER*1 SCALE + + 3. Description + + This subroutine evaluates a sequence of values for the modified + Bessel function I (z), where z is complex, -(pi) < argz <= + (nu) + (pi), and (nu) is the real, non-negative order. The N-member + sequence is generated for orders (nu), (nu)+1,...,(nu)+N-1. + -|Rez| + Optionally, the sequence is scaled by the factor e . + + The routine is derived from the routine CBESI in Amos [2]. + + Note: although the routine may not be called with (nu) less than + zero, for negative orders the formula + 2 + I (z)=I (z)+ ----sin((pi)(nu))K (z) may be used (for + -(nu) (nu) (pi) (nu) + the Bessel function K (z), see S18DCF). + (nu) + + When N is greater than 1, extra values of I (z) are computed + (nu) + using recurrence relations. + + For very large |z| or ((nu)+N-1), argument reduction will cause + total loss of accuracy, and so no computation is performed. For + slightly smaller |z| or ((nu)+N-1), the computation is performed + but results are accurate to less than half of machine precision. + If Re(z) is too large and the unscaled function is required, + there is a risk of overflow and so no computation is performed. + In all the above cases, a warning is given by the routine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Amos D E (1986) Algorithm 644: A Portable Package for Bessel + Functions of a Complex Argument and Nonnegative Order. ACM + Trans. Math. Softw. 12 265--273. + + 5. Parameters + + 1: FNU -- DOUBLE PRECISION Input + On entry: the order, (nu), of the first member of the + sequence of functions. Constraint: FNU >= 0.0. + + 2: Z -- COMPLEX(KIND(1.0D0)) Input + On entry: the argument z of the functions. + + 3: N -- INTEGER Input + On entry: the number, N, of members required in the sequence + I (z),I (z),...,I (z). Constraint: N >= 1. + (nu) (nu)+1 (nu)+N-1 + + 4: SCALE -- CHARACTER*1 Input + On entry: the scaling option. + If SCALE = 'U', the results are returned unscaled. + + If SCALE = 'S', the results are returned scaled by the + -|Rez| + factor e . + Constraint: SCALE = 'U' or 'S'. + + 5: CY(N) -- COMPLEX(KIND(1.0D)) array Output + On exit: the N required function values: CY(i) contains + I (z), for i=1,2,...,N. + (nu)+i-1 + + 6: NZ -- INTEGER Output + On exit: the number of components of CY that are set to zero + due to underflow. + + If NZ > 0, then elements CY(N-NZ+1),CY(N-NZ+2),...,CY(N) are + set to zero. + + 7: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry FNU < 0.0, + + or N < 1, + + or SCALE /= 'U' or 'S'. + + IFAIL= 2 + No computation has been performed due to the likelihood of + overflow, because real(Z) is greater than a machine- + dependent threshold value (given in the Users' Note for + your implementation). This error exit can only occur when + SCALE = 'U'. + + IFAIL= 3 + The computation has been performed, but the errors due to + argument reduction in elementary functions make it likely + that the results returned by S18DEF are accurate to less + than half of machine precision. This error exit may occur + when either ABS(Z) or FNU + N - 1 is greater than a machine- + dependent threshold value (given in the Users' Note for + your implementation). + + IFAIL= 4 + No computation has been performed because the errors due to + argument reduction in elementary functions mean that all + precision in results returned by S18DEF would be lost. This + error exit may occur when either ABS(Z) or FNU + N - 1 is + greater than a machine-dependent threshold value (given in + the Users' Note for your implementation). + + IFAIL= 5 + No results are returned because the algorithm termination + condition has not been met. This may occur because the + parameters supplied to S18DEF would have caused overflow or + underflow. + + 7. Accuracy + + All constants in subroutine S18DEF are given to approximately 18 + digits of precision. Calling the number of digits of precision in + the floating-point arithmetic being used t, then clearly the + maximum number of correct digits in the results obtained is + limited by p=min(t,18). Because of errors in argument reduction + when computing elementary functions inside S18DEF, the actual + number of correct digits is limited, in general, by p-s, where + s~max(1,|log |z||,|log (nu)|) represents the number of digits + 10 10 + lost due to the argument reduction. Thus the larger the values of + |z| and (nu), the less the precision in the result. If S18DEF is + called with N>1, then computation of function values via + recurrence may lead to some further small loss of accuracy. + + If function values which should nominally be identical are + computed by calls to S18DEF with different base values of (nu) + and different N, the computed values may not agree exactly. + Empirical tests with modest values of (nu) and z have shown that + the discrepancy is limited to the least significant 3-4 digits of + precision. + + 8. Further Comments + + The time taken by the routine for a call of S18DEF is + approximately proportional to the value of N, plus a constant. In + general it is much cheaper to call S18DEF with N greater than 1, + rather than to make N separate calls to S18DEF. + + Paradoxically, for some values of z and (nu), it is cheaper to + call S18DEF with a larger value of N than is required, and then + discard the extra function values returned. However, it is not + possible to state the precise circumstances in which this is + likely to occur. It is due to the fact that the base value used + to start recurrence may be calculated in different regions for + different N, and the costs in each region may differ greatly. + + Note that if the function required is I (x) or I (x), i.e., + 0 1 + (nu)=0.0 or 1.0, where x is real and positive, and only a single + function value is required, then it may be much cheaper to call + S18AEF, S18AFF, S18CEF(*) or S18CFF(*), depending on whether a + scaled result is required or not. + + 9. Example + + The example program prints a caption and then proceeds to read + sets of data from the input data stream. The first datum is a + value for the order FNU, the second is a complex value for the + argument, Z, and the third is a value for the parameter SCALE. + The program calls the routine with N = 2 to evaluate the function + for orders FNU and FNU + 1, and it prints the results. The + process is repeated until the end of the input data stream is + encountered. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs19aaf}{NAG On-line Documentation: s19aaf} +\beginscroll +\begin{verbatim} + + + + S19AAF(3NAG) Foundation Library (12/10/92) S19AAF(3NAG) + + + + S19 -- Approximations of Special Functions S19AAF + S19AAF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S19AAF returns a value for the Kelvin function ber x via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S19AAF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Kelvin function + berx. + + Note: ber(-x)=berx, so the approximation need only consider + x>=0.0. + + The routine is based on several Chebyshev expansions: + + For 0<=x<=5, + + --' ( x)4 + berx= > a T (t) with t=2( -) -1; + -- r r ( 5) + r=0 + + For x>5, + + + + x/\/2 + e [( 1 ) 1 ] + berx= --------[(1+ -a(t))cos(alpha)+ -b(t)sin(alpha)] + [( x ) x ] + \/2(pi)x + + + + -x/\/2 + e [( 1 ) 1 ] + + --------[(1+ -c(t))sin(beta)+ -d(t)cos(beta)] + [( x ) x ] + \/2(pi)x + + x (pi) x (pi) + where (alpha)= ---- ----, (beta)= ---+ ----, + 8 8 + \/2 /2 + + and a(t), b(t), c(t), and d(t) are expansions in the variable + 10 + t= ---1. + x + + When x is sufficiently close to zero, the result is set directly + to ber 0=1.0. + + For large x, there is a danger of the result being totally + inaccurate, as the error amplification factor grows in an + essentially exponential manner; therefore the routine must fail. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + On entry ABS(X) is too large for an accurate result to be + returned. On soft failure, the routine returns zero. + + 7. Accuracy + + Since the function is oscillatory, the absolute error rather than + the relative error is important. Let E be the absolute error in + the result and (delta) be the relative error in the argument. If + (delta) is somewhat larger than the machine precision, then we + have: + + | x | + E~=| ---(ber x+bei x)|(delta) + | 1 1 | + | \/2 | + + (provided E is within machine bounds). + + For small x the error amplification is insignificant and thus the + absolute error is effectively bounded by the machine precision. + + For medium and large x, the error behaviour is oscillatory and + + + / x x/\/2 + its amplitude grows like / -----e . Therefore it is not + \/ 2(pi) + + possible to calculate the function with any accuracy when + + + x/\/2 /2(pi) + \/xe > -------. Note that this value of x is much smaller than + (delta) + + the minimum value of x for which the function overflows. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs19abf}{NAG On-line Documentation: s19abf} +\beginscroll +\begin{verbatim} + + + + S19ABF(3NAG) Foundation Library (12/10/92) S19ABF(3NAG) + + + + S19 -- Approximations of Special Functions S19ABF + S19ABF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S19ABF returns a value for the Kelvin function bei x via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S19ABF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Kelvin function + beix. + + Note: bei(-x)=beix, so the approximation need only consider + x>=0.0. + + The routine is based on several Chebyshev expansions: + + For 0<=x<=5, + + 2 + x --' ( x)4 + bei x= -- > a T (t), with t=2( -) -1; + 4 -- r r ( 5) + r=0 + + For x>5, + + + + x/\/2 + e [( 1 ) 1 ] + bei x= --------[(1+ -a(t))sin(alpha)- -b(t)cos(alpha)] + [( x ) x ] + \/2(pi)x + + + + x/\/2 + e [( 1 ) 1 ] + + --------[(1+ -c(t))cos(beta)- -d(t)sin(beta)] + [( x ) x ] + \/2(pi)x + + x (pi) x (pi) + where(alpha)= ---- ----,(beta)= ---+ ----, + 8 8 + \/2 /2 + + and a(t), b(t), c(t), and d(t) are expansions in the variable + 10 + t= ---1. + x + + When x is sufficiently close to zero, the result is computed as + 2 + x + bei x= --. If this result would underflow, the result returned is + 4 + beix=0.0. + + For large x, there is a danger of the result being totally + inaccurate, as the error amplification factor grows in an + essentially exponential manner; therefore the routine must fail. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + On entry ABS(X) is too large for an accurate result to be + returned. On soft failure, the routine returns zero. + + 7. Accuracy + + Since the function is oscillatory, the absolute error rather than + the relative error is important. Let E be the absolute error in + the function, and (delta) be the relative error in the argument. + If (delta) is somewhat larger than the machine precision, then we + have: + + | x | + E~=| ---(-ber x+bei x)|(delta) + | 1 1 | + | \/2 | + + (provided E is within machine bounds). + + For small x the error amplification is insignificant and thus the + absolute error is effectively bounded by the machine precision. + + For medium and large x, the error behaviour is oscillatory and + + + / x x\/2 + its amplitude grows like / -----e . Therefore it is + \/ 2(pi) + + impossible to calculate the functions with any accuracy when + + + x/\/2 /2(pi) + \/xe > -------. Note that this value of x is much smaller than + (delta) + + the minimum value of x for which the function overflows. + + 8. Further Comments + + For details of the time taken by the routine see the Users' Note + for your implementation. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs19acf}{NAG On-line Documentation: s19acf} +\beginscroll +\begin{verbatim} + + + + S19ACF(3NAG) Foundation Library (12/10/92) S19ACF(3NAG) + + + + S19 -- Approximations of Special Functions S19ACF + S19ACF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S19ACF returns a value for the Kelvin function ker x, via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S19ACF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Kelvin function + ker x. + + Note: for x<0 the function is undefined and at x=0 it is infinite + so we need only consider x>0. + + The routine is based on several Chebyshev expansions: + + For 0<x<=1, + + (pi) 2 + ker x=-f(t)logx+ ----x g(t)+y(t) + 16 + + 4 + where f(t), g(t) and y(t) are expansions in the variable t=2x -1; + + For 1<x<=3, + + ( 11 ) + ker x=exp(- --x)q(t) + ( 16 ) + + where q(t) is an expansion in the variable t=x-2; + + For x>3, + + + + -x/\/2 + / (pi) [( 1 ) 1 ] + ker x= / ----e [(1+ -c(t))cos(beta)- -d(t)sin(beta)] + \/ 2x [( x ) x ] + + + x (pi) + where (beta)= ---+ ----, and c(t) and d(t) are expansions in the + 8 + \/2 + 6 + variable t= --1. + x + + When x is sufficiently close to zero, the result is computed as + + 2 + ( x) ( 3 2) x + ker x=-(gamma)-log( -)+((pi)- -x ) -- + ( 2) ( 8 ) 16 + + and when x is even closer to zero, simply as + ( x) + ker x=-(gamma)-log( -). + ( 2) + + + + / (pi) -x/\/2 + For large x, ker x is asymptotically given by / ----e and + \/ 2x + + this becomes so small that it cannot be computed without + underflow and the routine fails. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X > 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + On entry X is too large, the result underflows. On soft + failure, the routine returns zero. + + IFAIL= 2 + On entry X <= 0, the function is undefined. On soft failure + the routine returns zero. + + 7. Accuracy + + Let E be the absolute error in the result, (epsilon) be the + relative error in the result and (delta) be the relative error in + the argument. If (delta) is somewhat larger than the machine + precision, then we have: + + | x | + E~=| ---(ker x+kei x)|(delta), + | 1 1 | + | \/2 | + + | ker x+kei x| + | x 1 1 | + (epsilon)~=| --- ------------|(delta). + | ker x | + | \/2 | + + For very small x, the relative error amplification factor is + 1 + approximately given by ------, which implies a strong + |logx| + attenuation of relative error. However, (epsilon) in general + cannot be less than the machine precision. + + For small x, errors are damped by the function and hence are + limited by the machine precision. + + For medium and large x, the error behaviour, like the function + itself, is oscillatory, and hence only the absolute accuracy for + the function can be maintained. For this range of x, the + + + / (pi)x -x/\/2 + amplitude of the absolute error decays like / -----e + \/ 2 + + which implies a strong attenuation of error. Eventually, ker x, + + + / (pi) -x/\/2 + which asymptotically behaves like / ----e , becomes so + \/ 2x + + small that it cannot be calculated without causing underflow, and + the routine returns zero. Note that for large x the errors are + dominated by those of the Fortran intrinsic function EXP. + + 8. Further Comments + + Underflow may occur for a few values of x close to the zeros of + ker x, below the limit which causes a failure with IFAIL = 1. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs19adf}{NAG On-line Documentation: s19adf} +\beginscroll +\begin{verbatim} + + + + S19ADF(3NAG) Foundation Library (12/10/92) S19ADF(3NAG) + + + + S19 -- Approximations of Special Functions S19ADF + S19ADF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S19ADF returns a value for the Kelvin function keix via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S19ADF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Kelvin function + keix. + + Note: for x<0 the function is undefined, so we need only consider + x>=0. + + The routine is based on several Chebyshev expansions: + + For 0<=x<=1, + + 2 + (pi) x + keix=- ----f(t)+ --[-g(t)logx+v(t)] + 4 4 + + 4 + where f(t), g(t) and v(t) are expansions in the variable t=2x -1; + + For 1<x<=3, + + ( 9 ) + keix=exp(- -x)u(t) + ( 8 ) + + where u(t) is an expansion in the variable t=x-2; + + For x>3, + + + + / (pi) -x/\/2[( 1) 1 ] + keix= / ----e [(1+ -)c(t)sin(beta)+ -d(t)cos(beta)] + \/ 2x [( x) x ] + + + x (pi) + where (beta)= ---+ ----, and c(t) and d(t) are expansions in the + 8 + \/2 + 6 + variable t= --1. + x + + For x<0, the function is undefined, and hence the routine fails + and returns zero. + + When x is sufficiently close to zero, the result is computed as + + 2 + (pi) ( ( x)) x + keix=- ----+(1-(gamma)-log( -)) -- + 4 ( ( 2)) 4 + + and when x is even closer to zero simply as + + (pi) + keix=- ----. + 4 + + + + / (pi) -x/\/2 + For large x, keix is asymptotically given by / ----e and + \/ 2x + + this becomes so small that it cannot be computed without + underflow and the routine fails. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. Constraint: X >= + 0. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + IFAIL= 1 + On entry X is too large, the result underflows. On soft + failure, the routine returns zero. + + IFAIL= 2 + On entry X < 0, the function is undefined. On soft failure + the routine returns zero. + + 7. Accuracy + + Let E be the absolute error in the result, and (delta) be the + relative error in the argument. If (delta) is somewhat larger + than the machine representation error, then we have: + + | x | + E~=| ---(-ker x+kei x)|(delta). + | 1 1 | + | \/2 | + + For small x, errors are attenuated by the function and hence are + limited by the machine precision. + + For medium and large x, the error behaviour, like the function + itself, is oscillatory and hence only absolute accuracy of the + function can be maintained. For this range of x, the amplitude of + + + / (pi)x -x/\/2 + the absolute error decays like / -----e , which implies a + \/ 2 + + strong attenuation of error. Eventually, keix, which is + + + / (pi) -x/\/2 + asymptotically given by / ----e , becomes so small that it + \/ 2x + + cannot be calculated without causing underflow and therefore the + routine returns zero. Note that for large x, the errors are + dominated by those of the Fortran intrinsic function EXP. + + 8. Further Comments + + Underflow may occur for a few values of x close to the zeros of + keix, below the limit which causes a failure with IFAIL = 1. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs20acf}{NAG On-line Documentation: s20acf} +\beginscroll +\begin{verbatim} + + + + S20ACF(3NAG) Foundation Library (12/10/92) S20ACF(3NAG) + + + + S20 -- Approximations of Special Functions S20ACF + S20ACF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S20ACF returns a value for the Fresnel Integral S(x), via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S20ACF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Fresnel Integral + + x + / ( (pi) 2) + S(x)= |sin( ----t )dt. + / ( 2 ) + 0 + + Note: S(x)=-S(-x), so the approximation need only consider x>=0.0 + + The routine is based on three Chebyshev expansions: + + For 0<x<=3, + + 3 --' ( x)4 + S(x)=x > a T (t) , with t=2( -) -1; + -- r r ( 3) + r=0 + + For x>3, + + 1 f(x) ( (pi) 2) g(x) ( (pi) 2) + S(x)= -- ----cos( ----x )- ----sin( ----x ), + 2 x ( 2 ) 3 ( 2 ) + x + + --' + where f(x) = > b T (t), + -- r r + r=0 + + --' ( 3)4 + and g(x) = > c T (t), with t=2( -) -1. + -- r r ( x) + r=0 + + (pi) 3 + For small x, S(x)~= ----x . This approximation is used when x is + 6 + sufficiently small for the result to be correct to machine + precision. For very small x, this approximation would underflow; + the result is then set exactly to zero. + + 1 1 + For large x, f(x)~= ---- and g(x)~= -----. Therefore for + (pi) 2 + (pi) + 1 1 + moderately large x, when ------- is negligible compared with -, + 2 3 2 + (pi) x + the second term in the approximation for x>3 may be dropped. For + 1 1 + very large x, when ----- becomes negligible, S(x)~= -. However + (pi)x 2 + there will be considerable difficulties in calculating + ( (pi) 2) + cos( ----x ) accurately before this final limiting value can be + ( 2 ) + ( (pi) 2) + used. Since cos( ----x ) is periodic, its value is essentially + ( 2 ) + 2 2 + determined by the fractional part of x . If x =N+(theta) where N + ( (pi) 2) + is an integer and 0<=(theta)<1, then cos( ----x ) depends on + ( 2 ) + (theta) and on N modulo 4. By exploiting this fact, it is + possible to retain significance in the calculation of + ( (pi) 2) + cos( ----x ) either all the way to the very large x limit, or at + ( 2 ) + x + least until the integer part of - is equal to the maximum + 2 + integer allowed on the machine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + There are no failure exits from this routine. The parameter IFAIL + has been included for consistency with other routines in this + chapter. + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and result respectively. + + If (delta) is somewhat larger than the machine precision (i.e., + if (delta) is due to data errors etc), then (epsilon) and (delta) + are approximately related by: + + | ( (pi) 2)| + | xsin( ----x )| + | ( 2 )| + (epsilon)~=| -------------|(delta). + | S(x) | + + Figure 1 shows the behaviour of the error amplification factor + + | ( (pi) 2)| + | xsin( ----x )| + | ( 2 )| + | -------------|. + | S(x) | + + + Figure 1 + Please see figure in printed Reference Manual + + However if (delta) is of the same order as the machine precision, + then rounding errors could make (epsilon) slightly larger than + the above relation predicts. + + For small x, (epsilon)~=3(delta) and hence there is only moderate + amplification of relative error. Of course for very small x where + the correct result would underflow and exact zero is returned, + relative error-control is lost. + + For moderately large values of x, + + | ( (pi) 2)| + |(epsilon)|~=|2xsin( ----x )||(delta)| + | ( 2 )| + + and the result will be subject to increasingly large + amplification of errors. However the above relation breaks down + 1 + for large values of x (i.e., when -- is of the order of the + 2 + x + machine precision in this region the relative error in the result + 2 + is essentially bounded by -----). + (pi)x + + Hence the effects of error amplification are limited and at worst + the relative error loss should not exceed half the possible + number of significant figures. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs20adf}{NAG On-line Documentation: s20adf} +\beginscroll +\begin{verbatim} + + + + S20ADF(3NAG) Foundation Library (12/10/92) S20ADF(3NAG) + + + + S20 -- Approximations of Special Functions S20ADF + S20ADF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S20ADF returns a value for the Fresnel Integral C(x), via the + routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S20ADF (X, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X + + 3. Description + + This routine evaluates an approximation to the Fresnel Integral + + x + / ( (pi) 2) + C(x)= |cos( ----t )dt. + / ( 2 ) + 0 + + Note: C(x)=-C(-x), so the approximation need only consider x>=0.0 + + The routine is based on three Chebyshev expansions: + + For 0<x<=3, + + --' ( x)4 + C(x)=x > a T (t) , with t=2( -) -1; + -- r r ( 3) + r=0 + + For x>3, + + 1 f(x) ( (pi) 2) g(x) ( (pi) 2) + C(x)= -+ ----sin( ----x )- ----cos( ----x ), + 2 x ( 2 ) 3 ( 2 ) + x + + --' + where f(x) = > b T (t), + -- r r + r=0 + + --' ( 3)4 + and g(x) = > c T (t), with t=2( -) -1. + -- r r ( x) + r=0 + + For small x, C(x)~=x. This approximation is used when x is + sufficiently small for the result to be correct to machine + precision. + + 1 1 + For large x, f(x)~= ---- and g(x)~= -----. Therefore for + (pi) 2 + (pi) + 1 1 + moderately large x, when ------- is negligible compared with -, + 2 3 2 + (pi) x + the second term in the approximation for x>3 may be dropped. For + 1 1 + very large x, when ----- becomes negligible, C(x)~= -. However + (pi)x 2 + there will be considerable difficulties in calculating + ( (pi) 2) + sin( ----x ) accurately before this final limiting value can be + ( 2 ) + ( (pi) 2) + used. Since sin( ----x ) is periodic, its value is essentially + ( 2 ) + 2 2 + determined by the fractional part of x . If x =N+(theta), where N + ( (pi) 2) + is an integer and 0<=(theta)<1, then sin( ----x ) depends on + ( 2 ) + (theta) and on N modulo 4. By exploiting this fact, it is + possible to retain some significance in the calculation of + ( (pi) 2) + sin( ----x ) either all the way to the very large x limit, or at + ( 2 ) + x + least until the integer part of - is equal to the maximum + 2 + integer allowed on the machine. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + On entry: the argument x of the function. + + 2: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + There are no failure exits from this routine. The parameter IFAIL + has been included for consistency with other routines in this + chapter. + + 7. Accuracy + + Let (delta) and (epsilon) be the relative errors in the argument + and result respectively. + + If (delta) is somewhat larger than the machine precision (i.e if + (delta) is due to data errors etc), then (epsilon) and (delta) + are approximately related by: + + | ( (pi) 2)| + | xcos( ----x )| + | ( 2 )| + (epsilon)~=| -------------|(delta). + | C(x) | + + Figure 1 shows the behaviour of the error amplification factor + + | ( (pi) 2)| + | xcos( ----x )| + | ( 2 )| + | -------------|. + | C(x) | + + + Figure 1 + Please see figure in printed Reference Manual + + However if (delta) is of the same order as the machine precision, + then rounding errors could make (epsilon) slightly larger than + the above relation predicts. + + For small x, (epsilon)~=(delta) and there is no amplification of + relative error. + + For moderately large values of x, + + | ( (pi) 2)| + |(epsilon)|~=|2xcos( ----x )||(delta)| + | ( 2 )| + + and the result will be subject to increasingly large + amplification of errors. However the above relation breaks down + 1 + for large values of x (i.e., when -- is of the order of the + 2 + x + machine precision); in this region the relative error in the + 2 + result is essentially bounded by -----). + (pi)x + + Hence the effects of error amplification are limited and at worst + the relative error loss should not exceed half the possible + number of significant figures. + + 8. Further Comments + + None. + + 9. Example + + The example program reads values of the argument x from a file, + evaluates the function at each value of x and prints the results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs21baf}{NAG On-line Documentation: s21baf} +\beginscroll +\begin{verbatim} + + + + S21BAF(3NAG) Foundation Library (12/10/92) S21BAF(3NAG) + + + + S21 -- Approximations of Special Functions S21BAF + S21BAF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S21BAF returns a value of an elementary integral, which occurs as + a degenerate case of an elliptic integral of the first kind, via + the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S21BAF (X, Y, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X, Y + + 3. Description + + This routine calculates an approximate value for the integral + + infty + 1 / dt + R (x,y)= - | ---------- + C 2 / + 0 \/t+x(t+y) + + where x>=0 and y/=0. + + This function, which is related to the logarithm or inverse + hyperbolic functions for y<x and to inverse circular functions if + x<y, arises as a degenerate form of the elliptic integral of the + first kind. If y<0, the result computed is the Cauchy principal + value of the integral. + + The basic algorithm, which is due to Carlson [2] and [3], is to + reduce the arguments recursively towards their mean by the + system: + + x =x, + 0 + + y =y + 0 + + (mu) =(x +2y )/3, + n n n + + S =(y -x )/3(mu) + n n n n + + + + (lambda) =y +2 /x y + n n \/ n n + + x =(x +(lambda) )/4, + n+1 n n + + y =(y +(lambda) )/4. + n+1 n n + + The quantity |S | for n=0,1,2,3,... decreases with increasing n, + n + n + eventually |S |~1/4 . For small enough S the required function + n n + value can be approximated by the first few terms of the Taylor + series about the mean. That is + + ( 2 3 4 5) + ( 3S S 3S 9S ) + ( n n n n) + R (x,y)=(1+ ---+ --+ ---+ ---)/ /(mu) . + C ( 10 7 8 22 ) \/ n + + The truncation error involved in using this approximation is + 6 + bounded by 16|S | /(1-2|S |) and the recursive process is stopped + n n + when S is small enough for this truncation error to be + n + negligible compared to the machine precision. + + Within the domain of definition, the function value is itself + representable for all representable values of its arguments. + However, for values of the arguments near the extremes the above + algorithm must be modified so as to avoid causing underflows or + overflows in intermediate steps. In extreme regions arguments are + pre-scaled away from the extremes and compensating scaling of the + result is done before returning to the calling program. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Carlson B C (1978) Computing Elliptic Integrals by + Duplication. (Preprint) Department of Physics, Iowa State + University. + + [3] Carlson B C (1988) A Table of Elliptic Integrals of the + Third Kind. Math. Comput. 51 267--280. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + + 2: Y -- DOUBLE PRECISION Input + On entry: the arguments x and y of the function, + respectively. Constraint: X >= 0.0 and Y /= 0.0. + + 3: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry X < 0.0; the function is undefined. + + IFAIL= 2 + On entryY = 0.0; the function is undefined. + + On soft failure the routine returns zero. + + 7. Accuracy + + In principle the routine is capable of producing full machine + precision. However round-off errors in internal arithmetic will + result in slight loss of accuracy. This loss should never be + excessive as the algorithm does not involve any significant + amplification of round-off error. It is reasonable to assume that + the result is accurate to within a small multiple of the machine + precision. + + 8. Further Comments + + Users should consult the Chapter Introduction which shows the + relationship of this function to the classical definitions of the + elliptic integrals. + + 9. Example + + This example program simply generates a small set of non-extreme + arguments which are used with the routine to produce the table of + low accuracy results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. + +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs21bbf}{NAG On-line Documentation: s21bbf} +\beginscroll +\begin{verbatim} + + + + S21BBF(3NAG) Foundation Library (12/10/92) S21BBF(3NAG) + + + + S21 -- Approximations of Special Functions S21BBF + S21BBF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S21BBF returns a value of the symmetrised elliptic integral of + the first kind, via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S21BBF (X, Y, Z, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X, Y, Z + + 3. Description + + This routine calculates an approximation to the integral + + infty + 1 / dt + R (x,y,z)= - | ----------------- + F 2 / + 0 \/(t+x)(t+y)(t+z) + + where x, y, z>=0 and at most one is zero. + + The basic algorithm, which is due to Carlson [2] and [3], is to + reduce the arguments recursively towards their mean by the rule: + + x =min(x,y,z),z =max(x,y,z), + 0 0 + + y = remaining third intermediate value argument. + 0 + + (This ordering, which is possible because of the symmetry of the + function, is done for technical reasons related to the avoidance + of overflow and underflow.) + + (mu) = (x +y +3z )/3 + n n n n + + X = (1-x )/(mu) + n n n + + Y = (1-y )/(mu) + n n n + + Z = (1-z )/(mu) + n n n + + + + (lambda) = /x y + /y z + /z x + n \/ n n / n n / n n + + x = (x +(lambda) )/4 + n+1 n n + + y = (y +(lambda) )/4 + n+1 n n + + z = (z +(lambda) )/4 + n+1 n n + + (epsilon) =max(|X |,|Y |,|Z |) and the function may be + n n n n + approximated adequately by a 5th order power series: + + ( 2 ) + ( E E 3E E E ) + 1 ( 2 2 2 3 3) + R (x,y,z)= --------(1- --+ --- -----+ --) + F ( 10 24 44 14) + /(mu) + \/ n + + where E =X Y +Y Z +Z X ,E =X Y Z . + 2 n n n n n n 3 n n n + + The truncation error involved in using this approximation is + 6 + bounded by (epsilon) /4(1-(epsilon) ) and the recursive process + n n + is stopped when this truncation error is negligible compared with + the machine precision. + + Within the domain of definition, the function value is itself + representable for all representable values of its arguments. + However, for values of the arguments near the extremes the above + algorithm must be modified so as to avoid causing underflows or + overflows in intermediate steps. In extreme regions arguments are + pre-scaled away from the extremes and compensating scaling of the + result is done before returning to the calling program. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Carlson B C (1978) Computing Elliptic Integrals by + Duplication. (Preprint) Department of Physics, Iowa State + University. + + [3] Carlson B C (1988) A Table of Elliptic Integrals of the + Third Kind. Math. Comput. 51 267--280. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + + 2: Y -- DOUBLE PRECISION Input + + 3: Z -- DOUBLE PRECISION Input + On entry: the arguments x, y and z of the function. + Constraint: X, Y, Z >= 0.0 and only one of X, Y and Z may be + zero. + + 4: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry one or more of X, Y and Z is negative; the function + is undefined. + + IFAIL= 2 + On entry two or more of X, Y and Z are zero; the function is + undefined. + + On soft failure, the routine returns zero. + + 7. Accuracy + + In principle the routine is capable of producing full machine + precision. However round-off errors in internal arithmetic will + result in slight loss of accuracy. This loss should never be + excessive as the algorithm does not involve any significant + amplification of round-off error. It is reasonable to assume that + the result is accurate to within a small multiple of the machine + precision. + + 8. Further Comments + + Users should consult the Chapter Introduction which shows the + relationship of this function to the classical definitions of the + elliptic integrals. + + If two arguments are equal, the function reduces to the + elementary integral R , computed by S21BAF. + C + + 9. Example + + This example program simply generates a small set of non-extreme + arguments which are used with the routine to produce the table of + low accuracy results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs21bcf}{NAG On-line Documentation: s21bcf} +\beginscroll +\begin{verbatim} + + + + S21BCF(3NAG) Foundation Library (12/10/92) S21BCF(3NAG) + + + + S21 -- Approximations of Special Functions S21BCF + S21BCF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S21BCF returns a value of the symmetrised elliptic integral of + the second kind, via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S21BCF (X, Y, Z, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X, Y, Z + + 3. Description + + This routine calculates an approximate value for the integral + + infty + 3 / dt + R (x,y,z)= - | ------------------- + D 2 / + 0 / 3 + \/ (t+x)(t+y)(t+z) + + where x, y>=0, at most one of x and y is zero, and z>0. + + The basic algorithm, which is due to Carlson [2] and [3], is to + reduce the arguments recursively towards their mean by the rule: + + x = x + 0 + + y = y + 0 + + z = z + 0 + + (mu) = (x +y +3z )/5 + n n n n + + X = (1-x )/(mu) + n n n + + Y = (1-y )/(mu) + n n n + + Z = (1-z )/(mu) + n n n + + + + (lambda) = /x y + /y z + /z x + n\/ n n / n n / n n + + x = (x +(lambda) )/4 + n+1 n n + + y = (y +(lambda) )/4 + n+1 n n + + z = (z +(lambda) )/4 + n+1 n n + + For n sufficiently large, + + ( 1)n + (epsilon) =max(|X |,|Y |,|Z |)~( -) + n n n n ( 4) + + and the function may be approximated adequately by a 5th order + n-1 -m + -- 4 + power series R (x,y,z)=3 > -------------------+ + D -- + m=0 (z +(lambda) ) /z + m n \/ m + + + -n + 4 [ 3 (2) 1 (3) 3 (2) 2 3 (4) 3 (2) (3) 3 (5)] + ---------[1+ -S + -S + --(S ) + --S + --S S + --S ] + [ 7 n 3 n 22 n 11 n 13 n n 13 n ] + / 3 + / (mu) + \/ n + + where + + (m) ( m m m) + S =(X +Y +3Z )/2m. + n ( n n n) + + The truncation error in this expansion is bounded by + 6 + 3(epsilon) + n + ------------------- and the recursive process is terminated when + + + / 3 + / (1-(epsilon) ) + \/ n + this quantity is negligible compared with the machine precision. + + The routine may fail either because it has been called with + arguments outside the domain of definition, or with arguments so + extreme that there is an unavoidable danger of setting underflow + or overflow. + + -3/2 + Note: R (x,x,x)=x , so there exists a region of extreme + D + arguments for which the function value is not representable. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Carlson B C (1978) Computing Elliptic Integrals by + Duplication. (Preprint) Department of Physics, Iowa State + University. + + [3] Carlson B C (1988) A Table of Elliptic Integrals of the + Third Kind. Math. Comput. 51 267--280. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + + 2: Y -- DOUBLE PRECISION Input + + 3: Z -- DOUBLE PRECISION Input + On entry: the arguments x, y and z of the function. + Constraint: X, Y >= 0.0, Z > 0.0 and only one of X and Y may + be zero. + + 4: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry either X or Y is negative, or both X and Y are + zero; the function is undefined. + + IFAIL= 2 + On entry Z <= 0.0; the function is undefined. + + IFAIL= 3 + On entry either Z is too close to zero or both X and Y are + too close to zero: there is a danger of setting overflow. + + IFAIL= 4 + On entry at least one of X, Y and Z is too large: there is a + danger of setting underflow. + + On soft failure the routine returns zero. + + 7. Accuracy + + In principle the routine is capable of producing full machine + precision. However round-off errors in internal arithmetic will + result in slight loss of accuracy. This loss should never be + excessive as the algorithm does not involve any significant + amplification of round-off error. It is reasonable to assume that + the result is accurate to within a small multiple of the machine + precision. + + 8. Further Comments + + Users should consult the Chapter Introduction which shows the + relationship of this function to the classical definitions of the + elliptic integrals. + + 9. Example + + This example program simply generates a small set of non-extreme + arguments which are used with the routine to produce the table of + low accuracy results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} +\begin{page}{manpageXXs21bdf}{NAG On-line Documentation: s21bdf} +\beginscroll +\begin{verbatim} + + + + S21BDF(3NAG) Foundation Library (12/10/92) S21BDF(3NAG) + + + + S21 -- Approximations of Special Functions S21BDF + S21BDF -- NAG Foundation Library Routine Document + + Note: Before using this routine, please read the Users' Note for + your implementation to check implementation-dependent details. + The symbol (*) after a NAG routine name denotes a routine that is + not included in the Foundation Library. + + 1. Purpose + + S21BDF returns a value of the symmetrised elliptic integral of + the third kind, via the routine name. + + 2. Specification + + DOUBLE PRECISION FUNCTION S21BDF (X, Y, Z, R, IFAIL) + INTEGER IFAIL + DOUBLE PRECISION X, Y, Z, R + + 3. Description + + This routine calculates an approximation to the integral + + infty + 3 / dt + R (x,y,z,(rho))= - | -------------------------- + J 2 / + 0 (t+(rho))\/(t+x)(t+y)(t+z) + + where x, y, z>=0, (rho)/=0 and at most one of x, y and z is zero. + + If p<0, the result computed is the Cauchy principal value of the + integral. + + The basic algorithm, which is due to Carlson [2] and [3], is to + reduce the arguments recursively towards their mean by the rule: + + x = x + 0 + + y = y + 0 + + z = z + 0 + + (rho) = (rho) + 0 + + (mu) = (x +y +z +2(rho) )/5 + n n n n n + + X = (1-x )/(mu) + n n n + + Y = (1-y )/(mu) + n n n + + Z = (1-z )/(mu) + n n n + + P = (1-(rho) )/(mu) + n n n + + + + (lambda) = /x y + /y z + /z x + n\/ n n / n n / n n + + x = (x +(lambda) )/4 + n+1 n n + + y = (y +(lambda) )/4 + n+1 n n + + z = (z +(lambda) )/4 + n+1 n n + + (rho) = ((rho) +(lambda) )/4 + n+1 n n + 2 + [ ] + (alpha) =[(rho) ( /x + /y + /z )+ /x y z ] + n [ n \/ n / n / n / n n n] + + 2 + (beta) = (rho) ((rho) +(lambda) ) + n n n n + + For n sufficiently large, + + 1 + (epsilon) =max(|X |,|Y |,|Z |,|P |)~ -- + n n n n n n + 4 + + and the function may be approximated by a 5th order power series + n-1 + -- -m + R (x,y,z,(rho))=3 > 4 R ((alpha) ,(beta) ) + J -- C m m + m=0 + + + -n + 4 [ 3 (2) 1 (3) 3 (2) 2 3 (4) 3 (2) (3) 3 (5)] + + ---------[1+ -S + -S + --(S ) + --S + --S S + --S ] + [ 7 n 3 n 22 n 11 n 13 n n 13 n ] + / 3 + / (mu) + \/ n + + (m) m m m m + where S = (X +Y +Z +2P )/2m. + n n n n n + + The truncation error in this expansion is bounded by + + + 6 / 3 + 3(epsilon) / / (1-(epsilon) ) and the recursion process is + n \/ n + terminated when this quantity is negligible compared with the + machine precision. The routine may fail either because it has + been called with arguments outside the domain of definition or + with arguments so extreme that there is an unavoidable danger of + setting underflow or overflow. + + 3 + - - + 2 + + Note: R (x,x,x,x)=x , so there exists a region of extreme + J + arguments for which the function value is not representable. + + 4. References + + [1] Abramowitz M and Stegun I A (1968) Handbook of Mathematical + Functions. Dover Publications. + + [2] Carlson B C (1978) Computing Elliptic Integrals by + Duplication. (Preprint) Department of Physics, Iowa State + University. + + [3] Carlson B C (1988) A Table of Elliptic Integrals of the + Third Kind. Math. Comput. 51 267--280. + + 5. Parameters + + 1: X -- DOUBLE PRECISION Input + + 2: Y -- DOUBLE PRECISION Input + + 3: Z -- DOUBLE PRECISION Input + + 4: R -- DOUBLE PRECISION Input + On entry: the arguments x, y, z and (rho) of the function. + Constraint: X, Y, Z >= 0.0, R /= 0.0 and at most one of X, Y + and Z may be zero. + + 5: IFAIL -- INTEGER Input/Output + On entry: IFAIL must be set to 0, -1 or 1. For users not + familiar with this parameter (described in the Essential + Introduction) the recommended value is 0. + + On exit: IFAIL = 0 unless the routine detects an error (see + Section 6). + + 6. Error Indicators and Warnings + + Errors detected by the routine: + + If on entry IFAIL = 0 or -1, explanatory error messages are + output on the current error message unit (as defined by X04AAF). + + IFAIL= 1 + On entry at least one of X, Y and Z is negative, or at least + two of them are zero; the function is undefined. + + IFAIL= 2 + On entry R = 0.0; the function is undefined. + + IFAIL= 3 + On entry either R is too close to zero, or any two of X, Y + and Z are too close to zero; there is a danger of setting + overflow. + + IFAIL= 4 + On entry at least one of X, Y, Z and R is too large; there + is a danger of setting underflow. + + IFAIL= 5 + An error has occurred in a call to S21BAF. Any such + occurrence should be reported to NAG. + + On soft failure, the routine returns zero. + + 7. Accuracy + + In principle the routine is capable of producing full machine + precision. However round-off errors in internal arithmetic will + result in slight loss of accuracy. This loss should never be + excessive as the algorithm does not involve any significant + amplification of round-off error. It is reasonable to assume that + the result is accurate to within a small multiple of the machine + precision. + + 8. Further Comments + + Users should consult the Chapter Introduction which shows the + relationship of this function to the classical definitions of the + elliptic integrals. + + If the argument R is equal to any of the other arguments, the + function reduces to the integral R , computed by S21BCF. + D + + 9. Example + + This example program simply generates a small set of non-extreme + arguments which are used with the routine to produce the table of + low accuracy results. + + The example program is not reproduced here. The source code for + all example programs is distributed with the NAG Foundation + Library software and should be available on-line. +\end{verbatim} +\endscroll +\end{page} |