大型Lambda的C 泊松累積分布

2021-10-23 06:04:20 字數 1416 閱讀 9627

目錄介紹

背景使用**

用ramanujan

的階乘近似值計算

c#中的泊松分布

如果需要用於很大型

lambda

的泊松累積分布函式,則可以使用此**。

泊松概率質量函式的公式為:

#中,可以將其計算為:

public double cdf(long k)

return sum;

}

問題在於,隨著k和

_lambda

(_lambda = λ)

增加,分母都變得非常大,並且程式崩潰。這可以通過使用對數來解決。為簡單起見,自然對數是用於:

計算使用對數和

ramanujan

的階乘近似表示: 請

在此處詳細了解。 設定

math.pow(_lambda, i) / factorial(i)= (a) = (\frac})給出了

通過使用

ramanujan

的階乘近似,我們得到:

#表示法並利用

a = math.pow(e, i*ln(

ℷ) -i*ln(i) + i - ln(i*(1 + 4*i*(1 + 2*i)))/6 - ln(

π)/2))

可以在c#計算中使用此表示式,如以下**所示:

var log6thtail = math.log(i * (1 + 4 * i * (1 + 2 * i)))/6;

var lnn = i * math.log(_lambda) - (i * math.log(i) - i + log6thtail + logpidivtwo);

n = math.pow(math.e, lnn - _lambda);

這是**:

using system;

namespace poissonevaluator

public double pmf(long k)

return math.pow(math.e, -_lambda) * math.pow(_lambda, k) / factorial(k);

} public double cdf(long k)

else

else

}sum += n;

i++;

}return (sum > 1) ? 1.0 : sum;

} public double factorial(long k)

return factorial;

} }

泊松抽樣函式的實現

為了產生泊松分布抽樣間隔,首先需要決定抽樣的引數 例如平均抽樣間隔是 30 秒,時間單位為秒,那麼 30,1 30 然後,產生一系列指數分布的 偽 隨機數e1 e2,en 第一次抽樣的時刻為e1 第二次抽樣的時刻為e1 e2 等等,依此類推 一種生成指數分布的 偽 隨機數ei 的方法 在0 和 1 ...

關於泊松過程的引數估計

泊松過程的事件間隔之間服從指數分布,如果我能從資料中找到每個spike發生的時刻,那麼每個spike之間的時間也就隨之確定。關於指數分布的引數估計,可見下面 關鍵步驟截圖如下 這是在假設神經元的脈衝完全符合泊松分布下的推理。當然,神經元的spikes不是完全符合泊松過程的,我們需要進一步的優化。目前...

正態分佈與泊松分布的關係

正態分佈 normal distribution 又名高斯分布 gaussian distribution 正規分布,是乙個非常常見的連續概率分布。正態分佈在統計學上十分重要,經常用在自然和社會科學來代表乙個不明的隨機變數。若隨機變數x服從乙個位置引數為 mu 尺度引數為 sigma 的正態分佈,記...