Program: RANDOM Purpose: Generate random numbers from various distributions. Add noise to sets. Write random numbers to an (ascii) file on disk. Category: UTILITY, ANALYSIS, PLOTTING File: random.c Author: M.G.R. Vogelaar Keywords: INSET= Give input set (, subsets): [GENERATE R.N. ONLY] Maximum number of subsets is 2048. R.N. == Random Numbers. The default switches to a mode where no input/output sets are used. Then, only a plot of the selected distribution is created. BOX= Give box in (.....) [entire subset] Select area to work on for both input- and output set. Only prompted if an input set is selected. OUTSET= Give output set (, subsets): Output set and subset(s) for the result. The number of output subsets is the same as the number of input sub- sets. Only prompted if an input set is selected. ** FILENAME= Name of ASCII file: [No output to file] Keyword is not asked if an input set is selected. If a name is specified, an ASCII file is created to store all the random numbers that you generate on disk until you end the program.. If you press carriage return, there will be no output to an ASCII file. If a given name already exists on disk, APPEND= must be specified. APPEND= File exists, ok to append? [Y]/N The file specified in FILENAME= already exists. You can append to this file with APPEND=Y. If APPEND=N you will be prompted for another filename. GRDEVICE= Plot device: [List of devices] Destination of plot, Screen or Hardcopy. OPTION= Type of distribution 1..6: [1] Select a distribution for your random numbers. 1 -- Gaussian: exp(-0.5*x**2) 2 -- Sech2: 1/cosh^2(x) 3 -- Exponential: exp(-|x|) 4 -- Lorentz: 1/(1+x^2) 5 -- Rectangular: -1 < x < 1 6 -- Gaussian: Alternative method Options 1 to 5 all use the function 'randev'. Both algorithms for random number generator and Gaussian deviates are described in 'Numerical Recipes'. Option 6 is an numerical integration of white Gaussian noise, using the system random number generator 'rand()' The generated random numbers can be scaled with the formula: RNnew = RNold*sigma - mean. MEAN= Give mean of distribution: [0.0] The peak of the distribution will be centered at this value. SIGMA= Give characteristic width of distribution: [1.0] ISEED= For options 1..5: Seed (should be negative): [-1] Else: Seed: [123456] Start generating a sequence of random numbers by giving a integer seed. ADDNUM= Add numbers to original data: Y/[N] The input set is copied to the output set and the generated random numbers are added. The default is the creation of a set containing the random numbers. Only prompted if an input set is selected. MAKEPLOT= Make histogram of generated values: Y/[N] (if a set was given), or: Make histogram of generated values: [Y]/N (without a set) Create a histogram of the generated values with NBINS= bins. For OPTION=1..5 also a calculated curve is plotted. Only prompted if an input set is selected. Otherwise a histogram is always plotted. Plots are made in a loop. The following keywords are asked in that loop: NBINS= Give number of histogram bins: [101] In the next runs: Give number of histogram bins: [STOP LOOP] RANGE= If a set is used: Range in X values: [calculated] If no set is used: Range in X values: [-5 5] MAXRAN= Give max. random numbers: [10^6] If no set was selected, give the number of random numbers. ** TIMER= Do time test on RNG: Y/[N] Determine number of cpu seconds the RNG needs to generate the given amount of numbers. KEYWORDS RELATED TO PLOTTING: ** PGMOSAIC= View surface sub divisions in x,y: [1,1] View surface can contain a number of plots in in X and Y direction (mosaic). Default is 1 plot in both X- and Y direction. ** PGPAPER= Give width(cm), aspect ratio: [calc, calc] Aspect ratio is height/width. ** PGBOX= Corners of box Xl,Yl,Xh,Yh: [default by application] It is possible to overrule the calculated PGPLOT box size with PGBOX=. The coordinates (x,y) of the lower point are given first. ** PGCOLOR= Give color 1..15: [1] See description for the available colors. ** PGWIDTH= Give line width 1..21: [2] ** PGHEIGHT= Give character height: [1.0] ** PGFONT= Give font 1..4: [2] Description: For Monte Carlo computer work or any sort of stochastic modeling, a reliable source of random uniform deviates is needed. Uniform deviates are random numbers that lie within a specified range. With these numbers one can generate random numbers that are drawn from a distribu- tion. This program provides the selection of 4 distribu- tions. It is possible to make an output set with noise or you can add noise to your input sets (INSET=, OUTSET=, ADDNUM=). The program can also operate without sets. You can write the generated numbers to an ASCII- file (FILENAME=). The program can make a plot of the distribution of the random numbers (MAKEPLOT=). Also a timer is build in. This timer determines the cpu time that is needed to generate a given number of random deviates (only). In this way, the program can be used as a test program for generating random deviates by including other algorithms. You can include the timer with the hidden keyword TIMER=Y. With the OPTION= keyword, you select your the distribution. The options 1,2,3 and 4 generate random deviates drawn from the corresponding distribution. Option 5 generates uniform deviates. All options 1..5 are using the subroutine 'randev' based on algorithms that can be found in Numerical Recipes. Option 6, like option 1, also draws numbers from a Gaussian distribution, but it uses an algorithm described in 'The Science of Fractal Images' by Peitgen and Saupe and the system RNG rand() which turns out to be slower than the RNG in 'randev'. So, option 6 is not for practical use, but it is more a programmers template for alternative routines. Option 7 is the RNG that COMBIN (and other applications that call 'fiedo') uses. The random numbers are all scaled using the values in MEAN= and SIGMA= according to: RNnew = RNold*sigma - mean For a Gaussian distribution, this results in a Gauss with peak at MEAN= and sigma equal to SIGMA= For the uniform distribution, it results in uniform distributed random numbers between mean-sigma and mean+sigma. The generated random numbers are binned and a histogram is plotted. A curve, representing the selected distribution, is also plotted. The curve is scaled to have the same area under the curve as the histogram. This way, you are able to compare results and theory. The plots are made in a loop. In this loop you can vary the number of bins in the histograms that represents the selected distribution with NBINS=. The number of random numbers can be changed with MAXRAN= (unless you used a set, then the amount of numbers is fixed to the box size, BOX=). The program scales the plot height automatically, but the X-range can be modified with RANGE=. If no output set was used, the program cannot know exactly what the range in values will be and substitutes a reasonable default. To be able to generate the same sequence of random numbers twice, you can specify the same seed with ISEED=. PGPLOT: Color indices: 0 Background 1 Default (Black if background is white) 2 Red 3 Green 4 Blue 5 Cyan 6 Magenta 7 Yellow 8 Orange 7 Yellow 8 Orange 9 Green + Yellow 10 Green + Cyan 11 Blue + Cyan 12 Blue + Magenta 13 Red + Magenta 14 Dark Gray 15 Light Gray 16-255 Undefined Available fonts: 1 single stroke "normal" font 2 roman font 3 italic font 4 script font Notes: ....... Example: ....... Updates: Aug 5, 1994: VOG, Document created. Feb 1, 2000: JPT, Increased number of subsets.