π
- e i π = cos x + i sin x e^{i\pi} =\cos x + i\sin x eiπ=cosx+isinx
- π 4 = 1 − 1 3 + 1 5 − 1 7 + 1 9 . . . \frac{\pi}{4}=1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}... 4π=1−31+51−71+91...
- 散列图
- 蒙特概率统计求圆周率
- π = 6 ∑ k = 1 ∞ 1 k 2 \pi =\sqrt{6\sum \limits_{k=1}^{\infty}\frac{1}{k^2}} π=6k=1∑∞k21
- 比较
- 附录
图形化展示三种求圆周率的方法。山巅一寺一壶酒……
e i π = cos x + i sin x e^{i\pi} =\cos x + i\sin x eiπ=cosx+isinx
欧拉这个公式已经融合于广义相对论和量子力学结合的m理论(详见费马大定理、霍奇猜想),成为虚时间的基本架构,也是光量子纠缠的数学表示。里面有个圆周率符号,可以用来求圆周率。
π 4 = 1 − 1 3 + 1 5 − 1 7 + 1 9 . . . \frac{\pi}{4}=1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}... 4π=1−31+51−71+91...
往后面算得越多越接近。
散列图
计算五百次。上下对称接近,X轴长度是500/2=250
![]() |
---|
代码
def calculate_pi(iterations):
pi_over_4 = 0
pi=[]
for n in range(1, iterations+1, 2):
if 0==len(pi)%2:
pi_over_4 += 1/n
else:
pi_over_4 += -1/n
pi.append(4 * pi_over_4)
plt.figure(figsize=(100, 100)) # figsize:确定画布大小
plt.scatter([i for i in range(len(pi))], # 横坐标
pi, # 纵坐标
c='green', # 点的颜色
label='Calculated π') # 标签 即为点代表的意思
plt.legend()
plt.show() # 显示所绘图形
return pi.pop()
# 设置迭代次数
iterations = 500
pi = calculate_pi(iterations)
print(f"Calculated π to be: {pi}")
pi[]是列表,怎么在散列图里画一维列表呢?可以用下标生成一个坐标轴。比如[i for i in range(len(pi))], # 横坐标
蒙特概率统计求圆周率
用一千次的随机数测试。
>>> random.random(),是0到1的一个数
0.8875090735992053
投在边长d的正方形落到直径d的圆的概率的四倍约等于π
如果填满了圆是πr^2,正方形是4r^2
图片显示
参照前面元胞自动机用图片显示data的二维列表。
import matplotlib.pyplot as plt
data = [[0 for i in range(1000)] for j in range(1000)]
def f(n):
m = 0
for i in range(n):
x, y = random(), random()
if 1 > x**2 + y**2:
m += 1
data[int(x*1000)][int(y*1000)] = 1
else:
data[int(x*1000)][int(y*1000)] = 0
plt.imshow(data)
plt.show()
![]() |
---|
只有0,1两种颜色显示,太不直观。
散列图显示
import random
import matplotlib.pyplot as plt
plt.figure(figsize=(100, 100)) # figsize:确定画布大小
def f(n):
X,Y=[],[] #圆内
X1,Y1=[],[] #圆外
m = 0
#random.seed(0.5) #固定随机数
for i in range(n):
x, y = random.random(), random.random()
if 1 > x**2 + y**2:
m += 1
X.append(int(x*1000))
Y.append(int(y*1000))
else:
X1.append(int(x*1000))
Y1.append(int(y*1000))
# 2. 绘图
plt.scatter(X, # 横坐标
Y, # 纵坐标
c='red', # 点的颜色
label='in the circle') # 标签 即为点代表的意思
plt.legend()
plt.show() # 显示所绘图形
plt.scatter(X1, # 横坐标
Y1, # 纵坐标
c='black', # 点的颜色
label='out of the circle') # 标签 即为点代表的意思
plt.legend() # 显示图例
plt.show() # 显示所绘图形
print("π约等于",4 * (m/n))
π约等于 3.136
![]() |
---|
![]() |
---|
π = 6 ∑ k = 1 ∞ 1 k 2 \pi =\sqrt{6\sum \limits_{k=1}^{\infty}\frac{1}{k^2}} π=6k=1∑∞k21
在欧拉恒等式的基础上通过泰勒展开理论,多项式逼近理论得到的求 π \pi π公式。让 1 k 2 \frac{1}{k^2} k21计算到小于0.0000000001。
代码
def fLa(p):
'''
欧拉公式计算圆周率
'''
m = 0
n = 1
k = 1
while p < k:
m += k
n += 1
k = 1/(n**2)
m = math.sqrt(6*m)
return m
#小数可以写成10负多少次方
print(fLa(10**-10))
直接迭代计算得到结果是3.141583104230963。
![]() |
---|
比较
方法一:欧拉计算到500次是:3.137592669589472
方法二:随机一千次:3.136
方法三:迭代计算到0.0000000001是:3.141583104230963
附录
![]() |
---|