使用均匀分布随机数产生器构造任意分布的随机数产生器

一.算法原理

在概率论中,有下面重要的结论:设随机变量Y的概率分布函数F(y)为连续函数,而X是在(0,1)上均匀分布的随机变量,设,则Z与Y有相同的分布。

因此,理论上,我们可以用(0,1)上的均匀分布来得到任意分布的随机数

设随机变量Y的概率密度函数为f(y),则,我们可以按照下面的步骤来获得满足其分布的随机数:

1.根据给定的概率密度函数(PDF)f(y),通过积分算出概率分布函数F(y);

2.计算概率分布函数F(y)的反函数

3.生成一个(0,1)上均匀分布的随机数变量X,

4.那么就是满足要求的分布的随机数。

二.使用均匀分布产生指数分布

1.指数分布是概率密度函数(PDF)为

通过计算可以得到,指数分布的概率分布函数为

2.指数分布的概率分布函数的反函数为

3.获得一个在(0,1)之间均匀分布的随机数x,则通过下面的式子计算得到的y满足指数分布

2.MATLAB代码

%% clear

clc;

clear;

%% uniform distribution

N = 100000000;

U1 = rand(1, N);

%% inverse function

lamda = 1;

Z1 = -1 / lamda * log(1 - U1);

%% visualisztion of PDF

subplot(1, 2, 1), hist(U1, 100), title( ‘The PDF of U1‘);

subplot(1, 2, 2), hist(Z1, 100), title( ‘The PDF of Z1‘);

3.实验结果

参考文献

徐全智,数学建模

版权所有,欢迎转载,转载请注明出处,谢谢

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-06 17:10:26

使用均匀分布随机数产生器构造任意分布的随机数产生器的相关文章

Matlab 高斯分布 均匀分布 以及其他分布 的随机数

Matlab 高斯分布 均匀分布 以及其他分布 的随机数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布的随机数生成器 frnd f分布的随机数生成器 gamrnd 伽玛分布的随机数生成器 geornd 几何分布的随机数生成器 hygernd 超几何分布的随机数生成器 lognrnd 对数正态分布的随机数生成器 nbinrnd 负二项分布的随机数生成器 ncfrnd 非中心f分布的随机数生成器 nct

均匀分布映射到任意分布

当我们想对某些特定分布进行抽样时,要通过均匀分布的抽样来映射,因为电脑算法产生的伪随机数是看做均匀分布的. 假设均匀分布随机变量为$X$,则特定分布$\displaystyle p_Y(y)$的随机变量就为$Y=g(X)$.如何求得这个$g(x)$映射呢? 关于利用均匀分布随机变量产生任意分布变量的实现 - Rainlin - 博客园 虽然这个博客有一些借鉴意义,但是我觉得这个应该是错的.因为有些例子并不满足,但是我可以通过凑函数的方式来映射.下面这个概率密度的映射想了我好几个小时,最后原来是开

拉普拉斯分布的随机数

一.功能 产生拉普拉斯分布的随机数. 二.方法简介 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

Java基础知识强化82:Math类random()方法之获取任意范围的随机数案例(面试题)

1. 需求:设计一个方法,可以实现获取任意范围内的随机数 分析:使用方法random()如下: 1 public static double random() 2 注:Returns a pseudo-random number between 0.0 (inclusive) and 1.0 (exclusive). // 0.0 <= x <1.0 (1)键盘录入两个数. 1 int start: 2 int end: (2)想办法获取在start到end之间的随机数 (3)输出这个随机数

oracle 产生一个任意大小的随机数

SELECT DBMS_RANDOM.RANDOM FROM DUAL;          产生一个任意大小的随机数 SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) FROM DUAL

生成任意范围的随机数/颜色

1, 生成任意范围的随机数,假设生成数起始位置是startNum , 结束位置是endNum;  (startNum ~ endNum). 因为Math.random() 方法只生成换成(0~1) 之间的随机数,所以,(startNum ~ endNum)要向(0~1)进行转换. startNum +(0 ~ endNum-startNum), 后面的括号中有0了, 已经进了一步了,那怎么得到1? 任何数除以它本身都得1, 0除以任何数都得0 , 后面的括号中都除以(endNUm-startNu

STL源码剖析——空间配置器Allocator#2 一/二级空间配置器

上节学习了内存配置后的对象构造行为和内存释放前的对象析构行为,在这一节来学习内存的配置与释放. C++的内存配置基本操作是::operator new(),而释放基本操作是::operator delete().这两个全局函数相当于C的malloc() 和free() 函数.而SGI正是以malloc() 和free() 完成内存的配置与释放. 考虑到小型区块可能造成的内存破碎问题,SGI设计了两级的空间配置器.第一级直接使用malloc() 和free() ,而第二级则视情况采用不同的策略:当

unity shader 学习 (2)Vs【顶点着色器】 和 Ps【像素着色器】

上一章我写了渲染管线,中间提到了shader的作用,我们的大shader同学主要就是负责被CPU指派到GPU中做一些如顶点转换,关照模型,光栅化等操作的. 大shader有两种类型,他们分别是Vs[顶点着色器] 和 Ps[像素着色器].. 他们可以同时存在,也可以分开存在,没有任何使用限制. 当时如果同时存在的话,必须Vs执行完成后再交给Ps处理. 他们两个家伙是配合固定流程管线而存在的.

[原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------