www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
TruncatedNormalDistribution Class Reference

A class used to generate a truncated normal distribution. More...

#include <TruncatedNormalDistribution.h>

Inheritance diagram for TruncatedNormalDistribution:
[legend]

Public Member Functions

 TruncatedNormalDistribution (const InputParameters &parameters)
 
virtual Real pdf (const Real &x) const override
 
virtual Real cdf (const Real &x) const override
 
virtual Real quantile (const Real &p) const override
 

Static Public Member Functions

static InputParameters validParams ()
 
static Real pdf (const Real &x, const Real &mean, const Real &std_dev, const Real &lower_bound, const Real &upper_bound)
 
static Real cdf (const Real &x, const Real &mean, const Real &std_dev, const Real &lower_bound, const Real &upper_bound)
 
static Real quantile (const Real &p, const Real &mean, const Real &std_dev, const Real &lower_bound, const Real &upper_bound)
 
static Real pdf (const Real &x, const Real &mean, const Real &std_dev)
 
static Real cdf (const Real &x, const Real &mean, const Real &std_dev)
 
static Real quantile (const Real &p, const Real &mean, const Real &std_dev)
 

Protected Attributes

const Real & _lower_bound
 The lower bound for the distribution. More...
 
const Real & _upper_bound
 The upper bound for the distribution. More...
 
const Real & _mean
 The mean (or expectation) of the distribution (mu) More...
 
const Real & _standard_deviation
 The standard deviation of the distribution (sigma) More...
 

Static Protected Attributes

static const std::array< Real, 6 > _a
 
static const std::array< Real, 6 > _b
 

Detailed Description

A class used to generate a truncated normal distribution.

Definition at line 22 of file TruncatedNormalDistribution.h.

Constructor & Destructor Documentation

◆ TruncatedNormalDistribution()

TruncatedNormalDistribution::TruncatedNormalDistribution ( const InputParameters &  parameters)

Definition at line 28 of file TruncatedNormalDistribution.C.

29  : NormalDistribution(parameters),
30  _lower_bound(getParam<Real>("lower_bound")),
31  _upper_bound(getParam<Real>("upper_bound"))
32 {
34  mooseError("lower_bound in truncated normal distribution must be less than upper_bound.");
35 }

Member Function Documentation

◆ cdf() [1/3]

Real TruncatedNormalDistribution::cdf ( const Real &  x) const
overridevirtual

Reimplemented from NormalDistribution.

Definition at line 91 of file TruncatedNormalDistribution.C.

92 {
93  TIME_SECTION(_perf_cdf);
95 }

◆ cdf() [2/3]

Real NormalDistribution::cdf ( const Real &  x,
const Real &  mean,
const Real &  std_dev 
)
staticinherited

Definition at line 50 of file NormalDistribution.C.

51 {
52  return 0.5 * (1.0 + std::erf((x - mean) / (std_dev * std::sqrt(2.0))));
53 }

◆ cdf() [3/3]

Real TruncatedNormalDistribution::cdf ( const Real &  x,
const Real &  mean,
const Real &  std_dev,
const Real &  lower_bound,
const Real &  upper_bound 
)
static

Definition at line 53 of file TruncatedNormalDistribution.C.

58 {
59 
60  if (x <= lower_bound || x >= upper_bound)
61  return 0.0;
62  else
63  return (NormalDistribution::cdf(x, mean, std_dev) -
64  NormalDistribution::cdf(lower_bound, mean, std_dev)) /
65  (NormalDistribution::cdf(upper_bound, mean, std_dev) -
66  NormalDistribution::cdf(lower_bound, mean, std_dev));
67 }

◆ pdf() [1/3]

Real TruncatedNormalDistribution::pdf ( const Real &  x) const
overridevirtual

Reimplemented from NormalDistribution.

Definition at line 84 of file TruncatedNormalDistribution.C.

85 {
86  TIME_SECTION(_perf_pdf);
88 }

◆ pdf() [2/3]

Real NormalDistribution::pdf ( const Real &  x,
const Real &  mean,
const Real &  std_dev 
)
staticinherited

Definition at line 43 of file NormalDistribution.C.

44 {
45  return 1.0 / (std_dev * std::sqrt(2.0 * M_PI)) *
46  std::exp(-0.5 * Utility::pow<2>((x - mean) / std_dev));
47 }

◆ pdf() [3/3]

Real TruncatedNormalDistribution::pdf ( const Real &  x,
const Real &  mean,
const Real &  std_dev,
const Real &  lower_bound,
const Real &  upper_bound 
)
static

Definition at line 38 of file TruncatedNormalDistribution.C.

43 {
44  if (x <= lower_bound || x >= upper_bound)
45  return 0.0;
46  else
47  return (NormalDistribution::pdf(x, mean, std_dev)) /
48  (NormalDistribution::cdf(upper_bound, mean, std_dev) -
49  NormalDistribution::cdf(lower_bound, mean, std_dev));
50 }

◆ quantile() [1/3]

Real TruncatedNormalDistribution::quantile ( const Real &  p) const
overridevirtual

Reimplemented from NormalDistribution.

Definition at line 98 of file TruncatedNormalDistribution.C.

99 {
100  TIME_SECTION(_perf_quantile);
102 }

◆ quantile() [2/3]

Real NormalDistribution::quantile ( const Real &  p,
const Real &  mean,
const Real &  std_dev 
)
staticinherited

Definition at line 56 of file NormalDistribution.C.

