truncatedNormalPdf function
Truncated normal probability density function
xMin
: left limit.xMax
: right limit satisfyingxMin < xMax
.meanOfParent
: Mean of the parent normal distribution.stdDevOfParent
: Standard deviation of the parent normal distribution.truncatedNormalPdf(x) > 0
forx
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));
}
}