0% found this document useful (0 votes)
19 views14 pages

Random Number Generators: Jake Blanchard Spring 2010

This document discusses the history and methods of random number generation. It begins by describing early congruential random number generators and their limitations. It then outlines how MATLAB generates random numbers, initially using a congruential algorithm but now employing a lookup table method. Finally, it discusses ways to generate random numbers from other distributions beyond the uniform, such as the normal distribution.

Uploaded by

dvarsastry
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views14 pages

Random Number Generators: Jake Blanchard Spring 2010

This document discusses the history and methods of random number generation. It begins by describing early congruential random number generators and their limitations. It then outlines how MATLAB generates random numbers, initially using a congruential algorithm but now employing a lookup table method. Finally, it discusses ways to generate random numbers from other distributions beyond the uniform, such as the normal distribution.

Uploaded by

dvarsastry
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 14

Random Number

Generators
Jake Blanchard
Spring 2010

Uncertainty Analysis for Engineers

A Little History
Initial

random number generators


were congruential
xk 1 a xk c mod m

For

example, a=13, c=0, m=31,


x0=1xk 1 13 xk mod 31
x1 13 x0 mod 31 13 mod 31 13
x2 13 x1 mod 31 169 mod 31 14
x4 24

Uncertainty Analysis for Engineers

Congruential Operators
Result

is integers between 1 and

30
To get U(0,1), divide by m (31)
This gives .0323, .4194, .4516,
etc.
This gives just 30 possible
floating point numbers

Uncertainty Analysis for Engineers

Congruential Algorithms
Years

ago, IBM mainframes use


a=65539, c=0, m=231 because it
was very fast
But it has issues consecutive
numbers are correlated
For example, suppose we want to
generate random points in a
cube.
We would use 3 consecutive
values for the x, y, z coordinates
Uncertainty Analysis for Engineers

Matlab
Matlab

has 3 prominent
functions: rand, randn, and randi
Until 1995, rand was congruential
(a=75=16807, c=0, m=231-1)
This repeats every 2 billion
numbers (roughly)
(see mcg script)

Uncertainty Analysis for Engineers

Shuffling
This

Matlab routine still has


correlation among consecutive
numbers
For example, if x<10-6, next number
will be less than 0.0168
To avoid this, shuffle numbers
(Matlab didnt do this)
Start by storing 32 random numbers
When routine is called, randomly select
which of the 32 to use and replace with
next number in sequence
Uncertainty Analysis for Engineers

New Matlab Algorithm


Matlab

now uses a look up algorithm


Not congruential, no multiplication or
division, produces floating point directly
Uses 35 words of memory
32 represent cached floating point
numbers 0<z<1
Last three contain index i 0<i<31,
integer j, and borrowflag b

zi zi 20 zi 5 b
Subscripts

are modulo 32
Uncertainty Analysis for Engineers

New Matlab Algorithm


b

is used to make sure z is


positive
Period is 21430
Small modifications make period
21492

Uncertainty Analysis for Engineers

Repeatability
In

new Matlab session, the first


output from rand is always 0.
814723686393179
Matlab will let you repeat a
sequence at any time
defaultStream=RandStream.getDefaultStream;
savedState = defaultStream.State;
u1 = rand(1,5)
defaultStream.State = savedState;
u2 = rand(1,5)
Uncertainty Analysis for Engineers

Normal Deviates
One

approach is to use
sum(rand(m,n,12),3)-6
This adds the 12 uniform
deviates for each number,
yielding something
approximating a normal deviate
with mean of 0 and variance of 1

Uncertainty Analysis for Engineers

10

Normal Deviates
Alternative

is rejection method

Generate uniform random numbers in 2 by


2 square and reject points outside unit circle
For accepted points,

2 ln(r )
v
*u
r
u 2 * rand (2,1) 1
r u (1) 2 u (2) 2
Result is 2 normally distributed random
numbers
Uncertainty Analysis for Engineers

11

Newer Matlab Algorithm


Divide

pdf into rectangles of


equal area
Randomly sample integer to pick
rectangle and then see if u(-1,1)
falls within rectangle
If u is in jth section, then u*z is a
normal deviate
Otherwise, reject
Uncertainty Analysis for Engineers

12

Matlab Algorithm

Uncertainty Analysis for Engineers

13

Other Distributions
If

cdf can be inverted, you can


sample them directly
See later slides

Uncertainty Analysis for Engineers

14

You might also like