简单学Python用蒙特卡罗法来计算圆周率

前几天我们学习了用割圆法计算圆周率:简单学Python——用割圆术来计算圆周率。割圆法是用几何的方式来计算圆周率,今天的蒙特卡罗法是用概率的方法来计算圆周率。

蒙特卡罗法也称统计模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。是按抽样调查法求取统计值来推定未知特性量的计算方法。

简单学Python用蒙特卡罗法来计算圆周率

word画的图,将就着看吧

根据这幅图片理解一下蒙特卡罗方法:在这个坐标轴上,圆心和正方形的中心都与坐标轴0点重合。圆的面积为S = π*0.5*0.5即0.25π。现在随机生成X个点,这X个点不超过正方形的范围。假设与原点距离<=0.5的点为圆内的点,个数为t。t/X为点落入圆内的概率,这个概率即为圆的面积与正方形面积的比例。所以t/X=0.25π/1,从而得出π=4 *t / X。下面用代码实现一下。

import numpy as np
# 运用np.random随机生成dot个点
for i in range(0,16):
	dot=10**i#dot的值为1,10,100,1000...
#下面是这些点的随机的坐标
	x=np.random.rand(dot)
	y=np.random.rand(dot)
# 转化为坐标格式
	X=np.c_[x-0.5,y-0.5]
# 计算出与原点距离<=0.5的点(即x平方加y平方小于0.25)
	incircle=X[X[:,0]**2+X[:,1]**2<=0.25]
# 求出相似π(4*圆内点数/总点数)
	PI=4*incircle.shape[0]/X.shape[0]
	print(f'点的数量为{dot},推算出的圆周率PI为{PI}')

结果如下:

简单学Python用蒙特卡罗法来计算圆周率

最后只生成了1亿个点,在生成10亿个点的过程中,发生了错误:MemoryError: Unable to allocate 7.45 GiB for an array with shape (1000000000,) and data type float64。意思是可用内存不足7.45G,没发进行下去了。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/75019
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 11 日 下午2:37
下一篇 2024 年 7 月 11 日 下午2:38

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注