美文网首页高中生数据分析案例
蒙特卡洛法计算自然常数e——python编程及可视化

蒙特卡洛法计算自然常数e——python编程及可视化

作者: 人工智能小技巧 | 来源:发表于2019-03-14 00:09 被阅读221次

蒙特卡洛方法是一种用野蛮粗暴的蛮力对抗精致数学的一种计算思维,能够将复杂数学问题转化为简单粗暴的重复步骤,在工程上有很多应用。我还用蒙特卡洛方法计算了圆周率,请看我另一篇博客。

张子豪 同济大学

蒙特卡洛方法计算自然常数e 蒙特卡洛方法计算自然常数e

原理

曲面四边形面积即为积分之后的值

原理:用蒙特卡洛方法随机在左图矩形方格中撒点,统计y=1/x内外点的个数,
由几何概型,估算出曲线下曲面四边形的面积。
同时,由定积分可算出这部分面积为ln2,即e**(估算出的面积)== 2,即可求出e。

撒点越多,e的计算值也越来越趋近2.71828的真实值。

源代码

# 张子豪 2019-3-14
import random
import matplotlib.pyplot as plt
import numpy as np


DARTS = 1024*1024 # 总共撒点的个数
counts = 0 # 落在曲线下方的点数
e = 0 # e的计算值
xs = [0,0]
ys = [0,0]

# 开始画左边的图:撒点估计曲线下方的面积
plt.subplot(121)
x = np.arange(0.5,2.5,0.001)
plt.ylim(0,1.25) # y轴坐标范围
plt.xlabel('x') # x轴标签
plt.ylabel('y') # y轴标签
plt.plot(x,1/x) # 绘制反比例函数曲线
plt.legend(loc=1) # 在右上角增加图例
plt.legend(['y = 1 / x']) # 图例的内容
plt.plot([1,1,2,2],[0,1,1,0],'r',linewidth=0.2) # 绘制撒点范围框

for i in range(DARTS):
    x = random.uniform(1,2)
    y = random.uniform(0,1)
    if y < 1/x: # 点落在曲线下方
        counts += 1
        plt.subplot(121)
        plt.plot(x,y,'g.')
    else: # 点落在曲线上方
        plt.subplot(121)
        plt.plot(x,y,'r.')
    if counts>0:
        e = pow(2,i/counts)

    # 开始画右边的图:e的计算值随投掷次数的关系
    plt.subplot(122)
    xs[0] = xs[1] # 上一个e值与下一个e值,通过xs与ys列表中的两个元素进行两点连线
    xs[1] = i
    ys[0] = ys[1]
    ys[1] = e
    plt.ylim(0,4.5) # y轴坐标范围
    plt.xlabel('Number of try') # x轴标签
    plt.ylabel('Estimation of e') # y轴标签
    plt.yticks(np.arange(0,4.5,0.5)) # y轴刻度线
    plt.title('e:{:.10f}\ncount:{}'.format(e,i)) # 图的标题动态更新
    plt.axhline(np.e,linewidth=0.05,color='r') # 绘制2.71828参考线
    plt.plot(xs,ys,'b--',linewidth=0.3) # 绘制e的计算值随撒点次数变化的曲线
    plt.ion() # 保持图像处于交互更新状态 
    plt.pause(0.2) # 控制撒点速度

可视化

蒙特卡洛方法计算自然常数e

相关文章

  • 蒙特卡洛法计算自然常数e——python编程及可视化

    蒙特卡洛方法是一种用野蛮粗暴的蛮力对抗精致数学的一种计算思维,能够将复杂数学问题转化为简单粗暴的重复步骤,在工程上...

  • 自然常数e

    当=-1时分母为零,不可求,也就是说无法使用定积分直接求出反比例函数下的面积。那就转换思路,让趋近于-1,让面积为...

  • 自然常数e

  • 自然常数e

    今天我想聊自然常数。自然常数的代表符号是e,又称欧拉数。这个数字是一个无理数。约等于2.71828,不懂的就把它当...

  • BP原理(前馈神经网络)

    自然常数e 公式中的e叫自然常数,也叫欧拉数,e=2.71828…。e是个很神秘的数字,它是“自然律”的精髓,其中...

  • TCID50计算器-python-pyqt5-可视化编程

    TCID50计算器-python-pyqt5-可视化编程 运行环境 pyqt 5.13python 3.7Pych...

  • 关于自然常数e

    关于e会很复杂: 1欧拉公式与虚数表示 2定义式 n及其无限化 3级数表示 4超越数作为非高阶多项式的根 5e的变...

  • Python常用库和命令速查

    Python虽然不是计算效率最高的编程语言,但是绝对是最全能的编程语言!没有之一!可以做计算、精美可视化数据、网络...

  • Math对象

    Math常数 Math.E:常数e。Math.LN2:2 的自然对数。Math.LN10:10 的自然对数。Mat...

  • js笔记---Math对象

    Math对象提供以下一些只读的数学常数。E:常数e。LN2: 2的自然对数。LN10: 10的自然对数。LOG2E...

网友评论

    本文标题:蒙特卡洛法计算自然常数e——python编程及可视化

    本文链接:https://www.haomeiwen.com/subject/jicfmqtx.html