欧拉圆周率

图形化展示三种求圆周率的方法。山巅一寺一壶酒……

e i π = cos ⁡ x + i sin ⁡ x e^{i\pi} =\cos x + i\sin x e=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π=131+5171+91...

往后面算得越多越接近。

散列图

计算五百次。上下对称接近,X轴长度是500/2=250

欧拉公式计算圆周率500次计算过程

代码

    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() 
蒙特概率统计求圆周率data的二维列表

只有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=1k21

在欧拉恒等式的基础上通过泰勒展开理论,多项式逼近理论得到的求 π \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。

欧拉公式计算圆周率M的计算情况

比较

方法一:欧拉计算到500次是:3.137592669589472
方法二:随机一千次:3.136
方法三:迭代计算到0.0000000001是:3.141583104230963

附录

圆周率诗圆周率诗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值