triangularSample function
Returns a random sample following a symmetric triangular distribution with
non-zero support over the range xMin ... xMax
.
Throws an error of type ErrorOfType<InvalidFunctionParameter>
if xMin >= xMax
.
Implementation
List<double> triangularSample(
int sampleSize,
num xMin,
num xMax, {
int? seed,
}) {
if (xMin >= xMax) {
throw ErrorOfType<InvalidFunctionParameter>(
message: 'Error in function '
'triangularSample($sampleSize, $xMin, $xMax, seed: $seed)',
invalidState: 'min: $xMin >= max: $xMax',
expectedState: 'xMmin < xMax',
);
}
double invCdf(num p, num min, num max) {
final range = max - min;
if (p < 0.5) {
return min + range * sqrt(p / 2);
} else {
return max - range * sqrt((1.0 - p) / 2);
}
}
final random = Random(seed);
return List<double>.generate(
sampleSize, (_) => invCdf(random.nextDouble(), xMin, xMax));
}