57 {
58  Real x = (p < 0.5 ? p : 1.0 - p);
59  Real y = std::sqrt(-2.0 * std::log(x));
60  Real sgn = (p - 0.5 < 0.0 ? -1.0 : 1.0);
61  Real Zp = sgn * (y + (_a[0] + _a[1] * y + _a[2] * Utility::pow<2>(y) +
62  _a[3] * Utility::pow<3>(y) + _a[4] * Utility::pow<4>(y)) /
63  (_b[0] + _b[1] * y + _b[2] * Utility::pow<2>(y) +
64  _b[3] * Utility::pow<3>(y) + _b[4] * Utility::pow<4>(y)));
65  return Zp * std_dev + mean;
66 }

◆ quantile() [3/3]

Real TruncatedNormalDistribution::quantile ( const Real &  p,
const Real &  mean,
const Real &  std_dev,
const Real &  lower_bound,
const Real &  upper_bound 
)
static

Definition at line 70 of file TruncatedNormalDistribution.C.

75 {
76  return NormalDistribution::quantile(NormalDistribution::cdf(lower_bound, mean, std_dev) +
77  p * (NormalDistribution::cdf(upper_bound, mean, std_dev) -
78  NormalDistribution::cdf(lower_bound, mean, std_dev)),
79  mean,
80  std_dev);
81 }

◆ validParams()

InputParameters TruncatedNormalDistribution::validParams ( )
static

Definition at line 17 of file TruncatedNormalDistribution.C.

18 {
19  InputParameters params = NormalDistribution::validParams();
20  params.addClassDescription("Truncated normal distribution");
21  params.addParam<Real>(
22  "lower_bound", -std::numeric_limits<Real>::max(), "Lower bound of the distribution ");
23  params.addParam<Real>(
24  "upper_bound", std::numeric_limits<Real>::max(), "Upper bound of the distribution ");
25  return params;
26 }

Member Data Documentation

◆ _a

const std::array< Real, 6 > NormalDistribution::_a
staticprotectedinherited
Initial value:
= {
{-0.322232431088, -1.0, -0.342242088547, -0.0204231210245, -0.0000453642210148}}

Coefficients for the rational function used to approximate the quantile

Definition at line 40 of file NormalDistribution.h.

Referenced by NormalDistribution::quantile().

◆ _b

const std::array< Real, 6 > NormalDistribution::_b
staticprotectedinherited
Initial value:
= {
{0.099348462606, 0.588581570495, 0.531103462366, 0.10353775285, 0.0038560700634}}

Definition at line 41 of file NormalDistribution.h.

Referenced by NormalDistribution::quantile().

◆ _lower_bound

const Real& TruncatedNormalDistribution::_lower_bound
protected

The lower bound for the distribution.

Definition at line 51 of file TruncatedNormalDistribution.h.

Referenced by cdf(), pdf(), quantile(), and TruncatedNormalDistribution().

◆ _mean

const Real& NormalDistribution::_mean
protectedinherited

The mean (or expectation) of the distribution (mu)

Definition at line 45 of file NormalDistribution.h.

Referenced by NormalDistribution::cdf(), cdf(), NormalDistribution::pdf(), pdf(), NormalDistribution::quantile(), and quantile().

◆ _standard_deviation

const Real& NormalDistribution::_standard_deviation
protectedinherited

The standard deviation of the distribution (sigma)

Definition at line 48 of file NormalDistribution.h.

Referenced by NormalDistribution::cdf(), cdf(), NormalDistribution::pdf(), pdf(), NormalDistribution::quantile(), and quantile().

◆ _upper_bound

const Real& TruncatedNormalDistribution::_upper_bound
protected

The upper bound for the distribution.

Definition at line 54 of file TruncatedNormalDistribution.h.

Referenced by cdf(), pdf(), quantile(), and TruncatedNormalDistribution().


The documentation for this class was generated from the following files:
TruncatedNormalDistribution::cdf
virtual Real cdf(const Real &x) const override
Definition: TruncatedNormalDistribution.C:91
TruncatedNormalDistribution::pdf
virtual Real pdf(const Real &x) const override
Definition: TruncatedNormalDistribution.C:84
NormalDistribution::cdf
virtual Real cdf(const Real &x) const override
Definition: NormalDistribution.C:76
NormalDistribution::_a
static const std::array< Real, 6 > _a
Definition: NormalDistribution.h:40
NormalDistribution::_standard_deviation
const Real & _standard_deviation
The standard deviation of the distribution (sigma)
Definition: NormalDistribution.h:48
TruncatedNormalDistribution::_upper_bound
const Real & _upper_bound
The upper bound for the distribution.
Definition: TruncatedNormalDistribution.h:54
NormalDistribution::validParams
static InputParameters validParams()
Definition: NormalDistribution.C:25
TruncatedNormalDistribution::_lower_bound
const Real & _lower_bound
The lower bound for the distribution.
Definition: TruncatedNormalDistribution.h:51
NormalDistribution::NormalDistribution
NormalDistribution(const InputParameters &parameters)
Definition: NormalDistribution.C:35
TruncatedNormalDistribution::quantile
virtual Real quantile(const Real &p) const override
Definition: TruncatedNormalDistribution.C:98
NormalDistribution::quantile
virtual Real quantile(const Real &p) const override
Definition: NormalDistribution.C:83
NormalDistribution::_b
static const std::array< Real, 6 > _b
Definition: NormalDistribution.h:41
NormalDistribution::_mean
const Real & _mean
The mean (or expectation) of the distribution (mu)
Definition: NormalDistribution.h:45
NormalDistribution::pdf
virtual Real pdf(const Real &x) const override
Definition: NormalDistribution.C:69