Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_specfun_kelvin_ker (s19ac)

## Purpose

nag_specfun_kelvin_ker (s19ac) returns a value for the Kelvin function $\mathrm{ker}x$, via the function name.

## Syntax

[result, ifail] = s19ac(x)
[result, ifail] = nag_specfun_kelvin_ker(x)

## Description

nag_specfun_kelvin_ker (s19ac) evaluates an approximation to the Kelvin function $\mathrm{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 function is based on several Chebyshev expansions:
For $0,
 $ker⁡x=-ftlogx+π16x2gt+yt$
where $f\left(t\right)$, $g\left(t\right)$ and $y\left(t\right)$ are expansions in the variable $t=2{x}^{4}-1$.
For $1,
 $ker⁡x=exp-1116x qt$
where $q\left(t\right)$ is an expansion in the variable $t=x-2$.
For $x>3$,
 $ker⁡x=π 2x e-x/2 1+1xct cos⁡β-1xdtsin⁡β$
where $\beta =\frac{x}{\sqrt{2}}+\frac{\pi }{8}$, and $c\left(t\right)$ and $d\left(t\right)$ are expansions in the variable $t=\frac{6}{x}-1$.
When $x$ is sufficiently close to zero, the result is computed as
 $ker⁡x=-γ-logx2+π-38x2 x216$
and when $x$ is even closer to zero, simply as $\mathrm{ker}x=-\gamma -\mathrm{log}\left(\frac{x}{2}\right)$.
For large $x$, $\mathrm{ker}x$ is asymptotically given by $\sqrt{\frac{\pi }{2x}}{e}^{-x/\sqrt{2}}$ and this becomes so small that it cannot be computed without underflow and the function fails.

## References

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

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{x}$ – double scalar
The argument $x$ of the function.
Constraint: ${\mathbf{x}}>0.0$.

None.

### Output Parameters

1:     $\mathrm{result}$ – double scalar
The result of the function.
2:     $\mathrm{ifail}$int64int32nag_int scalar
${\mathbf{ifail}}={\mathbf{0}}$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

Errors or warnings detected by the function:
${\mathbf{ifail}}=1$
On entry, x is too large: the result underflows. On soft failure, the function returns zero.
${\mathbf{ifail}}=2$
On entry, ${\mathbf{x}}\le 0.0$: the function is undefined. On soft failure the function returns zero.
${\mathbf{ifail}}=-99$
An unexpected error has been triggered by this routine. Please contact NAG.
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.

## 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:
 $E≃ x2 ker1⁡x+ kei1⁡x δ,$
 $ε ≃ x2 ker1⁡x + kei1⁡x ker⁡x δ.$
For very small $x$, the relative error amplification factor is approximately given by $\frac{1}{\left|\mathrm{log}\left(x\right)\right|}$, which implies a strong 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 amplitude of the absolute error decays like $\sqrt{\frac{\pi x}{2}}{e}^{-x/\sqrt{2}}$ which implies a strong attenuation of error. Eventually, $\mathrm{ker}x$, which asymptotically behaves like $\sqrt{\frac{\pi }{2x}}{e}^{-x/\sqrt{2}}$, becomes so small that it cannot be calculated without causing underflow, and the function returns zero. Note that for large $x$ the errors are dominated by those of the standard function exp.

Underflow may occur for a few values of $x$ close to the zeros of $\mathrm{ker}x$, below the limit which causes a failure with ${\mathbf{ifail}}={\mathbf{1}}$.

## Example

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

fprintf('s19ac example results\n\n');

x = [0.1   1    2.5   5   10   15];
n = size(x,2);
result = x;

for j=1:n
[result(j), ifail] = s19ac(x(j));
end

disp('      x          ker(x)');
fprintf('%12.3e%12.3e\n',[x; result]);

```
```s19ac example results

x          ker(x)
1.000e-01   2.420e+00
1.000e+00   2.867e-01
2.500e+00  -6.969e-02
5.000e+00  -1.151e-02
1.000e+01   1.295e-04
1.500e+01  -1.514e-08
```

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015