Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
三角形分佈(Triangular Distribution)

#include <boost/math/distributions/triangular.hpp>

namespace boost{ namespace math{
 template <class RealType = double, 
           class Policy   = policies::policy<> >
 class triangular_distribution;
   
 typedef triangular_distribution<> triangular;

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

    triangular_distribution(RealType lower = -1, RealType mode = 0) RealType upper = 1); // Constructor.
       : m_lower(lower), m_mode(mode), m_upper(upper) // Default is -1, 0, +1 triangular distribution.
    // 訪問函數(Accessor functions).
    RealType lower()const;
    RealType mode()const;
    RealType upper()const;
 }; // 類 triangular_distribution

}} // namespaces

三角形分佈(triangular distribution) 是一個 連續概率分佈(continuous probability distribution) ,下限(lower limit)為 a,眾數(mode)為 c, 且上限( upper limit)為 b。

當分佈只是非常含糊地(vaguely)知道時使用三角形分佈(triangular distribution),但是,像均勻分佈(uniform distribution), 上邊界(upper)和界限( limits)是「已知的」, 而三角形分佈(Triangular Distribution)的上邊界(upper)和界限( limits)只是一個 最佳猜測('best guess)',眾數(mode)或中心點(center point),也同樣是猜測的。 三角形分佈(Triangular Distribution)推薦作為一個β分佈的代理(proxy for the beta distribution)。這種分佈用在商業決策制定(business decision making)和項目管理(project planning)中。

三角形分佈(triangular distribution)概率密度函數(probability density function)為:

f(x) =

參數a (下邊界(lower))可以是任何有限值。參數 b (上邊界(upper)) 可以是任何 > a (下邊界(lower))的有限值。參數 c (眾數(mode)) a <= c <= b. 這是最常見的值。

隨機變量(random variate) x 也必須是有限值,並且滿足 lower <= x <= upper。

當正態分佈(normal distribution)的一個假定(assumption) 因為捨入操作和模擬(analog)到數字(digital)的轉換而給某個變數的不連續數值的分配(quantization)產生不確定因素(uncertainty)時,三角形分佈(triangular distribution)可能就很合適。上界限制(Upper Limit)和下界限制(Lower limit)是已知的,並且最常見值(most probable value)位於中間(midway)。

當「最佳估計(best guess)」是上限(Upper limit)或下限(Lower limit)時,這個分佈可以得到簡化-一個90度角的三角形。缺省選擇是 001 三角形分佈(triangular distribution)用來表示最小值可能性最大的估計,例如,你相信下一個投遞日期是最可能的(next-day quoted delivery date) (已經知道更快的投遞是不可能的 - 郵遞員每天只來一次),而更長的延遲漸漸不可能,而且投遞時間永遠也不會超過你的時間上限。

下面的圖像顯示了對於不同的參數,概率密度函數(probability density function) PDF 是如何變化的:

以及累積分佈函數(cumulative distribution function):

函數
triangular_distribution(RealType lower = 0, RealType mode = 0 RealType upper = 1);

使用下限( lower) lower (a) 和上限(upper) upper (b)來構造一個三角形分佈(triangular distribution)

要求lowermodeupper 參數是有限值,否則調用定義域錯誤

RealType lower()const;

返回分佈的lower 參數 (default -1)。

RealType mode()const;

返回分佈的mode 參數 (default 0)。

RealType upper()const;

返回分佈的upper 參數 (default+1)。

非成員訪問函數(Non-member Accessors)

支持所有的分佈都通用的 常見的非成員訪問函數累積分佈函數(Cumulative Distribution Function)概率密度函數(Probability Density Function)分位點(Quantile)故障率函數(Hazard Function)累積危險函數(Cumulative Hazard Function)均值(mean)中位數(median)眾數(mode)方差(variance)標準差(standard deviation)偏斜(skewness)峰態(kurtosis)峰態超越(kurtosis_excess)值域(range) 以及 支持(support)

隨機變量的定義域為: \lowerto \upper, 支持的範圍是: lower <= x <= upper。

精確度

三角形分佈(triangular distribution)使用簡單的算術運算來實現,因此誤差在1到2個epsilon(10的-5次方), 除了分位點(quantiles)的參數接近於極限值0和單位元素(unity)。

實現

在下面的表中:a 是分佈的 lower 參數, c是 mode 參數, b 是 upper 參數,x 是隨機變量,p 是概率且 q = 1-p

函數

實現註解

pdf

使用關係: pdf = 0 對於 x < mode, 2(x-a)/(b-a)(c-a) 否則 2*(b-x)/((b-a)(b-c))

cdf

使用關係: cdf = 0 對於 x < mode (x-a)2/((b-a)(c-a)) 否則 1 - (b-x)2/((b-a)(b-c))

cdf 補集(complement)

使用關係: q = 1 - p

分們點(quantile)

假設: p0 = (c-a)/(b-a) 函數cdf的拐點( point of inflection),然後給定概率 p 以及 q = 1-p:

x = sqrt((b-a)(c-a)p) + a ; 對於 p < p0

x = c ; 對於 p == p0

x = b - sqrt((b-a)(b-c)q) ; 對於 p > p0

(參考/boost/math/distributions/triangular.hpp 瞭解相關細節.)

補集的分位點(quantile from the complement)

和分位點(quantile)一樣 (參考/boost/math/distributions/triangular.hpp 瞭解相關細節)

均值(mean)

(a + b + 3) / 3

方差(variance)

(a2+b2+c2 - ab - ac - bc)/18

眾數(mode)

c

偏斜(skewness)

(參考/boost/math/distributions/triangular.hpp 瞭解相關細節).

峰態(kurtosis)

12/5

峰態超越(kurtosis excess )

-3/5

一些 '已知良好的(known good)'的測試數據從Statlet: Calculate and plot probability distributions 獲得。

參考資料

PrevUpHomeNext