【16】 数学建模

您所在的位置:网站首页 简述常用的数学建模方法及其典型应用 【16】 数学建模

【16】 数学建模

#【16】 数学建模 | 来源: 网络整理| 查看: 265

一、原理介绍 1.1 定义

蒙特卡罗方法又称统计模拟法,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的⽅法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。

1.2 提出

蒙特卡罗方法于20世纪40年代美国在第二次世界大战中研制原子弹的“曼哈顿计划”计划的成员S.M.乌拉姆和J. 冯·诺伊曼首先提出。数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘⾊彩。在这之前,蒙特卡罗方法就已经存在。1777年,法国Buffon提出用投针实验的方法求圆周率,这被认为是蒙特卡罗方法的起源。

1.3 原理

由大数定理可知,当样本容量足够大时,事件的发生频率即为其概率。

1.4 讨论 1.4.1 蒙特卡洛是一种算法吗?

答:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。蒙特卡罗准确的来说只是一种思想,或者是是一种方法。如果我们所求解的问题与概率模型有一定的关联,那么我们就可以使用计算机多次模拟事件发生,以获得问题的近似解。从数学建模⻆度来看,大家千万别认为蒙特卡罗有一个通用的代码。每个问题对应的代码都是不同的,我们分析清楚题目后,就要自己进行编写适用于这个题目的代码。

1.4.2 蒙特卡洛与计算机仿真的关系

答:计算机仿真(模拟)早期称为蒙特卡罗方法,是一门利用随机数实验求解随机问题的方法,其主要应用在复杂问题的数值模拟上。但随着计算机的性能的提升以及各种新兴产业的发展,目前计算机仿真涉及的内容要广得多,例如过程控制、动画仿真、图像静态模拟等都属于计算机仿真的应用(例如用计算机模拟原子弹爆炸的过程、使用计算机生成特效大片等)。在数学建模中,我们不用刻意的去区分两者的区别,大家只需要知道如何使用计算机对问题进行模拟即可。

1.4.3 蒙特卡洛与枚举法

枚举法是我们中学就接触的算法,就是把所有可能发生情况都考虑进去,最终计算出来一个确定结果。这就与蒙特卡罗方法的想法很类似,蒙特卡罗法模拟的次数越多,计算的就越准确。由于生活中有许多事件发生的结果都有无限种可能(例如一个连续分布的取值),因此我们不可能枚举出所有的结果,这时候就只能通过蒙特卡罗模拟,将一个不确定性的问题转化成很多个确定性问题,并得到一个近似解,因此蒙特卡罗算法也可以看成是枚举法的一种变异。

二、案例之布丰投针实验

在这里插入图片描述 注意:当针和平行线相交时有,针的中点 x x x与针与直线的夹角 φ \varphi φ满足 x ⩽ l 2 sin ⁡ φ x\leqslant \frac{l}{2}\sin \varphi x⩽2l​sinφ

具体代码实现:

%% 蒙特卡罗用于布丰投针实验 %% (1)预备知识 % rand(m,n)函数产生由在[0,1]之间均匀分布的随机数组成的m行n列的矩阵(或称为数组)。 rand(5,4) % 0.8300 0.1048 0.2396 0.4398 % 0.5663 0.1196 0.8559 0.5817 % 0.9281 0.2574 0.3013 0.9355 % 0.3910 0.3173 0.2108 0.1676 % 0.3645 0.4372 0.8819 0.9232 rand(3) % 若只给一个输入,则会生成一个方阵 % 0.1709 0.4951 0.0541 % 0.9374 0.8500 0.6155 % 0.2400 0.3156 0.5741 % a + rand(m,n)*(b-a) 可以输出在[a,b]之间均匀分布的随机数组成的m行n列的矩阵。 -2 + rand(3,2) * (2 - (-2)) % 输出在[-2,2]之间均匀分布的随机数组成的3行2列的矩阵。 % -1.2743 0.6013 % -1.3084 0.0766 % 1.5075 0.7563 % a + rand(m,n)*(b-a)等价于unifrnd(a,b,m,n) unifrnd(-2,2,3,2) %% (2)代码部分 l = 0.520; % 针的长度(任意给的) a = 1.314; % 平行线的宽度(大于针的长度l即可) n = 1000000; % 做n次投针试验,n越大求出来的pi越准确 m = 0; % 记录针与平行线相交的次数 x = rand(1, n) * a / 2 ; % 在[0, a/2]内服从均匀分布随机产生n个数, x中每一个元素表示针的中点和最近的一条平行线的距离 phi = rand(1, n) * pi; % 在[0, pi]内服从均匀分布随机产生n个数,phi中的每一个元素表示针和最近的一条平行线的夹角 % axis([0,pi, 0,a/2]); box on; % 画一个坐标轴的框架,x轴位于0-pi,y轴位于0-a/2, 并打开图形的边框 for i=1:n % 开始循环,依次看每根针是否和直线相交 if x(i)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3