注意,前两大步骤还可以继续细分,例如某些教科书上的五大步骤就是将此处的前两步细分成四步。
十三、最简单的例子
举个例子
计算从
函数从0到2的定积分值
。638905609893065。
数学方法:我们已知的原函数是,那么定积分值就是:计算这个数值可以在Matlab中输入代码:exp2exp0上面得到的值是此不定积分的真实值。
常规数值积分:在区间内取N个点,计算各个点上的函数值,然后用函数值乘以每个区间宽度,最后相加。Matlab代码:N100xli
space02Nsumexpx2N试着调大N的值,你会发现,最后的结果将更接近真实值。Mo
teCarlo数值积分法:在内随机取N个点,计算各个点上的函数值,最后求这些函数值的平均值再乘以2(为何要乘以2在后面小节详细讲)。看Matlab代码:N100xu
ifr
d02N1mea
2expx同样的,通过增大N,这种方法得到的结果也将越来越接近真实值。
解释
这个例子要求的积分形式是:
,还不完全是
形式,我们先做变
换,,这里是fx;12是ψx,它表示,在取值范围02区间内,x服从均匀分布。前一例子共三条语句,逐句解释如下:N100设定停止条件,共做N次Mo
teCarlo模拟。xu
ifr
d02N1按照02区间均匀分布概率密度对x随机抽样,共抽取N个xi。此句相当于第一个步骤中的前半部分。mea
2expx2expx作用是对每个xi计算fxi的值共可得到N个值,这个相当于第一个步骤后半部分;Mea
函数的作用是将所有的fxi加起来取平均值,相当于第二个步骤。
3
f这段代码中的停止条件隐含于N值设定中,它一次性生成N个x值,完成此次计算后整个程序就结束了。
十四、Mo
teCarlo方法的优点
对比前面常规数值积分和Mo
teCarlo数值积分代码,同样数量的N值也就意味这几乎相同的计算量常规数值积分结果的精确度要高于Mo
teCarlo数值积分的结果。那么,我们为何还需要用Mo
teCarlo来算数值积分呢?答案的关键在于,常规数值积分的精度直接取决于每个维度上取点数量,维度增加了,但是每个维度上要取的点却不能减少。在多重积分中,随着被积函数维度增加,需要计算的
函数值数量以指数速度递增。例如在一重积分
中,只要沿着x轴取N个点;
要达到相同大小的精确度,在s重积分s中,仍然需要在每个维度上取N个点,s个纬度的坐标相组合,共需要计算N个坐标对应的f函数值。取点越多,会占用计算机大量内存,也需要更长运算时间,最终导致这种计算方法不可行!Mo
teCarlo方法却不同,不管是积分有多少重,取N个点计算的结r