Boost C++ 库

...世界上最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

伯努利分布

#include <boost/math/distributions/bernoulli.hpp>
namespace boost{ namespace math{
 template <class RealType = double,
           class Policy   = policies::policy<> >
 class bernoulli_distribution;

 typedef bernoulli_distribution<> bernoulli;

 template <class RealType, class Policy>
 class bernoulli_distribution
 {
 public:
    typedef RealType  value_type;
    typedef Policy    policy_type;

    BOOST_MATH_GPU_ENABLED bernoulli_distribution(RealType p); // Constructor.
    // Accessor function.
    BOOST_MATH_GPU_ENABLED RealType success_fraction() const
    // Probability of success (as a fraction).
 };
}} // namespaces

伯努利分布是单次试验结果的离散分布,只有两种结果,0(失败)或 1(成功),成功的概率为 p。

伯努利分布是最简单的构建块,其他基于独立伯努利试验序列的离散分布可以基于它构建。

伯努利分布是只有一次试验的二项分布 (k = 1, p)。

概率密度函数 pdf

f(0) = 1 - p, f(1) = p

累积分布函数

D(k) = if (k == 0) 1 - p else 1

下图说明了概率密度函数 pdf如何随单次试验的结果而变化

以及累积分布函数

成员函数
BOOST_MATH_GPU_ENABLED bernoulli_distribution(RealType p);

构造一个具有成功概率 p伯努利分布

BOOST_MATH_GPU_ENABLED RealType success_fraction() const

返回此分布的成功概率参数。

非成员访问器

支持所有分布通用的常用非成员访问器函数累积分布函数概率密度函数分位数风险函数累积风险函数、__logcdf、__logpdf、均值中位数众数方差标准差偏度峰度超额峰度范围支撑。对于此分布,所有非成员访问器函数都标记有 BOOST_MATH_GPU_ENABLED,并且可以在主机和设备上运行。

随机变量的域为 0 和 1,有用的支持范围仅为 0 或 1。

在此范围之外,函数未定义,或者可能会抛出 domain_error 异常并提供错误消息。

精度

伯努利分布使用简单的算术运算符实现,因此误差应在一个或两个 epsilon 之内。

实现

在下表中,p 是成功概率,q = 1-pk 是随机变量,为 0 或 1。

[Note] 注意

伯努利分布在此处实现为严格离散分布。如果需要允许 k 为任何实数的广义版本,则应使用单次试验的二项分布,例如

binomial_distribution(1, 0.25)

函数

实现说明

支持范围

{0, 1}

pdf

使用关系式:当 k = 0 时,pdf = 1 - p,否则为 p

cdf

使用关系式:当 k = 0 时,cdf = 1 - p,否则为 1

cdf 补码

q = 1 - p

分位数

如果 x <= (1-p) 则为 0,否则为 1

来自补码的分位数

如果 x <= (1-p) 则为 1,否则为 0

均值

p

方差

p * (1 - p)

众数

如果 (p < 0.5) 则为 0,否则为 1

偏度

(1 - 2 * p) / sqrt(p * q)

峰度

6 * p * p - 6 * p +1/ p * q

超额峰度

峰度 -3

参考文献

PrevUpHomeNext