小样的学习博客3——python之蒙特卡洛方法计算π

小样的第三次学习博客——python之蒙特卡洛方法计算π

声明

本人只是一名大一学生,如果有冒犯之处,还请海涵,如有错误,欢迎指出,大佬轻喷

说明

参考书籍:《Python语言程序设计基础》(第2版)嵩天 礼欣 黄天羽 著
同时对其代码做了一丢丢的修改

预备知识(用到的一些库函数)

库名库函数作用
random库random()随机生成[0.0,1.0)的之间的随机小数
math库sqrt()计算平方根,返回一个小数
time库pref_counter()返回程序运行的CPU时间(可用于计算程序运行时间

原理

蒙特卡洛方法是一种通过随机抽样来解决问题的方法,可以用来计算圆周率。具体步骤如下:

在一个正方形内画一个内切圆;
随机生成大量点,落在正方形内;
统计落在圆内的点的数量;
根据圆和正方形的面积比值,计算出圆周率。

参考书籍原理讲解展示

在这里插入图片描述

代码

from random import random
from math import sqrt
from time import perf_counter

date = 20000   # 点的数量
hit = 0.0     # 定义hit用于记录圆内点的个数,并初始化
start_time = perf_counter()  # 记录程序主要部分开始时间

for i in range(date):
	x, y = random(), random()  # 随机生成两个[0.0,1.0)的小数作为点的坐标(x,y)
	dist = sqrt(x**2+y**2)  # 计算点到原点的距离dist
	if dist<=1.0:  # 如果距离dist<=1.0,则点在圆内,圆内点个数hit加一
		hit += 1
		
Pi = hit/date*4   #计算Pi
print("π是{:.7f}".format(Pi))
end_time = perf_counter()  # 记录程序主要部分结束时间
print("程序主要部分运行时间:{}".format(end_time-start_time))  # 结束时间—开始时间=程序主要部分运行时间

首先,导入了random、sqrt和perf_counter函数。然后,定义了一个变量date,表示要生成的随机点的数量。接下来,初始化一个变量hit为0.0,用于记录落在单位圆内的点的数量。在循环中,生成两个随机数x和y,计算点们到原点的距离dist,如果距离小于等于1,则将hit加1。最后,它计算π的值并打印出来。

注意

  1. 增加采样点的数量(date)可以提高计算精度;
  2. 由于蒙特卡洛方法是基于随机抽样的,所以每次运行的结果可能会有所不同;

修改点

与参考书籍相比,本文采用了pref_counter函数用于计算程序运行时间。参考书籍采用的clock函数python3.3以后的版本已被剔除

声明

本人也只是一名大一学生,如果有冒犯之处,还请海涵,如有错误,欢迎指出,大佬轻喷

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值