cdfn, cdfnc

Purpose

cdfn() computes the cumulative distribution function (cdf) of the Normal distribution. cdfnc() computes 1 minus the cdf of the Normal distribution.

Format

p = cdfn(x[, mu, sigma])
p = cdfnc(x)
Parameters:
  • x (NxK matrix) – Values at which to evaluate the normal cumulative distribution function or the complement of the normal cdf.
  • mu (scalar) – Optional input, mean parameter.
  • std (scalar) – Optional input, standard deviation.
Returns:
  • p (NxK matrix) – Each element in p is the normal cumulative distribution function evaluated at the corresponding element in x.
  • pc (NxK matrix) – Each element in pc is the complement of the normal cumulative distribution function evaluated at the corresponding element in x.

Examples

Example 1: Basic use

// Value to compute
x = 0.5;

p = cdfn(x);
pc = cdfnc(x);

After above code,

p =  0.69146246
pc = 0.30853754

Example 2: Specify mean and standard deviation

// Value
x = 0.5;

// Mean
mu = 1.1;

// Standard deviation
std = 3;

p = cdfn(x, mu, std);

After above code,

p = 0.42074029

Example 3

// Value
x = { -2 -1 0 1 2 };

p = cdfn(x);
pc = cdfnc(x);

After above code,

x  = -2.0000000 -1.0000000 0.0000000 1.0000000 2.0000000
p  =  0.0227501 0.15865525 0.5000000 0.8413447 0.9772498
pc =  0.9772498 0.84134475 0.5000000 0.1586552 0.0227501

Remarks

Note that:

cdfn(x) + cdfnc(x) = 1

However, many applications expect cdfn(x) to approach 1 but never actually reach it. Because of this, we have capped the return value of cdfn() at \(1 - machine\:\ epsilon\), or approximately \(1 - 1.11e-16\). As the relative error of cdfn() is about \(\pm 5e-15\) for cdfn(x) around 1, this does not invalidate the result. What it does mean is that for \(abs(x) > \approx 8.2924\), the identity does not hold true. If you have a need for the uncapped value of cdfn(), the following code will return it:

p = cdfn(x);
if p >= 1-eps;
   p = 1;
endif;

where the value of machine epsilon is obtained as follows:

x = 1;
do while 1-x /= 1;
   eps = x;
   x = x/2;
endo;

Note that this is an alternate definition of machine epsilon. Machine epsilon is usually defined as the smallest number such that \(1 + machine\:\ epsilon > 1\), which is about 2.23e-16. This defines machine epsilon as the smallest number such that \(1 - machine\:\ epsilon < 1\), or about 1.11e-16.

The erf() and erfc() functions are also provided, and may sometimes be more useful than cdfn() and cdfnc().