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

Chapter Contents
Chapter Introduction
NAG Toolbox

NAG Toolbox: nag_stat_pdf_vavilov (g01mu)

Purpose

nag_stat_pdf_vavilov (g01mu) returns the value of the Vavilov density function ${\varphi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$.
It is intended to be used after a call to nag_stat_init_vavilov (g01zu).

Syntax

[result, ifail] = g01mu(x, rcomm)
[result, ifail] = nag_stat_pdf_vavilov(x, rcomm)

Description

nag_stat_pdf_vavilov (g01mu) evaluates an approximation to the Vavilov density function ${\varphi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ given by
 $ϕVλ;κ,β2=12πi ∫c-i∞ c+i∞eλsfs;κ,β2ds,$
where $\kappa >0$ and $0\le {\beta }^{2}\le 1$, $c$ is an arbitrary real constant and
 $fs;κ,β2=Cκ,β2expsln⁡κ+s+κβ2 lnsκ+E1 sκ -κexp-sκ .$
${E}_{1}\left(x\right)=\underset{0}{\overset{x}{\int }}{t}^{-1}\left(1-{e}^{-t}\right)dt$ is the exponential integral, $C\left(\kappa ,{\beta }^{2}\right)=\mathrm{exp}\left\{\kappa \left(1+\gamma {\beta }^{2}\right)\right\}$ and $\gamma$ is Euler's constant.
The method used is based on Fourier expansions. Further details can be found in Schorr (1974).
For values of $\kappa \le 0.01$, the Vavilov distribution can be replaced by the Landau distribution since ${\lambda }_{V}=\left({\lambda }_{L}-\mathrm{ln}\kappa \right)/\kappa$. For values of $\kappa \ge 10$, the Vavilov distribution can be replaced by a Gaussian distribution with mean $\mu =\gamma -1-{\beta }^{2}-\mathrm{ln}\kappa$ and variance ${\sigma }^{2}=\left(2-{\beta }^{2}\right)/2\kappa$.

References

Schorr B (1974) Programs for the Landau and the Vavilov distributions and the corresponding random numbers Comp. Phys. Comm. 7 215–224

Parameters

Compulsory Input Parameters

1:     $\mathrm{x}$ – double scalar
The argument $\lambda$ of the function.
2:     $\mathrm{rcomm}\left(322\right)$ – double array
This must be the same argument rcomm as returned by a previous call to nag_stat_init_vavilov (g01zu).

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$
Either the initialization function has not been called prior to the first call of this function or a communication array has become corrupted.
${\mathbf{ifail}}=-99$
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.

Accuracy

At least five significant digits are usually correct.

nag_stat_pdf_vavilov (g01mu) can be called repeatedly with different values of $\lambda$ provided that the values of $\kappa$ and ${\beta }^{2}$ remain unchanged between calls. Otherwise, nag_stat_init_vavilov (g01zu) must be called again.

Example

This example evaluates ${\varphi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ at $\lambda =2.5$, $\kappa =0.4$ and ${\beta }^{2}=0.1$, and prints the results.
```function g01mu_example

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

x      = 2.5;
rkappa = 0.4;
beta2  = 0.1;

fprintf('  x     rkappa    beta2        y\n\n');

% Initialize rcomm array (new value of rkappa or beta2)
mode = int64(0);
[xl, xu, rcomm, ifail] = g01zu( ...
rkappa, beta2, mode);

% Compute value of Vavilov density function
[y, ifail] = g01mu( ...
x, rcomm);

% Display results
fprintf('%4.1f%9.1f%9.1f%15.4e\n', x, rkappa, beta2, y);

```
```g01mu example results

x     rkappa    beta2        y

2.5      0.4      0.1     8.3675e-02
```