Subsections

59 Generate uniform distributed random numbers

59.1 How to generate 5 uniform distributed random numbers from 0 to 1?

Mathematica Matlab
SeedRandom[1];
Table[RandomVariate[UniformDistribution[{0,1}]],{5}]

Out[66]= {0.817389,0.11142,0.789526,0.187803,0.241361}
rand(5,1)

ans =

   0.814723686393179
   0.905791937075619
   0.126986816293506
   0.913375856139019
   0.632359246225410

Fortran

program t3
implicit none
real :: x(5)

 CALL RANDOM_SEED()
 CALL random_number(x)
 print *,x
	
end program
compile and run
$ gfortran -std=f95 -Wextra -Wall -pedantic -funroll-loops 
  -ftree-vectorize -march=native  -Wsurprising -Wconversion  
  t3.f90  /usr/lib/liblapack.a /usr/lib/libblas.a
$ ./a.exe
  0.99755955      0.56682467      0.96591532      0.74792767      0.36739087

59.2 How to generate 5 random numbers from a to b?

Generate uniform numbers from a to b, say a=-2 and b=5

Mathematica Matlab
SeedRandom[1];
Table[RandomVariate[UniformDistribution[{-2,5}]],{5}]

Out[70]= {3.72173,-1.22006,3.52668,-0.685378,-0.310473}
-2 + (5+2)*rand(5,1)

ans =
  -1.317217165004133
  -0.050512467930661
   1.828170634434887
   4.702547848040084
   4.754219746394936

Fortran

program t3_2
implicit none
integer ::i
real, parameter :: a=-1.0,b=1.0
real :: x(5)

 CALL RANDOM_SEED()
 DO i=1,2
    CALL random_number(x)
    x = a+(b-a)*x
    print *,x
 END DO
	
end program

compile and run

$ gfortran -std=f95 -Wextra -Wall -pedantic -funroll-loops 
  -ftree-vectorize -march=native  -Wsurprising -Wconversion  
  t3_2.f90  /usr/lib/liblapack.a /usr/lib/libblas.a
$ ./a.exe
  0.99511909      0.13364935      0.93183064      0.49585533     -0.26521826
 -3.87262106E-02 -0.85249150     -0.98928964     -0.30583751     -0.31551242
$

59.3 How to generate MATRIX of random numbers from a to b?

Let $ a=-2$ and $ b=5$ , matrix of size $ 5$ by $ 5$

Mathematica Matlab
SeedRandom[1];
Table[RandomVariate[UniformDistribution[{-2,5}]],{5},{5}]

Out[72]= {{3.72173,-1.22006,3.52668,-0.685378,-0.310473},
          {-1.53983,1.79573,-0.381918,0.772043,2.90332},
          {-0.517218,3.2406,0.959955,-0.267537,4.8402},
          {3.77614,4.47693,2.04639,0.0500882,-0.543643},
          {2.06332,-1.09825,0.144992,2.98408,0.734073}}
-2 + (5+2)*rand(5,5)

ans =

    3.7642    1.0712    1.4284   -0.0678    1.4885
    2.8638    0.6709    1.1191    2.7579    4.7182
    0.2197    3.3586    2.5242    2.5857    0.3827
    4.6516    3.5664    2.9656   -0.8617    2.0969
   -1.7589   -0.6919    3.2828   -1.1670   -0.4333

Fortran

program t3_3
implicit none
integer ::i
real, parameter :: a=-1.0,b=1.0
real :: x(5,5)

 CALL RANDOM_SEED()
 DO i=1,2
    CALL random_number(x)
    x = a+(b-a)*x
    CALL write(x)
 END DO
	
 !--- internal functions below ------
     contains
       SUBROUTINE write(A)
       implicit none
       REAL, DIMENSION(:,:) :: A
       integer :: i,j

       WRITE(*,*)
       DO i = lbound(A,1), ubound(A,1)
          WRITE(*,*) (A(i,j), j = lbound(A,2), ubound(A,2))
       END DO
       
  END SUBROUTINE write

end program

compile and run

$ gfortran -std=f95 -Wextra -Wall -pedantic -funroll-loops 
    -ftree-vectorize -march=native  -Wsurprising -Wconversion  
    t3_3.f90  /usr/lib/liblapack.a /usr/lib/libblas.a

$ ./a.exe

  0.99511909     -3.87262106E-02 -0.56409657      0.32386434      0.71138477
  0.13364935     -0.85249150     -0.73367929     -0.96778345     -0.19742620
  0.93183064     -0.98928964      0.80104899      0.30170965     -0.58625138
  0.49585533     -0.30583751     -0.22646809      0.29281759      0.93707883
 -0.26521826     -0.31551242     -0.10903549     -0.35402548      0.19679904

  0.34596145      0.21138644      0.22462976      0.31809497      0.45771694
 -8.62354040E-02  0.43809581      0.95732045      0.10801017     -0.19508958
 -0.33996975      0.79466915      0.99828446      0.95552015      0.85725522
 -0.79923415      0.31645823     -0.48640406      0.80384660     -0.70432973
  0.51090658     -0.69856644      0.10173070      0.31584930      0.34905851

me 2013-01-09