蒙特卡洛原理及实例(附Matlab代码)

在线求帮请分析下,蒙特卡洛原理及实例(附Matlab代码)
最新回答
不问归期

2024-12-02 00:04:24

本文重点探讨以下问题:(1)什么是蒙特卡洛法?(2)蒙特卡洛法能够解决什么问题?(3)蒙特卡洛法的优势是什么?或者说为什么要使用蒙特卡洛法?

一、理论基础

1.1 伯努利大数定理
进行N次独立重复实验,随着试验次数的增大,事件A发生的频率[公式]依概率收敛为事件A发生的概率[公式];

1.2 辛钦大数定理
一个独立同分布(iid)的随机变量序列[公式],具有数学期望[公式],从随机序列中抽样一部分样本记作集合[公式],则有[公式],即随着样本量[公式]的增大,样本均值收敛为总体均值。

1.3 切比雪夫大数定理
设随机变量序列[公式]两两互不相关,且期望存在[公式],方差存在且有共同有界上限,即: [公式]则随着样本容量的增加,样本平均数收敛于总体平均数。

1.4 三者区别和联系
总结来看,大数定理将属于数理统计的平均值和属于概率论的期望联系在了一起。

二、蒙特卡洛法

2.1 蒙特卡洛的起源
蒙特卡洛是摩纳哥的著名赌城,该法为表明其随机抽样的本质而命名。

蒙特卡洛法(Monte Carlo Method)也称统计模拟法、统计实验法,是把概率现象作为研究对象的数值模拟方法,是按抽样调查法求取统计值推定未知特性量的计算方法。该方法通过构造一个和系统相似的概率模型,在数字计算机上进行随机试验来模拟系统的随机特性,故适用于对离散系统进行仿真实验,特别适用于一些解析法难以求解甚至无法求解的问题。

蒙特卡洛并不是什么高深的理论,只是一种基于大数定理的方法或策略。 它是用抽样后的样本发生的频率来估计概率,所以它求得的是近似解,而不是精确解,随着样本数的增多,近似解越接近精确解。蒙特卡洛方法本身不是优化算法,与遗传算法、粒子群算法等优化算法有着本质区别。

蒙特卡洛法的理论基础是概率统计理论;
蒙特卡洛法的主要手段/实现方法是随即抽样、统计实验。

2.2 蒙特卡洛的解题思路
蒙特卡洛的基本步骤:
总之,蒙特卡洛方法有三个主要步骤:构造概率模型;利用概率分布抽样;建立各种估计量。

对于可以用解析法求解的简单的问题,蒙特卡洛是一个“笨办法”,但对于许多难以求解的问题,蒙特卡洛方法是有效甚至是唯一可行的办法。

三、几个小栗子

3.1 求解定积分
[公式]

3.1.1 解析法
[公式]

3.1.2 蒙特卡洛法
蒙特卡洛法求定积分有两种方法:随机投点法、期望法(或称平均值法),本文重点讲解随机投点法。随机投点法求解定积分的思路是:该题[公式],因此在[公式]的矩形区间内均匀撒点,统计落在曲线下方的点的个数占比,再乘以矩形区间面积就是定积分的值。注意:这个例子的曲线完全位于[公式]坐标轴上方,所以不需要考虑正负号,如果面积有正有负,需要先划分区域,分区计算再求和!

定积分的本质是求和横坐标围成的有符号面积,因此蒙特卡洛方法有一个弊端:只能求在定积分区间函数值为恒非负或恒非正的函数的定积分,如果积分区间有正有负,那么只能将区间拆分成多个子区间分别进行计算再相加!

运行结果:
从上面运行结果可以发现,随着样本点数的增加,近似解越来越接近真实的解析解。

3.2 求解六边形面积
图形是由六条直线围成的六边形,六条直线分别为:
[公式]

3.2.1 解析法
这个图形是由上下两个梯形构成的,因此它的面积为:
[公式]

3.2.2 蒙特卡洛法
使用蒙特卡洛法求解不规则面积的思路是:不规则图案一定位于某个规则矩形内,矩形的面积很容易求得,点位于不规则形状内的概率为[公式]。因此,重复往矩形范围内撒点,那么当样本点数足够大时,撒入不规则图案内的点数占比(频率)约等于点落入不规则形状内的概率。即:
[公式]

不规则图形区间[公式]可用如下数学式表示:
[公式]

即蒙特卡洛法的“击中”区间。因此有,蒙特卡洛法的Matlab代码如下:
运行结果:
有人会有疑问了,上面两个例子都可以通过规则的定积分公式、规则图形面积计算公式求得,那为什么还需要用蒙特卡洛法呢?蒙特卡洛法看起来并没有解析解求解过程简单,那么蒙特卡洛法存在的意义是什么?

一个问题解决这个疑问:如果遇见没有面积计算公式的不规则图形,它的面积该怎么计算?有人要说了,用定积分啊!那么我再问,如果围成这个不规则图形的曲线函数不可积呢?那解析解就无法计算了,这时候只能用蒙特卡洛法求解近似解了。

3.3 求解不规则图形面积
图形是由三条曲线围成的不规则图形,三条曲线分别为:
[公式]
如下,下面两张图分别是三个函数的曲线和其围成的面积。

对围成区域[公式]的面积进行如下建模:
[公式]
即:
[公式]
如果数学功底比较好的朋友,可以一眼看出来这三个函数都是不可积函数。此例无法用解析法求解,下面重点介绍蒙特卡洛法的应用。

蒙特卡洛法的思路是:在[公式]的矩形区间内均匀撒点,统计落在区域内的点的个数占比,再乘以矩形区间面积就是围成图形的面积近似值,样本点个数越大,近似值越接近真实值。

围成区域空间[公式],即蒙特卡洛法的“击中”区间。因此有,蒙特卡洛法的Matlab代码如下:
运行结果:

四、总结
蒙特卡洛法不是一种优化算法,是基于大数定理的一种离散化的解题策略,尤其适用于问题的解析解难以计算或者甚至没有解析解时。

(本文完整的pdf请关注公众号“张张学算法”,并回复“011”获取~)