当前位置: 首页 > news >正文

数学建模——蒙特卡罗法

主成分分析实在是有点难啊,萌新看不懂,过两天研究一下再说

蒙特卡罗法的基本概念

蒙特卡罗法(Monte Carlo Method)是一种基于随机采样的数值计算方法,通过重复随机抽样来近似求解数学、物理或工程问题。其核心思想是利用概率统计理论,通过大量实验结果的统计平均来逼近目标值。

核心是:用大量随机数或者统计大量数据来实现某一个目标,原理就是大数定理,当样本容量足够大时发生频率即为其概率

 数学建模没有专门的蒙特卡罗算法,要根据实际需求写代码

常见的蒙特卡罗算法:

示例:

1.计算圆周率π

  1. 在单位正方形内随机投点,坐标为((x, y)),(x, y \in [0,1])
  2. 统计落在单位圆内的点数量 (M)(满足(x^2 + y^2 \leq 1))。
  3. 圆周率估计值为:
    [ \pi \approx 4 \cdot \frac{M}{N} ]
    其中 (N) 为总投点数。
  4. 代码
    clc; clear;
    % 参数初始化:投放10000个点,圆半径为1,圆心坐标(1,1)
    % 初始时还未投放点,有0个点在圆内
    p = 10000;
    r = 1;
    x0 = 1;
    y0 = 1;
    n = 0;hold on; % 保持绘图窗口,多次绘图
    for i = 1:p % 对于要投放的总共p个点% rand函数产生在(0,1)之间的随机数px = rand * 2; % 随机生成该点的横坐标py = rand * 2; % 随机生成该点的纵坐标% 若该点在圆内,则颜色设为蓝色,变量n加一;在圆外则设为红色if (px - 1)^2 + (py - 1)^2 < 1 % 横纵坐标的平方和小于半径,则在圆内plot(px, py, '.', 'Color', 'b');n = n + 1;elseplot(px, py, '.', 'Color', 'r');end
    endaxis equal; % 绘图时横纵坐标单位长度相同,便于观察圆
    s = (n / p) * 4;
    pi0 = s;
  5. 这里补充一个为什么用hold on以及随机数生成

1. hold on

 在 MATLAB 中,hold on 用于保留当前图形窗口中的已有图形内容,使后续绘图命令不会覆盖已有图形。默认情况下,每次调用绘图函数(如 plotscatter)会清除之前的图形并重新绘制。 

使用场景

  • 叠加绘图:在同一坐标系中绘制多条曲线或图形时,避免覆盖之前的内容。
  • 对比数据:将多组数据绘制在同一图中,便于直观对比趋势或分布。

2. 随机数生成

生成均匀分布的随机数

使用 rand 函数生成 [0, 1) 区间内均匀分布的随机数。

  • 生成单个随机数:r = rand
  • 生成 m×n 矩阵随机数:R = rand(m, n)
  • 生成指定区间 [a, b] 的均匀随机数:R = a + (b-a)*rand(m, n)

生成正态分布的随机数

使用 randn 函数生成标准正态分布(均值为0,标准差为1)的随机数。

  • 生成单个随机数:r = randn
  • 生成 m×n 矩阵随机数:R = randn(m, n)
  • 生成自定义参数的正态随机数(均值 mu,标准差 sigma):
    R = mu + sigma*randn(m, n)

生成随机整数

使用 randi 函数生成指定范围内的随机整数。

  • 生成 [1, k] 的随机整数:r = randi(k)
  • 生成 [a, b] 的随机整数矩阵:R = randi([a, b], m, n)

 

2.投针实验

