Generates pseudorandom points on a unit circle or K-dimensional sphere.
Z — NR by K matrix containing the random Cartesian coordinates on the unit circle or sphere. (Output)
NR — Number of
random numbers to generate. (Input)
Default: NR = size (Z,1).
K — Dimension of
the circle (K =
2) or of the sphere. (Input)
Default: K = size (Z,2).
LDZ — Leading
dimension of Z
exactly as specified in the dimension statement of the calling
program. (Input)
Default: LDZ = size (Z,1).
Generic: CALL RNSPH (Z [,…])
Specific: The specific interface names are S_RNSPH and D_RNSPH.
Single: CALL RNSPH (NR, K, Z, LDZ)
Double: The double precision name is DRNSPH.
Routine RNSPH generates pseudorandom coordinates of points that lie on a unit circle or a unit sphere in K-dimensional space. For points on a circle (K = 2), pairs of uniform (− 1, 1) points are generated and accepted only if they fall within the unit circle (the sum of their squares is less than 1), in which case they are scaled so as to lie on the circle.
For spheres in three or four dimensions, the algorithms of Marsaglia (1972) are used. For three dimensions, two independent uniform (− 1, 1) deviates U1 and U2 are generated and accepted only if the sum of their squares S1 is less than 1. Then, the coordinates
are formed. For four dimensions, U1, U2, and S1 are produced as described above. Similarly, U3, U4, and S2 are formed. The coordinates are then
and
For spheres in higher dimensions, K independent normal deviates are generated and scaled so as to lie on the unit sphere in the manner suggested by Muller (1959).
The routine RNSET can be used to initialize the seed of the random number generator. The routine RNOPT can be used to select the form of the generator.
In this example, RNSPH is used to generate two uniform random deviates from the surface of the unit sphere in three space.
USE UMACH_INT
USE RNSET_INT
USE RNSPH_INT
IMPLICIT NONE
INTEGER K, LDZ, NR
PARAMETER (K=3, LDZ=2)
!
INTEGER I, ISEED, J, NOUT
REAL Z(LDZ,K)
!
CALL UMACH (2, NOUT)
NR = 2
ISEED = 123457
CALL RNSET (ISEED)
CALL RNSPH (Z)
WRITE (NOUT,99999) ((Z(I,J),J=1,K),I=1,NR)
99999 FORMAT (' Coordinates of first point: ', 3F8.4, /, &
' Coordinates of second point:', 3F8.4)
END
Coordinates of first point: 0.8893 0.2316 0.3944
Coordinates of second point: 0.1901 0.0396 -0.9810
PHONE: 713.784.3131 FAX:713.781.9260 |