随机数求面积_蒙特卡洛方法_阀门算法

如何求pi呢?

维基百科上的pi是这样的pi

MOOC上介绍了两种求pi的算法

一种是百科里的阀门算法
这里写图片描述
代码实现较为简单, 计算的精确度似乎很高.

不得不说这个求pi的公式看上去非常优美.

# -*- coding:-utf -*-
from random import *
pi = 0.0
for i in range(0, 10000):
    pi += (1/pow(16, i)*(4/(8*i+1) - 2/(8*i+4) - 1/(8*i+5) - 1/(8*i+6)))
print(pi)

今天想介绍的是蒙特卡洛方法, 这是一种用统计学思维解决数学计算问题的方法.

简单来说就是, 在图形上撒点, 当点数趋近于无穷大时, 在圆上的点比上在整个正方形的点*4结果就是pi了

from random import random
from time import perf_counter
Points = 5000*5000
cnt = 0
start = perf_counter()
for i in range(Points):
    x, y = random(), random()
    dis = x ** 2 +y ** 2
    if dis <= 1.0:
        cnt += 1
pi = 4*cnt/Points
print("{:.7f}".format(pi))
print("运行时间是: {:.7f}s".format(perf_counter() - start))

实测: 消耗相同的计算力, pi的精度远远没有阀门算法高

但这不失为一种对精度要求不高的计算的简便方法.

如对函数y = x*x, 和y = 0, x = 1, x = 0围绕图形的面积
计算机随机生成随机数, 简单计算一下就可以得到面积, 而不用使用复杂的数学推导.

这种计算思维很值得学习

from random import random
time = 2000*2000
cnt = 0.0
for i in range(time):
    x, y = random(), random()
    if 0 <= x*x <= y:
        cnt += 1
S = cnt/time
print("{:.4f}".format(S))

话说π真的是很奇妙的东西啊

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值