拉普拉斯分布的隨機數


一、功能

產生拉普拉斯分布的隨機數。

二、方法簡介

1、產生隨機變量的組合法

將分布函數\(F(x)\)分解為若干個較為簡單的子分布函數的線性組合

\[F(x)=\sum_{i=1}^{K}p_{i}F_{i}(x) \]

其中 $ p_{i}> 0 \ (\forall i) $ ,且 $ \sum_{i=1}^{K}p_{i}=1 $ ,\(F(x)\)是分布函數。

定理 若隨機變量\(\xi \sim s\)離散分布\(\left \{ p_{i} \right \}\),即\(P(\xi =i)=p_{i}\),並且\(z \sim F_{\xi }(x)\),取\(z=x\),則\(z \sim F(x) = \sum_{i=1}^{K}p_{i}F_{i}(x)\)

證明 \(z\)的分布函數為

\[P(z \leqslant t) = P((z \leqslant t) \cap \bigcup_{i=1}^{K}( \xi = i)) \\ = \sum_{i=1}^{K}P(z \leqslant t, \xi =i) \\ = \sum_{i=1}^{K}P(\xi = i)P(z \leqslant t \mid \xi =i) \\ = \sum_{i=1}^{K}p_{i}F_{i}(t)=F(t) \]

定理證畢。

根據此定理,我們給出產生隨機數的組合算法如下:

  1. 產生一個正隨機數\(\xi\),使得\(P(\xi = i) = p_{i} \ (i = 1,2,...,K)\)
  2. \(\xi = i\)時,產生具有分布函數\(F_{i}(x)\)的隨機變量\(x\)

該算法中首先以概率\(p_{i}\)選擇子分布函數\(F_{i}(x)\),然后取\(F_{i}(x)\)的隨機數作為\(F(x)\)的隨機數。

2、產生拉普拉斯分布隨機數的方法

拉普拉斯分布的概率密度函數為

\[f(x) = \frac{1}{2\beta }e^{-\frac{\left | x \right |}{\beta }} \]

Laplace分布的均值為0,方差為\(2\beta ^{2}\)。拉普拉斯分布也稱為雙指數分布。

根據上述的組合算法,產生拉普拉斯分布隨機數的方法為:

  1. 產生均勻分布的隨機數\(u_{1}\)\(u_{2}\),即\(u_{1},u_{2} \sim U(0,1)\)
  2. 計算\(x = \left\{\begin{matrix} -\beta \ ln(1 - u_{1}) & u_{1} \leqslant 0.5 \\ \beta \ ln(u_{2}) & u_{2} > 0.5 \end{matrix}\right.\)

三、使用說明

使用C語言實現產生拉普拉斯分布隨機數的方法:

#include "math.h"
#include "uniform.c"

double laplace(double beta, long int *s)
{
	u1 = uniform(0.0, 1.0, s);
	u2 = uniform(0.0, 1.0, s);
	if(u1 <= 0.5)
		x = -beta * log(1.0 - u2);
	else
		x = beta * log(u2);
	return(x);
}

uniform.c文件參見均勻分布的隨機數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM