全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1709 3
2013-06-15
以下是编写的程序

clear
local total = 0
forvalues k = 1/1000 {
    local v1 = 2 * runiform() - 1
    local v2 = 2 * runiform() - 1
    if `v1'^2 + `v2'^2 < = 1 {
        local I = 1
    }
    else {
        local I = 0
    }
    local total = `total' + `I'
}
local pai = 4 * `total'/1000
dis "`pai'"

为什么求出的pi值是3.7? 哪里出错了? 多谢!

二维码

扫码加我 拉你入群

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

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

全部回复
2013-6-15 10:58:47
模拟1000次, 是不是太少了? 100000次呢? Stata, 没研究过, 不好意思
二维码

扫码加我 拉你入群

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

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

2013-6-15 15:25:55
*可简化作:
loc N=1000
loc n=0
forv i=1/`N'{
loc n=`n'+(runiform()^2+runiform()^2<=1)
}
di "pi="4*`n'/`N'

*不指定种子,每次运行的结果一般不同。

另一种试验(Buffon's needle problem)
loc L=10
loc l=8
loc N=1000
loc n=0
forv i=1/`N'{
loc n=`n'+(`L'*runiform()<=`l'*sin(_pi*runiform()))
}
di "pi="2*`l'*`N'/(`L'*`n')
二维码

扫码加我 拉你入群

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

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

2013-6-16 07:05:51
多谢楼上和楼上的楼上的回复。
改为:(`v1')^2 + (`v2')^2 < = 1 后,pi值变成3.14左右了。
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群