Tac 发表于 2020-12-20 20:39:14

求大佬帮忙 估算pi

利用蒙特卡洛模拟估算pi
原理解释:如下图所示
https://iknow-pic.cdn.bcebos.com/9e3df8dcd100baa14b7b5cc45710b912c8fc2e7d
在正方形中随机生成点(个数为N),单位圆中橙色点个数为M,通过计算M/N即可近似得出pi的值
要求:给定一个非负整数,表示一行中来自标准输入(stdin)的试验次数,将利用蒙特卡洛模拟估算的近似值输出到标准输出(stdout)。
当输入为0时,结束程序。另外,请使用numpy功能编写程序
思路提供:(为了简化计算量可以只算四分之一面积然后乘4)
下面为输入输出示例
https://iknow-pic.cdn.bcebos.com/3ac79f3df8dcd1003fcbe35e628b4710b9122f7d

YunGuo 发表于 2020-12-20 23:06:32

本帖最后由 YunGuo 于 2020-12-20 23:21 编辑

看看这个
https://www.jianshu.com/p/07527fd43628

稍微修改下
import numpy as np


def get_pi(num):
    # 投掷点数
    n = num
    # 使用numpy的随机函数生成2行dart列的矩阵: points, 代表投掷dart次点的坐标,
    # 第0行代表x轴坐标,第1行代表y轴坐标。
    points = np.random.rand(2, n)
    # 落在圆内的点数,对矩阵计算,代替循环。
    m = np.sum(np.where(((points**2 + points**2)**0.5) < 1, 1, 0))
    # pi
    return 4 * m / n


if __name__ == '__main__':
    dart = int(input('输入投掷点数:'))
    if dart == 0:
      exit()
    else:
      pi = get_pi(dart)
      print('PI值:', pi)

Tac 发表于 2020-12-20 23:42:28

YunGuo 发表于 2020-12-20 23:06
看看这个
https://www.jianshu.com/p/07527fd43628



可以帮忙修改一下允许输入输出跟第二个图一样吗?还有保留九位小数{:10_297:}

YunGuo 发表于 2020-12-21 01:03:13

本帖最后由 YunGuo 于 2020-12-21 01:08 编辑

Tac 发表于 2020-12-20 23:42
可以帮忙修改一下允许输入输出跟第二个图一样吗?还有保留九位小数

改一下最后的输出就好了。
print('PI值:{:.9f}'.format(pi))
如果你只是想要计算图2中固定那几个数。那就这样写
import numpy as np


def get_pi(num):
    # 投掷点数
    n = num
    # 使用numpy的随机函数生成2行dart列的矩阵: points, 代表投掷dart次点的坐标,
    # 第0行代表x轴坐标,第1行代表y轴坐标。
    points = np.random.rand(2, n)
    # 落在圆内的点数,对矩阵计算,代替循环。
    m = np.sum(np.where(((points**2 + points**2)**0.5) < 1, 1, 0))
    # pi
    return 4 * m / n


if __name__ == '__main__':
    darts =
    for dart in darts:
      if dart == 0:
            exit()
      else:
            pi = get_pi(dart)
            print('PI值:{:.9f}'.format(pi))
页: [1]
查看完整版本: 求大佬帮忙 估算pi