⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 triangular.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
📖 第 1 页 / 共 2 页
字号:
    {      return 1 - (upper - x) *  (upper - x) / ((upper - lower) * (upper - mode));    }  } // RealType cdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)  template <class RealType, class Policy>  RealType quantile(const triangular_distribution<RealType, Policy>& dist, const RealType& p)  {    BOOST_MATH_STD_USING  // for ADL of std functions (sqrt).    static const char* function = "boost::math::quantile(const triangular_distribution<%1%>&, %1%)";    RealType lower = dist.lower();    RealType mode = dist.mode();    RealType upper = dist.upper();    RealType result; // of checks    if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))    {      return result;    }    if(false == detail::check_probability(function, p, &result, Policy()))    {      return result;    }    if(p == 0)    {      return lower;    }    if(p == 1)    {      return upper;    }    RealType p0 = (mode - lower) / (upper - lower);    RealType q = 1 - p;    if (p < p0)    {      result = sqrt((upper - lower) * (mode - lower) * p) + lower;    }    else if (p == p0)    {      result = mode;    }    else // p > p0    {      result = upper - sqrt((upper - lower) * (upper - mode) * q);    }    return result;  } // RealType quantile(const triangular_distribution<RealType, Policy>& dist, const RealType& q)  template <class RealType, class Policy>  RealType cdf(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)  {    static const char* function = "boost::math::cdf(const triangular_distribution<%1%>&, %1%)";    RealType lower = c.dist.lower();    RealType mode = c.dist.mode();    RealType upper = c.dist.upper();    RealType x = c.param;    RealType result; // of checks.    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))    {      return result;    }    if(false == detail::check_triangular_x(function, x, &result, Policy()))    {      return result;    }    if (x <= lower)    {      return 1;    }    if (x >= upper)    {      return 0;    }    if (x <= mode)    {      return 1 - ((x - lower) * (x - lower)) / ((upper - lower) * (mode - lower));    }    else    {      return (upper - x) *  (upper - x) / ((upper - lower) * (upper - mode));    }  } // RealType cdf(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)  template <class RealType, class Policy>  RealType quantile(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)  {    BOOST_MATH_STD_USING  // Aid ADL for sqrt.    static const char* function = "boost::math::quantile(const triangular_distribution<%1%>&, %1%)";    RealType l = c.dist.lower();    RealType m = c.dist.mode();    RealType u = c.dist.upper();    RealType q = c.param; // probability 0 to 1.    RealType result; // of checks.    if(false == detail::check_triangular(function, l, m, u, &result, Policy()))    {      return result;    }    if(false == detail::check_probability(function, q, &result, Policy()))    {      return result;    }    if(q == 0)    {      return u;    }    if(q == 1)    {      return l;    }    RealType lower = c.dist.lower();    RealType mode = c.dist.mode();    RealType upper = c.dist.upper();    RealType p = 1 - q;    RealType p0 = (mode - lower) / (upper - lower);    if(p < p0)    {      RealType s = (upper - lower) * (mode - lower);      s *= p;      result = sqrt((upper - lower) * (mode - lower) * p) + lower;    }    else if (p == p0)    {      result = mode;    }    else // p > p0    {      result = upper - sqrt((upper - lower) * (upper - mode) * q);    }    return result;  } // RealType quantile(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)  template <class RealType, class Policy>  inline RealType mean(const triangular_distribution<RealType, Policy>& dist)  {    static const char* function = "boost::math::mean(const triangular_distribution<%1%>&)";    RealType lower = dist.lower();    RealType mode = dist.mode();    RealType upper = dist.upper();    RealType result;  // of checks.    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))    {      return result;    }    return (lower + upper + mode) / 3;  } // RealType mean(const triangular_distribution<RealType, Policy>& dist)  template <class RealType, class Policy>  inline RealType variance(const triangular_distribution<RealType, Policy>& dist)  {    static const char* function = "boost::math::mean(const triangular_distribution<%1%>&)";    RealType lower = dist.lower();    RealType mode = dist.mode();    RealType upper = dist.upper();    RealType result; // of checks.    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))    {      return result;    }    return (lower * lower + upper * upper + mode * mode - lower * upper - lower * mode - upper * mode) / 18;  } // RealType variance(const triangular_distribution<RealType, Policy>& dist)  template <class RealType, class Policy>  inline RealType mode(const triangular_distribution<RealType, Policy>& dist)  {    static const char* function = "boost::math::mode(const triangular_distribution<%1%>&)";    RealType mode = dist.mode();    RealType result; // of checks.    if(false == detail::check_triangular_mode(function, mode, &result, Policy()))    { // This should never happen!      return result;    }    return mode;  } // RealType mode  template <class RealType, class Policy>  inline RealType median(const triangular_distribution<RealType, Policy>& dist)  {    BOOST_MATH_STD_USING // ADL of std functions.    static const char* function = "boost::math::median(const triangular_distribution<%1%>&)";    RealType mode = dist.mode();    RealType result; // of checks.    if(false == detail::check_triangular_mode(function, mode, &result, Policy()))    { // This should never happen!      return result;    }    RealType lower = dist.lower();    RealType upper = dist.upper();    if (mode < (upper - lower) / 2)    {      return lower + sqrt((upper - lower) * (mode - lower)) / constants::root_two<RealType>();    }    else    {      return upper - sqrt((upper - lower) * (upper - mode)) / constants::root_two<RealType>();    }  } // RealType mode  template <class RealType, class Policy>  inline RealType skewness(const triangular_distribution<RealType, Policy>& dist)  {    BOOST_MATH_STD_USING  // for ADL of std functions    using namespace boost::math::constants; // for root_two    static const char* function = "boost::math::skewness(const triangular_distribution<%1%>&)";    RealType lower = dist.lower();    RealType mode = dist.mode();    RealType upper = dist.upper();    RealType result; // of checks.    if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))    {      return result;    }    return root_two<RealType>() * (lower + upper - 2 * mode) * (2 * lower - upper - mode) * (lower - 2 * upper + mode) /      (5 * pow((lower * lower + upper + upper + mode * mode - lower * upper - lower * mode - upper * mode), RealType(3)/RealType(2)));  } // RealType skewness(const triangular_distribution<RealType, Policy>& dist)  template <class RealType, class Policy>  inline RealType kurtosis(const triangular_distribution<RealType, Policy>& dist)  { // These checks may be belt and braces as should have been checked on construction?    static const char* function = "boost::math::kurtosis(const triangular_distribution<%1%>&)";    RealType lower = dist.lower();    RealType upper = dist.upper();    RealType mode = dist.mode();    RealType result;  // of checks.    if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))    {      return result;    }    return static_cast<RealType>(12)/5; //  12/5 = 2.4;  } // RealType kurtosis_excess(const triangular_distribution<RealType, Policy>& dist)  template <class RealType, class Policy>  inline RealType kurtosis_excess(const triangular_distribution<RealType, Policy>& dist)  { // These checks may be belt and braces as should have been checked on construction?    static const char* function = "boost::math::kurtosis_excess(const triangular_distribution<%1%>&)";    RealType lower = dist.lower();    RealType upper = dist.upper();    RealType mode = dist.mode();    RealType result;  // of checks.    if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))    {      return result;    }    return static_cast<RealType>(-3)/5; // - 3/5 = -0.6    // Assuming mathworld really means kurtosis excess?  Wikipedia now corrected to match this.  }} // namespace math} // namespace boost// This include must be at the end, *after* the accessors// for this distribution have been defined, in order to// keep compilers that support two-phase lookup happy.#include <boost/math/distributions/detail/derived_accessors.hpp>#endif // BOOST_STATS_TRIANGULAR_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -