楼主: zhgzhckc
1733 3

[编程问题求助] 求pi值的编程问题 [推广有奖]

  • 0关注
  • 1粉丝

博士生

12%

还不是VIP/贵宾

-

威望
0
论坛币
1863 个
通用积分
0.8500
学术水平
5 点
热心指数
18 点
信用等级
4 点
经验
4825 点
帖子
119
精华
0
在线时间
320 小时
注册时间
2009-5-5
最后登录
2025-11-16

楼主
zhgzhckc 发表于 2013-6-15 03:23:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
以下是编写的程序

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? 哪里出错了? 多谢!

二维码

扫码加我 拉你入群

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

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

关键词:forvalues forvalue Uniform values Local

沙发
Mathematica李想 发表于 2013-6-15 10:58:47
模拟1000次, 是不是太少了? 100000次呢? Stata, 没研究过, 不好意思

藤椅
sungmoo 发表于 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')
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
h3327156 + 3 + 2 + 1 观点有启发

总评分: 学术水平 + 3  热心指数 + 2  信用等级 + 1   查看全部评分

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

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-30 03:16