g05sb generates a vector of pseudorandom numbers taken from a beta distribution with parameters $a$ and $b$.

# Syntax

C#
```public static void g05sb(
int n,
double a,
double b,
G05..::..G05State g05state,
double[] x,
out int ifail
)```
Visual Basic
```Public Shared Sub g05sb ( _
n As Integer, _
a As Double, _
b As Double, _
g05state As G05..::..G05State, _
x As Double(), _
<OutAttribute> ByRef ifail As Integer _
)```
Visual C++
```public:
static void g05sb(
int n,
double a,
double b,
G05..::..G05State^ g05state,
array<double>^ x,
[OutAttribute] int% ifail
)```
F#
```static member g05sb :
n : int *
a : float *
b : float *
g05state : G05..::..G05State *
x : float[] *
ifail : int byref -> unit
```

#### Parameters

n
Type: System..::..Int32
On entry: $n$, the number of pseudorandom numbers to be generated.
Constraint: ${\mathbf{n}}\ge 0$.
a
Type: System..::..Double
On entry: $a$, the parameter of the beta distribution.
Constraint: ${\mathbf{a}}>0.0$.
b
Type: System..::..Double
On entry: $b$, the parameter of the beta distribution.
Constraint: ${\mathbf{b}}>0.0$.
g05state
Type: NagLibrary..::..G05..::..G05State
An Object of type G05.G05State.
x
Type: array<System..::..Double>[]()[][]
An array of size [n]
On exit: the $n$ pseudorandom numbers from the specified beta distribution.
ifail
Type: System..::..Int32%
On exit: ${\mathbf{ifail}}={0}$ unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

# Description

The beta distribution has PDF (probability density function)
One of four algorithms is used to generate the variates depending on the values of $a$ and $b$. Let $\alpha$ be the maximum and $\beta$ be the minimum of $a$ and $b$. Then the algorithms are as follows:
 (i) if $\alpha <0.5$, Johnk's algorithm is used, see for example Dagpunar (1988). This generates the beta variate as ${u}_{1}^{1/a}/\left(\begin{array}{c}{u}_{1}^{1/a}+{u}_{2}^{1/b}\end{array}\right)$, where ${u}_{1}$ and ${u}_{2}$ are uniformly distributed random variates; (ii) if $\beta >1$, the algorithm BB given by Cheng (1978) is used. This involves the generation of an observation from a beta distribution of the second kind by the envelope rejection method using a log-logistic target distribution and then transforming it to a beta variate; (iii) if $\alpha >1$ and $\beta <1$, the switching algorithm given by Atkinson (1979) is used. The two target distributions used are ${f}_{1}\left(x\right)=\beta {x}^{\beta }$ and ${f}_{2}\left(x\right)=\alpha {\left(1-x\right)}^{\beta -1}$, along with the approximation to the switching parameter of $t=\left(1-\beta \right)/\left(\alpha +1-\beta \right)$; (iv) in all other cases, Cheng's BC algorithm (see Cheng (1978)) is used with modifications suggested by Dagpunar (1988). This algorithm is similar to BB, used when $\beta >1$, but is tuned for small values of $a$ and $b$.
One of the initialization methods (G05KFF not in this release) (for a repeatable sequence if computed sequentially) or (G05KGF not in this release) (for a non-repeatable sequence) must be called prior to the first call to g05sb.

# References

Atkinson A C (1979) A family of switching algorithms for the computer generation of beta random variates Biometrika 66 141–5
Cheng R C H (1978) Generating beta variates with nonintegral shape parameters Comm. ACM 21 317–322
Dagpunar J (1988) Principles of Random Variate Generation Oxford University Press
Hastings N A J and Peacock J B (1975) Statistical Distributions Butterworth

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
On entry, ${\mathbf{n}}<0$.
${\mathbf{ifail}}=2$
On entry, ${\mathbf{a}}\le 0.0$.
${\mathbf{ifail}}=3$
On entry, ${\mathbf{b}}\le 0.0$.
${\mathbf{ifail}}=4$
 On entry, state vector was not initialized or has been corrupted.
${\mathbf{ifail}}=-9000$
An error occured, see message report.
${\mathbf{ifail}}=-8000$
Negative dimension for array $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-6000$
Invalid Parameters $〈\mathit{\text{value}}〉$

Not applicable.

# Parallelism and Performance

None.

To generate an observation, $y$, from the beta distribution of the second kind from an observation, $x$, generated by g05sb the transformation, $y=x/\left(1-x\right)$, may be used.