楼主: icebird_rong
4349 5

[其他] moro算法生成正态随机数 [推广有奖]

  • 1关注
  • 0粉丝

硕士生

8%

还不是VIP/贵宾

-

威望
0
论坛币
18 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
954 点
帖子
163
精华
0
在线时间
71 小时
注册时间
2006-1-5
最后登录
2017-6-6

楼主
icebird_rong 发表于 2011-2-12 01:43:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我在一篇论文中看到moro算法可以生成正态随机数,而且此算法较优。但是找不到moro算法的相关资料及对正态随机数的生成方法。
哪位朋友可以提供一些资料给我。如果能提供用matlab实现的moro算法生成正态随机数的代码更是感谢了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Moro 随机数 成正态 matlab实现 MATLAB matlab 朋友 而且 论文 资料

沙发
irvingy 发表于 2011-2-12 08:08:07
1# icebird_rong
if you have matlab, use norminv and randn, no need to code your own

Glasserman, pp 68

Fig. 2.13. Beasley-Springer-Moro algorithm for approximating the inverse normal.

a0 = 2.50662823884 b0 = -8.47351093090
a1 = -18.61500062529 b1 = 23.08336743743
a2 = 41.39119773534 b2 = -21.06224101826
a3 = -25.44106049637 b3 = 3.13082909833
c0 = 0.3374754822726147 c5 = 0.0003951896511919
c1 = 0.9761690190917186 c6 = 0.0000321767881768
c2 = 0.1607979714918209 c7 = 0.0000002888167364
c3 = 0.0276438810333863 c8 = 0.0000003960315187
c4 = 0.0038405729373609

y ← u − 0.5
if |y| < 0.42
r ← y ∗ y
x ← y ∗ (((a3 ∗ r + a2) ∗ r + a1) ∗ r + a0) / ((((b3 ∗ r + b2) ∗ r + b1) ∗ r + b0) ∗ r +1)
else
r ← u;
if (y > 0) r ← 1 − u
r ← log(−log(r))
x ← c0 + r ∗ (c1 + r ∗ (c2 + r ∗ (c3 + r ∗ (c4+ r ∗ (c5 + r ∗ (c6 + r ∗ (c7 + r ∗ c8)))))))
if (y < 0) x←−x
return x
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
icebird_rong + 1 + 1 + 1 非常感谢,思路清晰
holdser + 30 鼓励

总评分: 论坛币 + 30  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
lpnibo 发表于 2013-11-15 12:16:15
irvingy 发表于 2011-2-12 08:08
1# icebird_rong
if you have matlab, use norminv and randn, no need to code your own
你好,我想问下最后一个if后面 x=-x的 x应该没有定义吧,比如我输入u=0.07,此时y=-0.43<0, |y|>0.42那么就直接跳到最后一个if,此时x没有定义任何值。请问这是怎么回事呢?

板凳
lpnibo 发表于 2013-11-15 12:28:07
irvingy 发表于 2011-2-12 08:08
1# icebird_rong
if you have matlab, use norminv and randn, no need to code your own
我需要用这个算法是需要吧低差异序列,比如halton序列转化成正态随机序列,这是我编的matlab的一个小程序,然后系统跑出来就是说有的地方 倒数第二个if那里没有定义变量。所以我就不太懂那个if后面是啥回事了。 QQ图片20131115105233.jpg

报纸
irvingy 发表于 2013-11-16 23:02:37
lpnibo 发表于 2013-11-15 12:28
我需要用这个算法是需要吧低差异序列,比如halton序列转化成正态随机序列,这是我编的matlab的一个小程序 ...
第一个end放错地方

if y > 0
    r = 1 - h(j,i)
end

地板
lpnibo 发表于 2013-11-17 11:25:39
irvingy 发表于 2013-11-16 23:02
第一个end放错地方

if y > 0
恩 我明白了 如果if后面紧跟那段没有向后退两个写就等于这个if执行完毕就应该end。 谢谢啊,好像可以跑了thx

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-31 05:15