如何模拟高斯分布的随机数发生器?
模拟 如何 随机数 发生器
2023-09-27 14:20:30 时间
在一些算法中,经常会用到随机数,最常用的随机数有两种,一是服从均匀分布的随机数,二是服从高斯分布(正态分布)的随机数。在标准C中并没有产生高斯分布的随机数发生器,只有服从均匀分布的随机数发生器rand(),那么如何通过rand()来模拟出高斯分布特征的伪随机数呢?这就是本文的话题。
实验原理:高斯分布的随机数在概率上服从高斯分布,如果通过rand()产生某个区间的随机数,通过高斯分布的概率计算公式得到该随机数对应的概率值,然后与一个随机概率进行比较,如果该概率值大于随机概率,就认为该随机数是服从高斯分布的随机数。
高斯分布随机数的参数:随机数的区间为[f_floor,f_ceil],mu为均值,sigma为std标准差
废话少说,直接上代码,基于Matlab进行的仿真实验:
%% 产生指定区间上服从正态分布的随机数 %% [f_floor,f_ceil],mu为均值,sigma为std标准差 %% 生成原理:用均匀rand生成该区间的x,然后计算对应的高斯概率, %% 与随机概率比较,如果大于随机概率,则挑出来作为一个值 %% %digits(50)%设定数字精度 f_floor = -10.0; f_ceil = 10.0; mu = 5; sigma = 1; N = 100000; X = zeros(1,100); for n = 1:N prob = 0; y = rand(); while prob < y; x = f_floor + (f_ceil - f_floor) * rand(); prob = 1/sqrt(2*pi*sigma*sigma)*exp(-(x-mu)^2/sigma/sigma/2); y = rand(); end; X(n) = x; end; plot(X); hist(X,50)实验结果如图所示:
实验结果分析:
通过统计直方图可以看出,通过这种机制生成的随机数大致满足区间为[f_floor,f_ceil],mu为均值,sigma为std标准差的高斯分布随机数。也就证明了算法的正确性。
高斯分布的随机数或者高斯噪声在现代数字信号处理中常常用到,而在一些开发平台并没有提供可以直接调用的高斯随机数发生器,因此就需要模拟出高斯随机数,而本文可以作为参照进行。
*************************************************************************************************************************************
2015-7-21
相关文章
- 如何使用phantomJS来模拟一个HTML元素的鼠标悬停
- mysql-模拟全连接处理
- 模拟实现vector/迭代器失效问题
- 【BZOJ】1622: [Usaco2008 Open]Word Power 名字的能量(dp/-模拟)
- 模拟黑客攻击:过道安检门 变成信息透明人
- 十四届蓝桥青少组模拟赛Python-20221108
- 模拟动态分区分配
- 如何用python模拟鼠标和键盘的操作
- python 模拟键盘输入
- VC显示网页验证码、模拟CSDN网页登录
- 【视觉高级篇】24 # 如何模拟光照让3D场景更逼真?(下)
- 学校初一模拟赛(2019.3.8)
- 58.tablewidget模拟手指实现滑动
- 2019-8-31-dotnet-如何在-Mock-模拟-Func-判断调用次数