...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Two functions aid finding location and scale of random variable z to give probability p (given a scale or location). Only applies to distributions like normal, lognormal, extreme value, Cauchy, (and symmetrical triangular), that have scale and location properties.
These functions are useful to predict the mean and/or standard deviation that will be needed to meet a specified minimum weight or maximum dose.
Complement versions are also provided, both with explicit and implicit (default) policy.
using boost::math::policies::policy; // May be needed by users defining their own policies. using boost::math::complement; // Will be needed by users who want to use complements.
#include <boost/math/distributions/find_location.hpp>
namespace boost{ namespace math{ template <class Dist, class Policy> // explicit error handling policy typename Dist::value_type find_location( // For example, normal mean. typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p. // For example, a nominal minimum acceptable z, so that p * 100 % are > z typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z. typename Dist::value_type scale, // scale parameter, for example, normal standard deviation. const Policy& pol); template <class Dist> // with default policy. typename Dist::value_type find_location( // For example, normal mean. typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p. // For example, a nominal minimum acceptable z, so that p * 100 % are > z typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z. typename Dist::value_type scale); // scale parameter, for example, normal standard deviation. }} // namespaces
#include <boost/math/distributions/find_scale.hpp>
namespace boost{ namespace math{ template <class Dist, class Policy> typename Dist::value_type find_scale( // For example, normal mean. typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p. // For example, a nominal minimum acceptable weight z, so that p * 100 % are > z typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z. typename Dist::value_type location, // location parameter, for example, normal distribution mean. const Policy& pol); template <class Dist> // with default policy. typename Dist::value_type find_scale( // For example, normal mean. typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p. // For example, a nominal minimum acceptable z, so that p * 100 % are > z typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z. typename Dist::value_type location) // location parameter, for example, normal distribution mean. }} // namespaces
All argument must be finite, otherwise domain_error is called.
Probability arguments must be [0, 1], otherwise domain_error is called.
If the choice of arguments would give a negative scale, domain_error is called, unless the policy is to ignore, when the negative (impossible) value of scale is returned.
Find Mean and standard deviation examples gives simple examples of use of both find_scale and find_location, and a longer example finding means and standard deviations of normally distributed weights to meet a specification.