NORMAL
Normal Random Number Generators
NORMAL
is a MATLAB library which
computes normally distributed pseudorandom numbers.
NORMAL is based on two simple ideas:
-
the use of a fairly simple uniform pseudorandom number generator,
which can be implemented in software;
-
the use of the Box-Muller transformation to convert pairs of
uniformly distributed random values to pairs of normally distributed
random values.
Using these ideas, it is not too hard to generate normal sequences
of real or complex values, of single or double precision. These
values can be generated as single quantities, vectors or matrices.
An associated seed actually determines the sequence. Varying
the seed will result in producing a different sequence.
The fundamental underlying random number generator used here
is based on a simple, old, and limited linear congruential random
number generator originally used in the IBM System 360.
This library makes it possible to compare certain computations
that use normal random numbers, written in C, C++, FORTRAN77,
FORTRAN90 or MATLAB.
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
NORMAL is available in
a C version and
a C++ version and
a FORTRAN77 version and
a FORTRAN90 version and
a MATLAB version
Related Data and Programs:
ASA183,
a MATLAB library which
implements the Wichman-Hill pseudorandom number generator.
MATLAB_RANDOM,
MATLAB programs which
illustrate the use of Matlab's random number generators.
NORMAL_DATASET,
a MATLAB program which
generates a dataset of multivariate normal pseudorandom values and writes them to a file.
UNIFORM,
a MATLAB library which
computes a sequence
of uniformly distributed pseudorandom values.
Reference:
-
Paul Bratley, Bennett Fox, Linus Schrage,
A Guide to Simulation,
Second Edition,
Springer, 1987,
ISBN: 0387964673.
-
Bennett Fox,
Algorithm 647:
Implementation and Relative Efficiency of Quasirandom
Sequence Generators,
ACM Transactions on Mathematical Software,
Volume 12, Number 4, December 1986, pages 362-376.
-
Donald Knuth,
The Art of Computer Programming,
Volume 2, Seminumerical Algorithms,
Third Edition,
Addison Wesley, 1997,
ISBN: 0201896842.
-
Pierre LEcuyer,
Random Number Generation,
in Handbook of Simulation,
edited by Jerry Banks,
Wiley, 1998,
ISBN: 0471134031,
LC: T57.62.H37.
-
Peter Lewis, Allen Goodman, James Miller,
A Pseudo-Random Number Generator for the System/360,
IBM Systems Journal,
Volume 8, 1969, pages 136-143.
Source Code:
-
c4_normal_01.m,
returns a unit pseudonormal C4.
-
c8_normal_01.m,
returns a unit pseudonormal dC8.
-
i4_huge.m,
returns a huge I4.
-
i4_normal.m,
returns a scaled pseudonormal I4.
-
i8_normal.m,
returns a scaled pseudonormal I8.
-
r4_normal.m,
returns a scaled pseudonormal R4.
-
r4_normal_01.m,
returns a unit pseudonormal R4.
-
r4_uniform_01.m,
returns a unit pseudorandom R4.
-
r8_normal.m,
returns a scaled pseudonormal R8.
-
r8_normal_01.m,
returns a unit pseudonormal R8.
-
r8_uniform_01.m,
returns a unit pseudorandom R8.
-
r8mat_normal.m,
returns a scaled pseudonormal R8MAT.
-
r8mat_normal_01.m,
returns a unit pseudonormal R8MAT.
-
r8vec_normal.m,
returns a scaled pseudonormal R8VEC.
-
r8vec_normal_01.m,
returns a unit pseudonormal R8VEC.
-
r8vec_uniform_01.m,
returns a unit pseudorandom R8VEC.
-
timestamp.m,
prints the current YMDHMS date as a timestamp.
Examples and Tests:
-
normal_test.m,
a script that runs all the tests.
-
normal_test_output.txt,
the output file.
-
normal_test01.m,
tests C4_NORMAL_01.
-
normal_test02.m,
tests C8_NORMAL_01.
-
normal_test03.m,
tests I4_NORMAL.
-
normal_test04.m,
tests I8_NORMAL.
-
normal_test05.m,
tests R4_NORMAL.
-
normal_test06.m,
tests R4_NORMAL_01.
-
normal_test07.m,
tests R8_NORMAL.
-
normal_test08.m,
tests R8_NORMAL_01.
-
normal_test09.m,
tests R8_NORMAL_01.
-
normal_test10.m,
tests R8_NORMAL_01.
-
normal_test11.m,
tests R8_NORMAL_01 and R8MAT_NORMAL_01.
-
normal_test12.m,
tests R8_NORMAL_01 and R8VEC_NORMAL_01.
You can go up one level to
the MATLAB source codes.
Last revised on 03 August 2009.