[求助]如何用C语言产生正态分布随机数
最近正在研究随机数产生算法,所以想请教一下,如何用C语言产生正态分布随机数,主要是利用Box-Muller和中心极限定理两种算法产生的。请高手帮帮忙,谢谢了!!! 先产生01之间的均匀随机数,再用取舍法,取舍法你可在网上随便查查,资料很多,而且简单,我用过很多次 查了很多,可是因为C没学好,所以还是不会,郁闷啊!!!
看一本书
我推荐一本书,里面的方法说的很明确,清华大学的《系统建模与仿真》,齐欢老师的,里面第七章专门讲如何产生随机变量回复 沙发 xuxinnuaa 的帖子
先产生01之间的均匀随机数,然后按给定分布拟合就可以了(数字图像中有这些知识)如直方图均衡化就是用这种方法 Box-Muller方法
首先产生区间上两个独立的均匀分布的随机数u1与u2,则:
x1=(-2lnu1)1/2 cos(2πu2)
x2=(-2lnu2)1/2 sin(2 πu2)
就是两个相互独立的服从N(0,1)分布的随机数。
中心极限定理:
(1)从计算机中产生U(0,1)均匀分布的随机数30个(当然,也可以是任意个,m越大越好,主要是符合中心极限定理的条件),记为u1, u2,...,u30;由于E(ui)=1/2,D(ui)=1/12(i=1,2,...,30)根据中心极限定理,可以认为近似服从均值为Σ=ui (其中i=1,2,...,30)近似服从均值为1/2*30=15,方差为1/12*30=2.5的正态分布。
(2)计算:v=(u1+u2+...+u30-15)/(2.5)1/2,由中心极限定理,它可以看作是来自标准正态分布N(0,1)的一个随机数;
(3)变换:x=μ+σv,由正态分布的性质可知,它可以看作是来自正态分布N(μ,σ*σ)的一个随机数。
页:
[1]