標準正態分佈怎麼算 標準正態分佈函式的快速計算方法

2021-10-13 00:00:32 字數 1771 閱讀 3480

標準正態分佈的分布函式 $\phi(x)$ 可以說是"資料分析師"統計計算中非常重要的乙個函式,基本上有正態分佈的地方都或多或少會用上它。在一些特定的問題中,我們"資料分析師"需要大量多次地計算這個函式的取值,比如我經常需要算正態分佈與另乙個隨機變數之和的分布,這時候就需要用到數值積分,而被積函式就包含

$\phi(x)$。如果 $z\sim n(0,1), x\sim f(x)$,$f$ 是 $x$ 的密度函式,那麼 $z+x$

的分布函式就是

我們"資料分析師"知道,$\phi(x)$

沒有簡單的顯式表示式,所以它需要用一定的數值方法進行計算。在大部分的科學計算軟體中,計算的精度往往是第一位的,因此其演算法一般會比較複雜。當這個函式需要被計算成千上萬次的時候,速度可能就成為了乙個瓶頸。

當然有問題就會有對策,一種常見的做法是略微放棄一些精度,以換取更簡單的計算。在大部分實際應用中,乙個合理的誤差大小,例如

$10^$ 的級別。

第一種辦法來自於經典參考書 abramowitz and stegun: handbook of

mathematical functions 的 公式

26.2.17 。其基本思想是把 $\phi(x)$ 表達成正態密度函式 $\phi(x)$

和乙個有理函式的乘積。這種辦法可以保證誤差小於 $7.5\times

10^$,一段c++實現可以在 這裡 找到。(**中的常數與書中的略有區別,是因為**是針對誤差函式

$\mathrm(x)$ 編寫的,它與 $\phi(x)$ 相差一些常數)

我們來對比一下這種方法與r中 pnorm() 的速度,並驗證其精度。

library(rcpp)

sourcecpp("test_as26217.cpp") x = seq(-6, 6, by = 1e-6) system.time(y

可以看出,a&s 26.2.17

的速度大約是 pnorm() 的三倍,且誤差也在預定的範圍裡,是對計算效率的一次巨大提公升。

那麼還有沒有可能更快呢?答案是肯定的,而且你其實已經多次使用過這種方法了。怎麼,不相信?看看下面這張圖,你就明白了。

沒錯,這種更快的方法其實就是兩個字:查表。它的基本想法是,我們預先計算好一系列的函式取值

$(x_i,\phi(x_i))$,然後當我們需要計算某個點 $x_0$ 時,就找到離它最近的兩個點 $x_k$ 和

$x_$,再用線性插值的方法得到 $\phi(x_0)$ 的近似取值:

什麼?覺得這個方法太簡單了?先別急,這裡面還有不少學問。之前我們""說了,我們需要保證這種方法的誤差不超過

$\epsilon=10^$,因此就需要合理地選擇預先計算的點。由於

$\phi(-x)=1-\phi(x)$,我們暫且只需要考慮 $x$ 為正的情況。如果讓 $x_i =

ih,i=0,1,\ldots,n$,那麼對函式 $f$

進行線性插值的誤差將不超過( ** )

其中 $\vert f』』 \vert_$ 是函式二階導絕對值的最大值。對於正態分佈函式來說,它等於

0.001818$。最後,只要 $x_n>5.199$,即 $n\ge 2860$ 並另所有 $x>x_n$

的取值等於1,就可以保證整個實數域上 $\phi(x)$ 的近似誤差都不超過 $10^$。

這種簡單方法的實現我放在了 github

library(rcpp)

sourcecpp("test_fastncdf.cpp") x = seq(-6, 6, by = 1e-6) system.time(fasty

與之前的結果相比,相當於速度是 pnorm() 的15倍!

標準正態分佈怎麼算 標準正態分佈函式的快速計算方法

標準正態分佈函式的 快速計算方法 標準正態分佈的分布函式 x x 可以說是統計計算中非 常重要的乙個函式,基本上有正態分佈的地方都或多或少會用上它。在一些特定的問題中,我們需要大量多次地計算這個函式的取值,比如我經常需要算正態分佈與另乙個隨機變數之和的分布,這時候就需 要用到數值積分,而被積函式就包...

關於求標準正態分佈函式值

今年三月以來,一直在做工藝質量系統,基礎做完了,開始做統計分析,其中需要計算菸支和菸絲的工藝合格率,一開始以為就是合格數 樣品數,結果常常是100 合格。後來發現原來犯了自以為是的錯誤,在質量統計學裡面,合格率不是這麼算的。計量型不合格率演算法 1.雙側標準 p 1 usl lsl 2.單側標準 望...

正態分佈某一點的概率怎麼算 正態分佈的抽卡概率演算法

一 純隨機的體驗 在卡牌遊戲中,抽卡是乙個很重要的環節。對於卡池中價值較高概率較低的物品,比如設計抽出概率為5 抽出期望次數為20次,但是實際玩家在抽的時候,大部分玩家都能在少數幾次內抽出,也有一部分玩家很多次都沒出,使得體驗上的差異較大。如果可以使玩家抽出次數的分布符合正態分佈,即絕大部分玩家都是...