概率算法-均匀分布产生正态分布
大部分语言只能产生均匀分布的随机数。C语言用(double)rand()/RAND_MAX产生0到1之间均匀分布的随机数。那么如何产生正态分布的呢?
一般,一种概率分布,如果其分布函数为y=F(x),那么,y的范围是0~1,求其反函数G,然后产生0到1之间的随机数作为输入,那么输出的就是
符合该分布的随机数了:
y= G(x)
以指数分布为例,假设参数为a,那么概率密度函数为y=exp(-a);概率分布函数为y=1-exp(-a)/a。反函数为
y = -ln[(1-y)*a]/a;
MATLAB:
x=rand(1,1000);
a=2;
y=-log((1-x)*a)./a;
hist(y,100)
效果:
但是正态分布不容易这么做,因为分布函数实在有点复杂。
但是正态分布有一个特殊的性质,就是中心极限定理。其他任意分布的随机数,取大量,其均值服从高斯分布。严格的理论是这样的:
对于服从均匀分布的随机变量,只要n充分大,随机变量 就服从均值为零,方差为1的正态分布。所以,很简单,取N个均匀分布的随机变量即可。特别的,一般可以取N=12,由于(0,1)均匀分布的均值为0.5,方差为1/12,因此代入上式,结果为 x1+x2+..+x12-6.编程的时候就很方便。
MATLAB:
n=12;
for j=1:5000
a=rand(1,n);
u=sum(a);
x(j)=(u-n*0.5);
end
hist(x,100);
效果:
【3】最后一个办法,也是最有效的办法,是Box-Muller方法。正态分布的另一特殊性质,与瑞利分布有关。二维正态分布下,两个分量如果独立,那么他的模服从瑞利分布。瑞利分布的话,就可以通过标准的分布函数求反函数的方法求得。
MATLAB:
N=1000;
x1=rand(1,N);
x2=rand(1,N);
y1=sqrt(-2* log(x1)) .* cos(2*pi.*x2);
y2=sqrt(-2* log(x1)) .* sin(2*pi.*x2);
y=[y1,y2];
hist(y,100);
概率算法-均匀分布产生正态分布相关推荐
- 两个均匀分布相加、两个正态分布相加、由均匀分布生成正态分布
文章目录 两个均匀分布相加 两个正态分布相加 由均匀分布生成正态分布 有师兄面试碰到类似问题,记录一下推导过程. 两个均匀分布相加 两个正态分布相加 由均匀分布生成正态分布
- 【均匀分布和正态分布】
目录 均匀分布和正态分布对比 python绘制均匀分布 生成均匀分布数组 均匀分布绘制 正态分布 方差与标准差 均值与方差实际意义 python绘制正态分布图 均匀分布和正态分布对比 均匀分布:只在限 ...
- 几种概率分布(伯努利分布、二项分布、泊松分布、均匀分布、正态分布、指数分布、伽马分布)
伯努利分布(Bernoulli Distribution) 又名两点分布或者0-1分布,是一个离散型概率分布,为纪念瑞士科学家雅各布·伯努利而命名.若伯努利试验成功,则伯努利随机变量取值为1.若伯努利 ...
- 数理基础(概率论)------离散型随机变量均匀分布、正态分布、指数分布图像和连续型随机变量泊松分布、二项分布图像
1.均匀分布 1.1标准均匀分布(0-1) import numpy as np #满足0-1均匀分布 X~U(a,b) a=0,b=1 s1=np.random.rand(1000) print(s ...
- 均匀分布rand 正态分布randn 二元高斯分布random的图形 (python实现)
目录 一:介绍 1 什么是正态分布? 重点知识了解 2 什么是均匀分布 ? 3:二元高斯分布(二元正态分布) 二:编程实现 1: 正态分布 #直方图初判 2:均匀分布 3:高斯(正态)二元分布 一:介 ...
- [C++] 使用<random>头文件生成均匀分布、正态分布的数据
一.摘要 对于满足指定分布的自由变量,如果无法通过分布函数公式计算得到其期望和方差,可以考虑使用采样法得到其期望.方差值的近似值.在此过程中需要按照特定的分布函数进行随机采样,并统计采样数据,可以使用 ...
- 如何用均匀分布随机数生成正态分布随机数
文章目录 前言 The Box–Muller transform The Ziggurat algorithm(金字形神塔) 附录:Inverse transform sampling直观解释 前言 ...
- 【随机过程】t分布、卡方分布、F分布、均匀分布、正态分布、指数分布、几何分布、二项分布、泊松分布、0-1分布等分布的分布律、期望、方差和特征函数汇总
分布 分布律或概率密度 期望 方差 特征函数 0-1分布 P(X=1)=p,P(X=0)=q,0<p<1,p+q=1P(X=1)=p,P(X=0)=q,\\0<p<1,p+q= ...
- 均匀分布叠加与正态分布叠加
1 理论 1.1 两个正态分布之和为正态分布 1.2 均匀分布相减 x 1 ∼ U ( 0 , 1 ) x 2 ∼ U ( 0 , 1 ) z = x 1 − x 2 \begin{array}{l} ...
最新文章
- “内卷化”的快手与抖音——2020年短视频的“无聊经济”往何处去
- 【shell】常用语法 -b file -c file -f file-d file -x file
- 随时随地能写代码, vscode.dev 出手了
- python错误异常处理try except Error
- [Java并发编程实战] 简介
- adobe blueprint
- python中none什么意思_如何理解Python中的None
- Dreamweaver网页设计与制作100例:用DIV+CSS技术设计的书法主题网站(web前端网页制作课作业)
- 常成员函数和静态成员函数
- **51 stm8 arduino esp8266 esp32 stm32 树莓派 等单片机使用对比**
- Android调用系统应用打开各种类型文件
- vue遇到的小问题,封装功能
- 思维导图怎么画:这款免费思维导图软件推荐给你
- 三星G9006W 6.0 root
- 微信订阅号签到功能_微信公众号积分签到功能怎么添加,怎么制作微信签到赚积分...
- php获取微信公众号用户信息头像,微信公众号的web页面如何获取微信用户名和头像?...
- 互联网时代程序员如何避免知识半衰期?
- Redis源代码分析(十一年)--- memtest内存测试
- 如何查看本机IP地址(ipconfig命令)
- 互联网医院平台源码JAVA+APP全套
热门文章
- linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...
- linux容器内核配置,如何在Linux内核Centos下使用Sentinel LDK保护Docker容器实例
- 浅谈slf4j,logger中的{}功能
- CSS制作舞台聚光灯效果
- sql查询每科成绩的最高分_编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数...
- 2. IMU原理及姿态融合算法详解
- JavaScript - 你见过 [].slice.call() 吗?
- Python jupyter notebook Katex|Latex
- C++中find()函数用法
- 超图对接伟景行osg数据使用说明