s18ac returns the value of the modified Bessel function K0x.

Syntax

C#
public static double s18ac(
	double x,
	out int ifail
)
Visual Basic
Public Shared Function s18ac ( _
	x As Double, _
	<OutAttribute> ByRef ifail As Integer _
) As Double
Visual C++
public:
static double s18ac(
	double x, 
	[OutAttribute] int% ifail
)
F#
static member s18ac : 
        x : float * 
        ifail : int byref -> float 

Parameters

x
Type: System..::..Double
On entry: the argument x of the function.
Constraint: x>0.0.
ifail
Type: System..::..Int32%
On exit: ifail=0 unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

Return Value

s18ac returns the value of the modified Bessel function K0x.

Description

s18ac evaluates an approximation to the modified Bessel function of the second kind K0x.
Note:  K0x is undefined for x0 and the method will fail for such arguments.
The method is based on five Chebyshev expansions:
For 0<x1,
K0x=-lnxr=0arTrt+r=0brTrt,   where ​t=2x2-1.
For 1<x2,
K0x=e-xr=0crTrt,   where ​t=2x-3.
For 2<x4,
K0x=e-xr=0drTrt,   where ​t=x-3.
For x>4,
K0x=e-xxr=0erTrt,where ​t=9-x1+x.
For x near zero, K0x-γ-lnx2, where γ denotes 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 K0, the result is set exactly to zero.

References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications

Error Indicators and Warnings

Errors or warnings detected by the method:
ifail=1
x0.0, K0 is undefined. On failure the method returns zero.
ifail=-9000
An error occured, see message report.

Accuracy

Let δ and ε be the relative errors in the argument and result respectively.
If δ is somewhat larger than the machine precision (i.e., if δ is due to data errors etc.), then ε and δ are approximately related by:
εxK1xK0xδ.
Figure 1 shows the behaviour of the error amplification factor
xK1xK0x.
However, if δ is of the same order as machine precision, then rounding errors could make ε slightly larger than the above relation predicts.
For small x, the amplification factor is approximately 1lnx, which implies strong attenuation of the error, but in general ε can never be less than the machine precision.
For large x, εxδ and we have strong amplification of the relative error. Eventually K0, which is asymptotically given by e-xx, becomes so small that it cannot be calculated without underflow and hence the method will return zero. Note that for large x the errors will be dominated by those of the standard function exp.
Figure 1
Figure 1

Parallelism and Performance

None.

Further Comments

None.

Example

This example reads values of the argument x from a file, evaluates the function at each value of x and prints the results.

Example program (C#): s18ace.cs

Example program data: s18ace.d

Example program results: s18ace.r

See Also