GRID Random Points on a Uniform Grid

GRID is a C++ library which randomly selects N distinct points on a uniform grid in the unit hypercube in M-dimensional space.

Note that, unless N is an Mth power of an integer, the program must generate a regular grid with too many points, and then omit some. Choosing which points to omit is done with a random number generator, whose actions are controlled by SEED.

The actual placement of the grid within the unit hypercube leaves some options for the use. It is easiest to describe the options in the 1 dimensional case, and in terms of where the first and last grid point are. Assuming we have N evenly spaced points to place between 0 and 1, the centering options are

• CENTER = 1: first point is 0.0, last point is 1.0;
• CENTER = 2: first point is 1/(N+1), last point is N/(N+1);
• CENTER = 3: first point is 0, last point is (N-1)/N;
• CENTER = 4: first point is 1/N, last point is 1;
• CENTER = 5: first point is 1/(2*N), last point is (2*N-1)/(2*N);

Languages:

GRID is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version and a Python version.

Related Data and Programs:

BOX_BEHNKEN, a C++ library which computes a Box-Behnken design, that is, a set of arguments to sample the behavior of a function of multiple parameters;

CLENSHAW_CURTIS_RULE, a C++ library which defines a multiple dimension Clenshaw Curtis quadrature rule.

CVT, a C++ library which computes elements of a Centroidal Voronoi Tessellation.

DISK_GRID, a C++ library which computes grid points that lie inside a disk of user specified radius and center in 2D, using GNUPLOT to create an image of the grid.

FAURE, a C++ library which computes elements of a Faure quasirandom sequence.

GRID_DATASET, a C++ program which creates a grid sequence and writes it to a file.

HALTON, a C++ library which computes elements of a Halton quasirandom sequence.

HAMMERSLEY, a C++ library which computes elements of a Hammersley quasirandom sequence.

HEX_GRID, a C++ library which computes elements of a hexagonal grid dataset.

IHS, a C++ library which computes elements of an improved distributed Latin hypercube dataset.

LATIN_CENTER, a C++ library which computes elements of a Latin Hypercube dataset, choosing center points.

LATIN_EDGE, a C++ library which computes elements of a Latin Hypercube dataset, choosing edge points.

LATIN_RANDOM, a C++ library which computes elements of a Latin Hypercube dataset, choosing points at random.

LCVT, a C++ library which computes a latinized Centroidal Voronoi Tessellation.

NIEDERREITER, a C++ library which computes elements of a Niederreiter quasirandom sequence [arbitrary base].

SIMPLEX_GRID, a C++ library which generates a regular grid of points over the interior of an arbitrary simplex in M dimensions.

SOBOL, a C++ library which computes elements of a Sobol quasirandom sequence.

SPHERE_GRID, a C++ library which provides a number of ways of generating grids of points, or of points and lines, or of points and lines and faces, on the surface of the unit sphere in 3D.

UNIFORM, a C++ library which computes uniform random values.

VAN_DER_CORPUT, a C++ library which computes van der Corput sequences.

List of Routines:

• DIGIT_TO_CH returns the base 10 digit character corresponding to a digit.
• GET_SEED returns a random seed for the random number generator.
• GRID_GENERATE generates a grid dataset.
• GRID_SIDE finds the smallest DIM_NUM-dimensional grid containing at least N points.
• GRID_WRITE writes a grid dataset to a file.
• I4_LOG_10 returns the whole part of the logarithm base 10 of an integer.
• I4_TO_S converts an integer to a string.
• KSUB_RANDOM2 selects a random subset of size K from a set of size N.
• R8_EPSILON returns the round off unit for double precision arithmetic.
• R8_UNIFORM_01 returns a unit double precision pseudorandom number.
• TIMESTAMP prints the current YMDHMS date as a time stamp.
• TIMESTRING returns the current YMDHMS date as a string.
• TUPLE_NEXT_FAST computes the next element of a tuple space, "fast".

You can go up one level to the C++ source codes.

Last revised on 31 August 2005.