zoukankan      html  css  js  c++  java
  • 拉普拉斯分布的随机数

    一、功能

    产生拉普拉斯分布的随机数。

    二、方法简介

    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} ight }),即(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 igcup_{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}{2eta }e^{-frac{left | x ight |}{eta }} ]

    Laplace分布的均值为0,方差为(2eta ^{2})。拉普拉斯分布也称为双指数分布。

    根据上述的组合算法,产生拉普拉斯分布随机数的方法为:

    1. 产生均匀分布的随机数(u_{1})(u_{2}),即(u_{1},u_{2} sim U(0,1))
    2. 计算(x = left{egin{matrix} -eta ln(1 - u_{1}) & u_{1} leqslant 0.5 \ eta ln(u_{2}) & u_{2} > 0.5 end{matrix} ight.)

    三、使用说明

    使用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文件参见均匀分布的随机数

  • 相关阅读:
    upc组队赛16 Melody【签到水】
    upc组队赛16 WTMGB【模拟】
    upc组队赛15 Supreme Number【打表】
    upc组队赛15 Lattice's basics in digital electronics【模拟】
    upc组队赛15 Made In Heaven【第K短路 A*】
    upc组队赛14 As rich as Crassus【扩展中国剩余定理】
    upc组队赛14 Floating-Point Hazard【求导】
    upc组队赛14 Communication【并查集+floyd /Tarjan】
    upc组队赛14 Bus stop【签到水】
    2018/12/7 数据库事务和分布式事务
  • 原文地址:https://www.cnblogs.com/liam-ji/p/11631363.html
Copyright © 2011-2022 走看看