NCL Website header
NCL Home > Documentation > Functions > General applied math, Statistics

genNormalDist

Generates a normal distribution.

Prototype

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"  ; This library is automatically loaded
                                                             ; from NCL V6.2.0 onward.
                                                             ; No need for user to explicitly load.

	function genNormalDist (
		xAve [1] : numeric,  
		xStd [1] : numeric,  
		opt  [1] : logical   
	)

	return_val [*] :  float or double

Arguments

xAve

A scalar specifying the mean of the distribution.

xStd

A scalar specifying the standard deviation of the distribution.

opt

Attributes may be associated with this variable. The attributes will alter the default behavior of the genNormalDist.

Setting opt=False will result in default values being used.
Setting opt=True will activate use of the options.

  • spn - Change the span of the generated distribution. The default is 3.0 standard deviations. This means that 99.7% of all values will fall within this range.
  • npts - The number of points to be generated. The default is 101. It is not necessary that an odd number be used. Using an odd number results in a return array that will contain the central value. NOTE: Beginning with 6.2.0, the attribute N will be a synonym for npts

Return value

A one-dimensional array of size=101 or, if the N attribute is set to size=N. The following attributes will be associated with the return variable.

  • x - the generated abscissa values.

Description

Uses the standard formula:

       normal(xAve,xStd) = [1/sqrt(2*pi)]*exp[-(0.5*(x-xAve)^2/xStd^2)
where
       x = fspan( (xAve-spn*xStd), (xAve+spn*xStd), N)

See Also

pdfx, random_normal

Examples

The following require that contributed.ncl be loaded prior to invoking the function.

       load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

Example 1

Using default settings:

  nd = genNormalDist(100,10, False)  
  print(sprintf("%5.2f", nd@x)+"   "+sprintf("%9.6f", nd)+"   "+sprintf("%9.6f", nd@xsd) )
The print(...) yields:

       Variable: nd
       Type: float
       Total Size: 404 bytes
                   101 values
       Number of Dimensions: 1
       Dimensions and sizes:	[101]
       Coordinates: 
       Number Of Attributes: 3
         long_name :	Normal Distribution
         x :	ARRAY of 101 elements
         xsd :	ARRAY of 101 elements

         nd@x        nd       nd@xsd   
(0)     70.00    0.000443   -3.000000
(1)     70.60    0.000530   -2.940000
(2)     71.20    0.000631   -2.880000
(3)     71.80    0.000748   -2.820000
(4)     72.40    0.000885   -2.760000
(5)     73.00    0.001042   -2.700000
[snip]
(47)    98.20    0.039253   -0.180000
(48)    98.80    0.039608   -0.120000
(49)    99.40    0.039822   -0.060000
(50)   100.00    0.039894    0.000000
(51)   100.60    0.039822    0.060000
(52)   101.20    0.039608    0.120000
(53)   101.80    0.039253    0.180000
[snip]
(95)   127.00    0.001042    2.700000
(96)   127.60    0.000885    2.760001
(97)   128.20    0.000748    2.820000
(98)   128.80    0.000631    2.880000
(99)   129.40    0.000530    2.939999
(100)  130.00    0.000443    3.000000

A simple x-y plot could be generated by using the returned x attribute values as the abscissa values and the "nd" values as ordinate values.

  wks  = gsn_open_wks ("x11","PDFX")
  res  = True
  res@gsnCenterString = "default 101 values"
  plot = gsn_csm_xy (wks, nd@x, nd, res)

Example 2:

Specify that 51 values be generated.

  opt      = True
  opt@npts = 51
 ;opt@N    = 51       ; This will be allowed from 6.2.0 onward
  zNorm = genNormalDist(zave, zstd, opt)