拉普拉斯分布的随机数
Posted liam-ji
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拉普拉斯分布的随机数相关的知识,希望对你有一定的参考价值。
一、功能
产生拉普拉斯分布的随机数。
二、方法简介
1、产生随机变量的组合法
将分布函数\\(F(x)\\)分解为若干个较为简单的子分布函数的线性组合
\\[
F(x)=\\sum_i=1^Kp_iF_i(x)
\\]
其中 $ p_i> 0 ?(\\forall i) $ ,且 $ \\sum_i=1^Kp_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^Kp_iF_i(x)\\)
证明 \\(z\\)的分布函数为
\\[
P(z \\leqslant t) = P((z \\leqslant t) \\cap \\bigcup_i=1^K( \\xi = i)) \\= \\sum_i=1^KP(z \\leqslant t, \\xi =i) \\= \\sum_i=1^KP(\\xi = i)P(z \\leqslant t \\mid \\xi =i) \\= \\sum_i=1^Kp_iF_i(t)=F(t)
\\]
定理证毕。
根据此定理,我们给出产生随机数的组合算法如下:
- 产生一个正随机数\\(\\xi\\),使得\\(P(\\xi = i) = p_i \\ (i = 1,2,...,K)\\);
- 在\\(\\xi = i\\)时,产生具有分布函数\\(F_i(x)\\)的随机变量\\(x\\)。
该算法中首先以概率\\(p_i\\)选择子分布函数\\(F_i(x)\\),然后取\\(F_i(x)\\)的随机数作为\\(F(x)\\)的随机数。
2、产生拉普拉斯分布随机数的方法
拉普拉斯分布的概率密度函数为
\\[
f(x) = \\frac12\\beta e^-\\frac\\left | x \\right |\\beta
\\]
Laplace分布的均值为0,方差为\\(2\\beta ^2\\)。拉普拉斯分布也称为双指数分布。
根据上述的组合算法,产生拉普拉斯分布随机数的方法为:
- 产生均匀分布的随机数\\(u_1\\)和\\(u_2\\),即\\(u_1,u_2 \\sim U(0,1)\\);
- 计算\\(x = \\left\\\\beginmatrix -\\beta \\ ln(1 - u_1) & u_1 \\leqslant 0.5 \\\\ \\beta \\ ln(u_2) & u_2 > 0.5 \\endmatrix\\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文件参见均匀分布的随机数
以上是关于拉普拉斯分布的随机数的主要内容,如果未能解决你的问题,请参考以下文章
服从的拉普拉斯分布的随机变量X的概率密度f(x)=Ae^(-x ),求系数A及分布函数F(x)
服从的拉普拉斯分布的随机变量X的概率密度f(x)=Ae^(-x ),求系数A及分布函数F(x)