How to| 进行蒙特卡洛模拟
蒙特卡洛方法利用随机生成的数字或事件来模拟随机过程,并对复杂的结果进行估计. 例如,它可用于金融系统的建模,通信网络的模拟,以及在物理学中计算高维积分等. 蒙特卡洛模拟可以利用 Wolfram 语言内置的随机数生成函数直接构建.
随机数序列是一个非常简单的蒙特卡洛模拟. 例如,从均值为0的一个正态分布独立生成的随机数列表可以模拟白噪声的进程.
将 RandomVariate 与 NormalDistribution 联合使用,生成一个数值序列,序列由20个服从均值为0、标准偏差为1的正态分布的数值组成:
用 ListPlot 对数据做图:
使用 Accumulate 将数据按依次叠加,然后用 ListLinePlot 对结果做图:
下述定义将前面的指令放在一起,您可以用于模拟多个随机漫步并分析它们的性质.
定义一个函数 randomWalk,它可生成长度为 n 的随机漫步:
这里,用 Table 创建五个长度均为100的随机漫步,然后用 ListLinePlot 实现它们的可视化:
现在,生成1000个长度均为100的游走. 由于不必看到输出,因此用一个分号(;)抑制其输出:
现在,您可以对随机漫步的各个方面进行描述性统计的计算. 这里分析的是每个游走的最终位置.
使用 [[ ]](Part 函数的简写形式)得到每个随机漫步的最终数据点:
蒙特卡洛模拟非常适用于系统性质非常复杂的情形. 在进行贝叶斯分析时,您往往希望将分布混合,两种分布的参数前后相继生成一个二元分布. 由于个体分布是相关联的,点必须迭代生成,并插入另一个分布中,从而从二元分布中抽样.
这种混合类型称作吉布斯抽样器. 在一个迭代周期后,所产生的点将将接近混合分布. 迭代周期被称作预烧期(Burn-In Period).
比如,您可能有一个均值已知的正态分布,但标准偏差未知. 但您知道标准偏差服从一种 β 分布,该 β 分布的一个形状参数已知,而另一个形状参数与均值已知的正态分布相关.
定义一个函数,生成该 β 分布的随机数. β 分布的第二个形状参数将是一个正态变量的绝对值:
可以对二元分布的点进行模拟,方法是首先选择正态标准偏差的开始值,然后按序产生正态和 β 分布的随机数. 正态变量利用正态标准偏差的开始值生成. 然后将该正态变量作为 β 分布的未知形状参数,从而产生一个 β 变量. 再然后将该 β 变量用作新正态分布的未知标准偏差,依次类推. 该过程进行一定次数的迭代后,最终的正态和 β 变量是模拟点的坐标.
以标准偏差.5作为开始值,并使用1000次迭代作为预烧期,产生500个点:
用 ListPlot 作出最终所得到的点的视图:
用 Histogram3D 实现点的密度的可视化:
用蒙特卡洛方法进行模拟的其它例子包括优化和高维迭代. NMinimize 与 NIntegrate 有使用这些技术进行优化和数值积分的方法.