主题:如何用C语言产生正态分布随机数 查看完整版 作者:zmj567 时间:2008-05-27 17:46 |
标题:如何用C语言产生正态分布随机数 作者:zmj567 时间:2008-05-27 17:46 | |
[size=4][font=宋体]最近正在做随机数的相关课题,想知道在C语言中,如何利用中心极限定理和Box-Muller法产生正态分布随机数,最好是有原代码,因为我真的很急,所以,请大家帮帮忙!!! 谢谢了!![/font][/size] | |
标题: 作者:hagejid 时间:2008-05-27 20:15 | |
是不是做毕业设计的啊 先看看下面公式是不是正确的 Box-Muller方法 首先产生[0,1]区间上两个独立的均匀分布的随机数u1与u2,则: x1=(-2lnu1)1/2 cos(2πu2) x2=(-2lnu2)1/2 sin(2 πu2) 就是两个相互独立的服从N(0,1)分布的随机数。 用中心极限定理 用中心极限定理有可产生N(0,1)分布的随机数: 其中ui是[0,1]区间上均匀分布的随机数,i=1,2,…,6,x就是一个N(0,1)分布的一个随机数。 x=u1+u2+u3+u4+u5+u6-6 | |
标题: 作者:zmj567 时间:2008-05-29 12:51 | |
就是在作毕业设计,老师要求必须用C编写,可是C却没学好,所以一直弄不好!!! 中心极限定理不太对,还必须考虑它的均值和方差。具体似乎是: (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(μ,σ*σ)的一个随机数。 | |
标题: 作者:hagejid 时间:2008-05-27 17:46 | |
[color=red][b]此回复于2008-06-09 09:38被 [url=http://bbs.51cto.com/profile-uid-24207.html]ribut9225[/url] 评为最佳答案[/b][/color] 看了一下,的确是错了,要加12个的 x=u1+u2+u3+u4+u5+u6+u7+u8+u9+u10+u11+u12-6 如果公式正确,那么剩下的主要问题就是产生随机数了 在C里边产生随机数的方法是用srand()设置随机种子,然后用rand()获取伪随机数 因为是伪随机数,所以评审导师会在这里卡你一下的,这部分由我们C专长的版主yangcs帮忙解答一下 还有一个问题就是均匀分布,导师也会提问 伪随机数在每个可能出现的机会都是均等的,这部分还得要版主yangcs解答一下了 #include double p; srand(time(0));/*种下随机种子,只种一次,在程序开始的时候用一下*/ p=(double)rand()/(double)RAND_MAX;/*得到的p就是在[0,1]区间均匀的随机数*/ 两个double的强制转换是为防止某些编译器优化出错的 RAND_MAX在STDLIB头文件有定义,是编译器int表示的最大值 剩下的就是按公式做出要做的东西了 最后说明一下,一般C里边rand()函数产生的随机数是伪随机数,虽然看起来是是没规律,但还是假的 真正要产生随机数的话是用专门的电子电路,不过价格好像不低。 | |
标题: 作者:zmj567 时间:2008-05-29 22:14 | |
汗!! 好象有点懂了!!! 不好意思,想问一下,你上面提到的两个问题要如何向版主yangcs请教呢??? 最后想请问一下,有完整的代码吗??? 谢谢了!!! | |
标题:回复 #1 zmj567 的帖子 作者:yangcs 时间:2008-05-30 09:39 | |
概率统计计算。在学校是肖云茹老师教的。生成的是伪随机数。程序不难,按照书上的算法写很方便的。 | |
标题: 作者:zmj567 时间:2008-05-31 21:13 | |
这两种算法相关的资料!!! 在附件里!! | |
标题: 作者:chinazhanggq 时间:2008-06-06 21:38 | |
xia lai kan kan | |
标题: 作者:chinazhanggq 时间:2008-06-06 22:09 | |
bu cuo | |
标题: 作者:lshguang89 时间:2008-07-17 10:52 | |
太好了我也在找 | |
标题: 作者:alucard_2005 时间:2008-12-04 20:36 | |
啊? 不是用RANDOM函数啊- -? 我还满心希望好看到原代码的类 竟然只有2个我没见过的定理 T T 别说PERL 连C的算法也不可能知道了... | |
标题: 作者:alucard_2005 时间:2008-12-04 20:33 | |
MANAGER 布置我这道题- - 测试我C语言水平= = 我又不是计算机系的 常规学科中的C语言写这个怎么都不现实 我能把它看懂已经X天X地了 | |
标题: 作者:xiaoqi_n 时间:2008-09-29 10:53 | |
很管用!谢谢! | |
标题: 作者:coopery 时间:2008-11-21 23:15 | |
不错,留着以后慢慢研究 | |
标题: 作者:xubiechusheng 时间:2008-12-04 16:31 | |
dddddddddddddddd | |
标题: 作者:蘡薁 时间:2010-05-18 10:34 | |
受教啦!考来看看! |