## RANDN Gaussian (Normal) Random Number Generator

Section: Random Number Generation

### Usage

Creates an array of pseudo-random numbers of the specified size. The numbers are normally distributed with zero mean and a unit standard deviation (i.e.,`mu = 0, sigma = 1`

).
Two seperate syntaxes are possible. The first syntax specifies the array
dimensions as a sequence of scalar dimensions:
y = randn(d1,d2,...,dn).

The resulting array has the given dimensions, and is filled with
random numbers. The type of `y`

is `double`

, a 64-bit floating
point array. To get arrays of other types, use the typecast
functions.
The second syntax specifies the array dimensions as a vector,
where each element in the vector specifies a dimension length:

y = randn([d1,d2,...,dn]).

This syntax is more convenient for calling `randn`

using a
variable for the argument.
Finally, `randn`

supports two additional forms that allow
you to manipulate the state of the random number generator.
The first retrieves the state

y = randn('state')

which is a 625 length integer vector. The second form sets the state

randn('state',y)

or alternately, you can reset the random number generator with

randn('state',0)

### Function Internals

Recall that the probability density function (PDF) of a normal random variable is

The Gaussian random numbers are generated from pairs of uniform random numbers using a transformation technique.

### Example

The following example demonstrates an example of using the first form of the`randn`

function.
--> randn(2,2,2) ans = (:,:,1) = -1.7375 -0.5664 -0.2634 -1.0112 (:,:,2) = -0.4020 0.0557 -1.8966 0.2098

The second example demonstrates the second form of the `randn`

function.

--> randn([2,2,2]) ans = (:,:,1) = -0.7183 1.9415 0.1010 -1.1747 (:,:,2) = 0.3048 3.1685 -1.4185 -0.6130

In the next example, we create a large array of 10000 normally distributed pseudo-random numbers. We then shift the mean to 10, and the variance to 5. We then numerically calculate the mean and variance using `mean`

and `var`

, respectively.

--> x = 10+sqrt(5)*randn(1,10000); --> mean(x) ans = 10.0135 --> var(x) ans = 4.9458

Now, we use the state manipulation functions of `randn`

to exactly reproduce
a random sequence. Note that unlike using `seed`

, we can exactly control where
the random number generator starts by saving the state.

--> randn('state',0) % restores us to startup conditions --> a = randn(1,3) % random sequence 1 a = -0.0362 -0.1404 0.6934 --> b = randn('state'); % capture the state vector --> c = randn(1,3) % random sequence 2 c = 0.5998 0.7086 -0.9394 --> randn('state',b); % restart the random generator so... --> c = randn(1,3) % we get random sequence 2 again c = 0.5998 0.7086 -0.9394