蒙特卡洛py求解面积题!(拯救小学生系列)

最近在朋友圈中看见了这样一道题目,又一次刷新了小学生题目库的难度。

在优秀少先队员的博主面前,这种鬼畜的曲线问题自然可以用积分轻松求解,可是题目早以限定了六年级水平,杀鸡岂能用牛刀,即使聪明如博主,6年纪的时候别说积分,cos都不会,(某位女性小学生表示可以运用tan,cos角度求解),因此这对广大小学生显然太勉强了不能理解。

那么,从小学生的角度这道题有没有办法对付这道恶意题目呢?

答案是有的

至于方法吗,对于擅长砸卡 扔飞镖的小学生们,蒙特卡洛显然再适合不过,关于介绍连接个博客,请广大小学生自行阅读。

https://blog.csdn.net/binlin199012/article/details/80604080

首先我们画出图形的轮廓,只选取我们需要的那一部分。

然后开始疯狂投针

#以半径为1的圆,在第一象限内的面积计算为例
import random
import math
import matplotlib.pyplot as plt
import numpy as  np
from matplotlib.patches import Ellipse, Circle
C=5000#循环次数
s=0#计数器
#作图的视野范围
plt.xlim(xmax=4,xmin=0)
plt.ylim(ymax=4,ymin=0)

x1=np.arange(0, 4, 0.1)
y1=0.5*x1
plt.plot(x1, y1)

x2 = y2 = np.arange(0, 4, 0.1)
x2, y2 = np.meshgrid(x2,y2)
plt.contour(x2, y2, (x2-4)**2 + (y2-4)**2, [16])     #x**2 + y**2 = 9 的圆形
plt.show()
for i in range(C):
	#生成随机坐标(x,y)
    x=4*random.random()#生成0-1之间的随机数
    #print(x)
    y=4*random.random()#生成0-1之间的随机数
    #print(y)
    y_predict=-math.sqrt(16-(x-4)**2) + 4
    y_predict2=0.5*x
    #print(y_predict)
    if y_predict>=y and y_predict2>=y and x<=4:#坐标点y小于y_predict,才是圆的点,即才符合条件,计数器加1
        s=s+1
        plt.plot(x,y,'r+')
    else:
        plt.plot(x, y, 'b+')
plt.show()  
predict_value=16*s/C
print(predict_value)

投针结果如图所示

这是投了5000次,计算结果为1.23左右,只是一个近似解。

但是小学生可以对老师说 “我可以无限投下去逼近真实解!”

当然老师并不会吃这一套“因为计算机产生的只不过是伪随机,无法获得真正的自然指针”

不过聪明的小学生也早就想好了解决方法

“布朗运动时所受的空气阻力是纯随机的,因此我只要站在足够高的地方,对管道亲自手投那就能够得到真实的频率! ”

发布了30 篇原创文章 · 获赞 21 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/cywtiancai/article/details/91201469