python:撒豆求pi与matplotlib练习

目录

前言:

思路:

代码:

如何不利用pi画出圆?


前言:

撒豆求pi是我刚刚开始学习python进行的一项练习。由于专业原因,我多年未接触数学等逻辑性强的学科,逻辑思维非常之差,这个看似简单的练习却让我绞尽脑汁。其中,难免会出现代码复杂等问题。还望大家多多海涵,指出不足。

思路:

pi其实就是半径为1的圆的面积。这里我的圆心坐标为(0,0)

一个半径为1,直径为2的圆,正好可以内切一个边长为2的正方形。已知正方形面积为4,如何利用随机撒豆求出pi的近似值?

控制撒豆数量,随机抛到正方形内部,其实可以发现,有的豆子落在圆内,有的豆子落在了圆外。统计落在圆内豆子的数量。

如何统计?很简单,圆边到圆心的距离恒等于1,已知点的坐标,用勾股定理即可求出到愿心的距离

为了方便,我们可以取1/4圆进行测试,结果x4,即为pi值。

撒豆数量越大,pi值越准确。

代码:

import matplotlib.pyplot as plt
import random as rd
import numpy as np
plt.figure(figsize=(20, 8), dpi=150)
plt.axis('equal')  # 让xy坐标长度相等,不写的话圆不成圆
dots = 100**2     # 随机撒点
hits = 0           # 表示点在圆圈内
kx = []
ky = []
for i in range(dots+1):      # 用for循环,dots多少次就撒多少次,注意末尾数字要+1
    x = rd.random()          # random.random()表示的就是[0, 1)之间的随机数
    y = rd.random()          # 其实可以和x合并在一起
    kx.append(x)
    ky.append(y)
    if pow(x**2 + y**2, 0.5) <= 1:       # pow函数是求次方的函数,pow(底数, 指数, 余数)
        hits += 1            # if条件句判断点是否点在了圆圈内,如果在则+1
pi = hits / dots * 4         # 上述内容只考虑了四分之一的圆
print(pi)                    # 同理,最后依然要进行调用,
plt.scatter(kx, ky, s=0.01)

· 第一个for循环中x和y在随机取数,取出来的坐标放到kx和ky列表中

结果如下:


如何不利用pi画出圆?

下面的代码仅供大家参考,此时半径为0.5:

plt.title = "求圆的面积"
a = [0, 0.5, 1, 1, 1, 0.5, 0, 0, 0]
b = [0, 0, 0, 0.5, 1, 1, 1, 0.5, 0]
plt.plot(a, b)

plt.color = 'b'
# 根据坐标绘制图形

r = 0.5
c, d = (0.5, 0.5)
x1 = np.arange(0, c, 0.001)
x2 = np.arange(c, c+r, 0.001)
# 使用numpy中arange函数,创建给定区间的数值数组。三个参数:start, end, step.
# arange属于创建区间数组。
y1 = r + np.sqrt(r**2 - (r - x1)**2)
y2 = r - np.sqrt(r**2 - (r - x1)**2)
y3 = r + np.sqrt(r**2 - (x2 - r)**2)
y4 = r - np.sqrt(r**2 - (x2 - r)**2)
plt.plot(x1, y1)
plt.color = 'y'
plt.plot(x1, y2)
plt.color = 'r'
plt.plot(x2, y3)
plt.color = 'g'
plt.plot(x2, y4)
plt.color = 'k'
plt.show()

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值