返回介绍

9.2 使用蒙特卡罗方法来估算 pi

发布于 2024-01-25 21:44:08 字数 1052 浏览 0 评论 0 收藏 0

我们可以通过向一个由一个单位圆所代表的飞镖靶子投掷几千枚虚构的飞镖来估算pi。落入圆圈的边缘内和边缘外的飞镖数量之间的关系将允许我们来趋近pi。

这是第一个理想问题,因为我们可以把整个工作负载在一定数量的进程间均匀地拆分,每一个运行在一个独立的CPU上面。每一个进程将会同时结束,因为每一个进程的工作负载是均等的,所以在我们给问题增加新的CPU和超线程时,我们可以调查可得到的速度提升。

在图9-1中,我们朝单位圆投掷了10 000枚飞镖,其中一定比例的飞镖落入了画出来的单位圆的四等分之内。这个估算很坏——10 000枚飞镖投掷没有可靠地给出我们三小数位的结果。如果你运行自己的代码,会看到每一轮估算值在3.0到3.2之间变化。

为了对第一个三小数位有信心,我们需要产生10 000 000个随机飞镖投掷。这是低效的(存在更好的pi值估算方法),但是它相当方便地演示了使用multiprocessing做并行化的好处。

随着蒙特卡罗方法,我们使用Pythagorean理论来测试一个飞镖是否在我们的圆圈内着落:

因为我们使用了一个单位圆,所以我们能够通过移除平方根操作(12=1)来优化,给我们留以一个简化的表达式去实现:

图9-1 使用蒙特卡罗方法来估算pi

我们在例9-1中会看到一个循环的版本。我们会实现一个普通的Python版本,以及以后实现一个numpy版本,我们都将使用线程和进程来并行化问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文