首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蒙特卡罗和面积-calculation

蒙特卡罗和面积-calculation
EN

Stack Overflow用户
提问于 2011-10-30 02:11:02
回答 1查看 1.3K关注 0票数 1

它应该接近0.3

代码语言:javascript
复制
$ cat monte.py 
import random,math
density=int(1e6)
x = [random.uniform(0,1)*7*math.pi for _ in range(density)]
y = [random.uniform(0,1) for _ in range(density)]
i = [math.sin(xx)*math.cos(xx) > yy for (xx,yy) in zip(x,y)]

print sum(i)/(float(density)*10.0)*7*math.pi

$ python monte.py 
0.350184850795

我正在尝试重写下面的代码,但由于某些原因,python代码甚至不是很接近。

代码语言:javascript
复制
x = rand(1, 1000000)*7pi;
y = rand(1, 1000000);
i = sin(x).* cos(x) >y;
Area3 = (sum(i) / 10000000)*7pi;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-30 02:37:15

我在你的matlab和python版本之间得到了相同的结果...你确定matlab版本给你的是~2,而不是~0.35吗?

例如:

MATLAB:

代码语言:javascript
复制
x = rand(1, 1000000)*7*pi;
y = rand(1, 1000000);
i = sin(x).* cos(x) >y;
Area3 = (sum(i) / 10000000)*7*pi

这产生了:0.3511

您的纯python版本:

代码语言:javascript
复制
import random,math
density=int(1e6)
x = [random.uniform(0,1)*7*math.pi for _ in range(density)]
y = [random.uniform(0,1) for _ in range(density)]
i = [math.sin(xx)*math.cos(xx) > yy for (xx,yy) in zip(x,y)]

print sum(i)/(float(density)*10.0)*7*math.pi

这产生了:0.347935156296

基于Numpy的:

代码语言:javascript
复制
import numpy as np
x = np.random.random(1e6) * 7 * np.pi
y = np.random.random(x.size)
i = np.sin(x) * np.cos(x) > y
print 7 * np.pi * i.sum() / (10 * x.size)

这产生了:0.350475133957

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7940740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档