truncatedNormalPdf function

double truncatedNormalPdf(
  1. num x,
  2. num xMin,
  3. num xMax,
  4. num meanOfParent,
  5. num stdDevOfParent
)

Truncated normal probability density function

  • xMin: left limit.
  • xMax: right limit satisfying xMin < xMax.
  • meanOfParent: Mean of the parent normal distribution.
  • stdDevOfParent: Standard deviation of the parent normal distribution.
  • truncatedNormalPdf(x) > 0 for x in (xMin, xMax) and zero elsewhere.

Throws an error of type ErrorOfType<InvalidFunctionParameter> if xMin >= xMax.

Implementation

double truncatedNormalPdf(
  num x,
  num xMin,
  num xMax,
  num meanOfParent,
  num stdDevOfParent,
) {
  if (xMin >= xMax) {
    throw ErrorOfType<InvalidFunctionParameter>(
      message: 'Error in truncatedNormalPdf($x, $xMin, $xMax, '
          '$meanOfParent, $stdDevOfParent)',
      invalidState: 'min: $xMin >= max: $xMax',
      expectedState: 'xMin < xMax',
    );
  }
  stdDevOfParent = stdDevOfParent.abs();
  if (x < xMin || x > xMax) {
    return 0.0;
  } else {
    final invStdDev = 1.0 / stdDevOfParent;
    final alpha = (xMin - meanOfParent) * invStdDev;
    final beta = (xMax - meanOfParent) * invStdDev;

    return stdNormalPdf((x - meanOfParent) * invStdDev) /
        (stdNormalCdf(beta) - stdNormalCdf(alpha));
  }
}