请问如何得到一个满足正态分布的随机数?

Cipherf 2004-11-21 05:47:28
我希望得到一个有趋向的随机数,也就是以一个数为中心的随机数,在自然现象和社会现象中,大量随机数都服从或近似服从正态分布,所以我想用它来做我的随机算法。不知道那位高手知道如何实现?

刚才勉力把概率统计的书翻出来又啃了一下,果然还是啃不动……我们文科只学高数D,高数最简单的那一类,我还是60分过关,概率统计也是勉强及格,幸好没有遇到四大名捕……您说经济与管理学院工商管理系的学高数要干什么……不过现在知道非计算机专业的痛苦了……

大概知道正态分布就是X~N(μ,σ^2)
rnd()产生一个0<=x<1的均匀分布的随机数,而我希望能够实现输入两个参数μ,σ2通过Rnd实现正态分布的随机数。

举个例子,希望产生某地的一个人的随机数寿命x,当输入μ=40和σ2=0.25时,此人的寿命x最可能落在40附近,比方说x在15-25岁的概率为2%(百分数乱写的,不要介意),25-35岁的概率为25%,35-45岁的概率为50%,45-55岁的概率为25%,55-65岁的概率为2%;而当μ=60时,x就最可能落在60附近了。以此类推。

我现在的方法是用一堆的if来模拟,效率实在太差了,请高手帮忙啊。

另外请您千万不要只拿理论出来,我单看理论就像看天书一样……能同时贴代码就万分感谢了~~

-------------
另外再问一下,当σ2越大时,是否产生的图形越平滑,各值所可能取到的概率越相近?那么当σ2趋向于无穷大时,是否图形无限趋向于直线?
...全文
204 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cipherf 2004-11-22
  • 打赏
  • 举报
回复
谢谢,不过2楼的方法就是我现在在用的用If来模拟的方法……问题有两个,一是当需要不断变换公式的参数时,要一个一个修改,效率不高;另一个是理论上正态分布是线性而不是分段的,也就是比如μ=40时,如35-45岁的概率是50%,其实是平均概率50%,实际数值应该是35岁的概率不到50%而40岁的概率超过50%,超过40岁后概率又开始下降,所以如果找不到直接变换的公式的话,既不准确又不方便啊。
请大家继续帮忙啊~~
viena 2004-11-22
  • 打赏
  • 举报
回复
没办法,汗~
aiur2000 2004-11-22
  • 打赏
  • 举报
回复
高数也不怎么好,不过转个弯解决。
例如:25-35岁的概率为25%,35-45岁的概率为50%,45-55岁的概率为25%
转换成:25-35岁的概率为0-0.25,35-45岁的概率为0.25-0.75,45-55岁的概率为0.75-1
取随机数,若rnd(now)=0.3表示在0.25-0.75间,取35-45岁。
具体岁数可以再rnd一次;岁数=rnd(now)*10+35。
qidaozhilong 2004-11-22
  • 打赏
  • 举报
回复
楼上的说法有点失误:
其实,这种正态分布分2种,一种连续;一种离散。
连续的话,就要考虑非整数的年龄分布,如35.6岁等,需要写个积分函数,比较烦琐。
离散的话,先根据(μ,σ^2),计算出一张二维表,然后根据这张表来switch,代码重复率较高,考虑优化的地方是正态分布的对称性。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