再说圆的面积

微积分-圆的面积和周长(1)介绍微积分方法求解圆的面积,本文使用蒙特卡洛方法求解圆面积。

取(0,1)* (0,1)区间,也就是单位圆第一象限的端点区间对应的正方形区间。下面是计算机给出的结果:很显然第一象限的面积是1/4单位圆面积,即Π/4
在这里插入图片描述
本文使用蒙特卡洛方法对圆面积进行求解。
最小标椎随机生成器算法:

xi = axi-1(mod m)
ui = xi/m
其中m=2^31-1,   a=7^5=16807

这里使用最小标椎生成器算法生成随机数。代码中(ux,uy) = (ui, ui+1)。

# #!/usr/bin/python
import matplotlib.pyplot as plt
import numpy as np
xi = 3
count=0
list_x = []
list_y = []
for i in range(1000001):
	xi = 16807*xi%( 2**31-1)
	ux = xi/(2**31-1)
	# print(ux)
	xi = 16807*xi%( 2**31-1)
	uy = xi/(2**31-1)
	if (ux**2+uy**2 <= 1):
		list_x.append(ux)
		list_y.append(uy)
		count = count + 1
print(count/1000000)

x = np.array(list_x)
y = np.array(list_y)

plt.scatter(x, y)
plt.show()

在这里插入图片描述

运行结果:0.785573

直接使用python的random进行求解:

#!/usr/bin/python
# Write Python 3 code in this online editor and run it.
import random
print(random.uniform(0, 1))
count = 0
for i in range(1000001):
	ux = random.uniform(0, 1)
	uy = random.uniform(0, 1)
	if (ux**2+uy**2 <= 1):
		count = count + 1
print(count/1000000)

运行结果:0.786203

从上面的结果来看,第一种方法的效果更好一点。

蒙特卡洛方法看起来高大上的东西,本质上就是概率问题。

上面的代码是蒙特卡洛二型方法,这个代码是一型方法,利用平均值求面积。

#!/usr/bin/python
# Write Python 3 code in this online editor and run it.
xi = 3
result=0
for i in range(1000001):
        xi = 16807*xi%( 2**31-1)
        ux = xi/(2**31-1)
        # print(ux)
        result += (1-ux**2)**0.5
print(result/1000000)

运行结果:0.7852800345401167

更多内容,欢迎关注我的微信公众号:半夏之夜的无情剑客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helloworddm

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值