投针实验(Buffon's Needle Experiment)是18世纪法国数学家布丰(Georges-Louis Leclerc, Comte de Buffon)提出的概率问题,用于通过物理实验估算圆周率π的值。其核心思想是通过随机投掷针到平行线平面上,利用几何概率计算针与线相交的概率,进而推导π的近似值。

 假设平面上有一组间距为d的平行线,针的长度为l(要求l ≤ d)。随机投掷针时,针与任一条平行线相交的概率P与π相关,公式为:
[ P = \frac{2l}{\pi d} ]
通过大量实验统计相交次数N与总投掷次数T的比值(即频率),可近似概率P ≈ N/T,从而反推π的估计值:
[ \pi \approx \frac{2l \cdot T}{d \cdot N} ]

3.三门问题

三门问题(Monty Hall Problem)源自美国电视节目《Let's Make a Deal》,由主持人Monty Hall命名。问题描述如下:

  • 参与者面前有三扇关闭的门,背后分别是一辆车和两只山羊。
  • 参与者选择一扇门(如门1),主持人(知道门后情况)会打开另一扇有山羊的门(如门3),并询问是否改选门2。
  • 问题的核心是:坚持原选择或改选,哪种策略赢得汽车的概率更高?

经典解答

改选策略的胜率为2/3,坚持原选择的胜率为1/3

  • 初始选择正确的概率为1/3,此时坚持获胜,改选失败。
  • 初始选择错误的概率为2/3(车在其他两扇门后),主持人会排除错误选项,改选必然获胜。
n = 100000;          % n 代表蒙特卡罗模拟重复次数
a = 0;               % a 表示不改变主意时能赢得汽车的次数
b = 0;               % b 表示改变主意时能赢得汽车的次数
c = 0;               % c 表示没有获奖的次数for i = 1:n          % 开始模拟 n 次x = randi([1,3]); % 汽车在门 x 后y = randi([1,3]); % 参赛者最初选的 ychange = randi([0,1]); % 0 不改变,1 改变if x == y% 初始门就是汽车门if change == 0a = a + 1;   % 不改变则赢elsec = c + 1;   % 改变则输endelse% 初始门不是汽车门if change == 1b = b + 1;   % 改变则赢elsec = c + 1;   % 不改变则输endend
enddisp(['不改变主意时的获奖概率:', num2str(a/n)]);
disp(['改变主意时的获奖概率:',   num2str(b/n)]);
disp(['未获奖的概率:',           num2str(c/n)]);

http://www.dtcms.com/a/302928.html

相关文章:

  • 【优秀案例源码】劳务人力招聘平台系统
  • 深入理解单点登录(SSO
  • 第二十一天(shell俗称“脚本”的初学)练习答案见下一章
  • 完整复现cacti的RCE
  • 【C++进阶】---- 二叉搜索树
  • Pycaita二次开发基础代码解析:点距测量、对象层级关系与选择机制深度剖析
  • c++内联函数的执行原理,内联函数和宏函数的区别
  • Anaconda安装时的几个操作
  • Python动态规划:从基础到高阶优化的全面指南(2)
  • 洛谷 P1427 小鱼的数字游戏
  • 【Open3D】入门处理与实战之可视化及相关基本操作
  • 负载均衡算法中的加权随机算法
  • 数论1.01
  • DAY-13 数组与指针
  • Linux应用程序的安装与管理
  • React入门
  • Docker笔记(基本命令、挂载本地gpu、Dockerfile文件配置、数据挂载、docker换源)
  • claude code
  • OSPF路由协议(上)
  • LangGraph实战:MCP + SSE实现远程调用MCP Server
  • 扩展和插件功能
  • 解决Echarts设置宽度为100%发现宽度变为100px的问题
  • 5 分钟上手 Firecrawl
  • [免费]【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)【论文+源码+SQL脚本】
  • Android中PID与UID的区别和联系(2)
  • Effective C++ 条款07:为多态基类声明virtual析构函数
  • 《深入理解priority_queue:的使用与模拟实现》
  • 教资科三【信息技术】— 学科知识: 第四章(计算机网络技术)
  • 如何在FastAPI中玩转Schema版本管理和灰度发布?
  • 【深度学习】SOFT Top-k:用最优传输解锁可微的 Top-k 操作