Boost C++ 库

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

PrevUpHomeNext

柯西-洛伦兹分布

#include <boost/math/distributions/cauchy.hpp>
template <class RealType = double,
          class Policy   = policies::policy<> >
class cauchy_distribution;

typedef cauchy_distribution<> cauchy;

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

   BOOST_MATH_GPU_ENABLED cauchy_distribution(RealType location = 0, RealType scale = 1);

   BOOST_MATH_GPU_ENABLED RealType location()const;
   BOOST_MATH_GPU_ENABLED RealType scale()const;
};

柯西-洛伦兹分布以奥古斯丁·柯西和亨德里克·洛伦兹的名字命名。它是一个连续概率分布,其概率密度函数 (PDF) 由下式给出:

位置参数 x0 是分布峰值的位置(分布的众数),而尺度参数 γ 指定 PDF 在最大高度一半处的半宽度。如果位置为零,尺度为 1,则结果为标准柯西分布。

该分布在物理学中很重要,因为它是描述受迫共振的微分方程的解,而在光谱学中,它是谱线线形的描述。

下图显示了分布如何随位置参数变化而移动

下图显示了形状(尺度)参数如何改变分布

成员函数
BOOST_MATH_GPU_ENABLED cauchy_distribution(RealType location = 0, RealType scale = 1);

构造一个柯西分布,其位置参数为 location,尺度参数为 scale。当这些参数取默认值(location = 0,scale = 1)时,结果为标准柯西分布。

要求 scale > 0,否则调用 domain_error

BOOST_MATH_GPU_ENABLED RealType location()const;

返回分布的位置参数。

BOOST_MATH_GPU_ENABLED RealType scale()const;

返回分布的尺度参数。

非成员访问器

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

但请注意,柯西分布没有均值、标准差等。请参阅 数学上未定义的函数,以控制这些函数是否应因 BOOST_STATIC_ASSERTION_FAILURE 而编译失败,这是默认行为。

或者,如果调用 均值标准差方差偏度峰度超额峰度 函数,它们都将返回 domain_error

随机变量的域是 [-[max_value], +[min_value]]。

精度

柯西分布是根据标准库 tanatan 函数实现的,因此应该具有非常低的错误率。

实现

在下表中,x0 是分布的位置参数,γ 是其尺度参数,x 是随机变量,p 是概率,q = 1-p

函数

实现说明

pdf

使用关系式:pdf = 1 / (π * γ * (1 + ((x - x0 ) / γ)2))

cdf 及其补

cdf 通常由下式给出

p = 0.5 + atan(x)/π

但这在 x -> -∞ 时会遭受抵消误差。

相反,使用基于函数 atan2 的数学上等效的表达式

p = atan2(1, -x)/π

通过对称性,补是

q = atan2(1, x)/π

分位数

无论我们是从概率还是从其补数开始,都使用相同的过程。首先,将参数 p 减小到 [-0.5, 0.5] 范围,然后使用关系式

x = x0 ± γ / tan(π * p)

我们是从 x0 加还是减取决于我们是否从补数开始。

众数

位置参数。

参考

PrevUpHomeNext