使用 Python 模拟蒙特卡洛实验

简介: 使用 Python 模拟蒙特卡洛实验

使用 Python 模拟蒙特卡洛实验
蒙特卡洛方法是一种使用随机采样来解决数学问题的统计学技术。它通常用于计算复杂系统的概率、优化问题和物理模拟等领域。在这篇文章中,我们将通过一个经典的问题——估算圆周率 (π) 的值,来演示如何使用 Python 进行蒙特卡洛实验。

蒙特卡洛估算 π 的基本原理
蒙特卡洛方法可以用来估算 π 的值。假设我们在一个边长为 2 的正方形内绘制一个单位圆(半径为 1)。该正方形的面积是 (2 \times 2 = 4),而圆的面积是 (\pi \times r^2 = \pi)。我们可以通过以下步骤来估算 π:

  1. 随机生成许多点,这些点均匀分布在正方形内。
  2. 计算有多少个点落在单位圆内。
  3. 通过比率来估算 π:[ \pi \approx \frac{\text{圆内的点数}}{\text{总点数}} \times 4 ]

代码实现
下面是使用 Python 实现上述蒙特卡洛估算 π 的简单代码:

import random
import matplotlib.pyplot as plt

def monte_carlo_pi(num_samples):
    inside_circle = 0
    x_inside, y_inside = [], []
    x_outside, y_outside = [], []

    for _ in range(num_samples):
        # 生成随机点 (x, y)
        x, y = random.uniform(-1, 1), random.uniform(-1, 1)

        # 判断点是否在单位圆内
        if x**2 + y**2 <= 1:
            inside_circle += 1
            x_inside.append(x)
            y_inside.append(y)
        else:
            x_outside.append(x)
            y_outside.append(y)

    # 计算 π 的估算值
    pi_estimate = (inside_circle / num_samples) * 4

    return pi_estimate, x_inside, y_inside, x_outside, y_outside

# 设定样本数量并执行实验
num_samples = 10000
pi_value, x_in, y_in, x_out, y_out = monte_carlo_pi(num_samples)

print(f"估算的 π 值: {pi_value}")

# 绘制结果
plt.figure(figsize=(8, 8))
plt.scatter(x_in, y_in, color='blue', s=1)  # 圆内的点
plt.scatter(x_out, y_out, color='red', s=1)  # 圆外的点
plt.title('蒙特卡洛方法估算 π')
plt.xlabel('X')
plt.ylabel('Y')
plt.xlim(-1, 1)
plt.ylim(-1, 1)
plt.gca().set_aspect('equal')  # 设置坐标轴比例相等
plt.grid()
plt.axhline(0, color='black',linewidth=0.5, ls='--')
plt.axvline(0, color='black',linewidth=0.5, ls='--')
plt.show()

代码解读

  1. 导入库:我们使用 random 来生成随机数,并使用 matplotlib.pyplot 绘制图形。
  2. 函数定义:monte_carlo_pi 函数接受样本数量作为参数,并返回 π 的估算值以及圆内外的点的坐标。
  3. 随机点生成:在 ([-1, 1]) 的范围内生成随机点,并根据它们的坐标判断它们是否在单位圆内。
  4. π 的估算:通过 inside_circle 的计数与总点数的比率来估算 π。
  5. 结果可视化:将落在圆内的点用蓝色表示,圆外的点用红色表示,以便直观查看蒙特卡洛实验的效果。

运行结果
当你运行以上代码时,你会看到控制台输出估算的 π 值,同时展示一幅包含蓝色和红色点的图像。这些点分别代表了在单位圆内和圆外随机生成的点。随着样本数量的增加,估算值会逐渐趋近于真实的 π 值(约 3.14159)。

应用与拓展
蒙特卡洛方法不仅可以用于估算 π,还广泛应用于金融建模、物理学、工程设计以及其他需要处理不确定性的问题。通过改变模型或算法,您可以使用蒙特卡洛方法解决多种复杂问题。

总结来说,蒙特卡洛方法是一种强大且灵活的工具,通过随机采样来处理复杂的数学和现实问题,使得其在科学研究和工业应用中都占据重要位置。希望本文对你理解和应用蒙特卡洛方法有所帮助!

欢迎点赞、关注、转发!!!

相关文章
|
17天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
65 15
|
6月前
|
数据处理 索引 Python
【Python学习篇】Python实验小练习——文件操作(十一)
【Python学习篇】Python实验小练习——文件操作(十一)
77 1
|
6月前
|
存储 缓存 算法
【Python学习篇】Python实验小练习——循环结构(八)
【Python学习篇】Python实验小练习——循环结构(八)
49 1
|
6月前
|
存储 算法 数据安全/隐私保护
【Python学习篇】Python实验小练习——高级数据结构(五)
【Python学习篇】Python实验小练习——高级数据结构(五)
79 1
|
7月前
|
存储 数据采集 数据挖掘
Python数据分析实验一:Python数据采集与存储
Python数据分析实验一:Python数据采集与存储
234 1
|
7月前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
126 1
|
3月前
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
113 4
|
5月前
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
|
6月前
|
存储 Python Windows
【Python学习篇】Python实验小练习——函数(十)
【Python学习篇】Python实验小练习——函数(十)
42 1
|
6月前
|
算法 Python Windows
【Python学习篇】Python实验小练习——选择结构(七)
【Python学习篇】Python实验小练习——选择结构(七)
156 1