s17ac returns the value of the Bessel function Y0x.

Syntax

C#
public static double s17ac(
	double x,
	out int ifail
)
Visual Basic
Public Shared Function s17ac ( _
	x As Double, _
	<OutAttribute> ByRef ifail As Integer _
) As Double
Visual C++
public:
static double s17ac(
	double x, 
	[OutAttribute] int% ifail
)
F#
static member s17ac : 
        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

s17ac returns the value of the Bessel function Y0x.

Description

s17ac evaluates an approximation to the Bessel function of the second kind Y0x.
Note:  Y0x is undefined for x0 and the method will fail for such arguments.
The method is based on four Chebyshev expansions:
For 0<x8,
Y0x=2πlnxr=0arTrt+r=0brTrt,   with ​t=2x82-1.
For x>8,
Y0x=2πxP0xsinx-π4+Q0xcosx-π4
where P0x=r=0crTrt,
and Q0x=8xr=0drTrt,with ​t=28x2-1.
For x near zero, Y0x2π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 very large x, it becomes impossible to provide results with any reasonable accuracy (see [Accuracy]), hence the method fails. Such arguments contain insufficient information to determine the phase of oscillation of Y0x; only the amplitude, 2πn, can be determined and this is returned on failure. The range for which this occurs is roughly related to machine precision; the method will fail if x1/machine precision (see the Users' Note for your implementation for details).

References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications
Clenshaw C W (1962) Chebyshev Series for Mathematical Functions Mathematical tables HMSO

Error Indicators and Warnings

Errors or warnings detected by the method:
ifail=1
x is too large. On failure the method returns the amplitude of the Y0 oscillation, 2/πx.
ifail=2
x0.0, Y0 is undefined. On failure the method returns zero.
ifail=-9000
An error occured, see message report.

Accuracy

Let δ be the relative error in the argument and E be the absolute error in the result. (Since Y0x oscillates about zero, absolute error and not relative error is significant, except for very small x.)
If δ is somewhat larger than the machine representation error (e.g., if δ is due to data errors etc.), then E and δ are approximately related by
ExY1xδ
(provided E is also within machine bounds). Figure 1 displays the behaviour of the amplification factor xY1x.
However, if δ 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 δ and the method should provide relative accuracy bounded by the machine precision.
For very large x, the above relation ceases to apply. In this region, Y0x2πxsinx-π4. The amplitude 2πx can be calculated with reasonable accuracy for all x, but sinx-π4 cannot. If x-π4 is written as 2Nπ+θ where N is an integer and 0θ<2π, then sinx-π4 is determined by θ only. If xδ-1, θ 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 Y0x and the method must fail.
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#): s17ace.cs

Example program data: s17ace.d

Example program results: s17ace.r

See Also