蒙特卡罗模拟
来源:互联网 发布:八皇后问题答案java 编辑:程序博客网 时间:2024/06/03 02:41
背景
随机模拟也可以叫做蒙特卡罗模拟(Monte Carlo Simulation)。这个方法的发展始于20世纪40年代,和原子 弹制造的曼哈顿计划密切相关,当时的几个大牛,包括乌拉姆、冯.诺依曼、费米、费曼、Nicholas Metropolis, 在美国洛斯阿拉莫斯国家实验室研究裂变物质的中子连锁反应的时候,开始使用统计模拟的方法 并在最早的计算机上进行编程实现。
均匀分布
随机模拟中有一个重要的问题就是给定一个概率分布p(x),我们如何在计算机中生成它的样本。一般而言均匀分 布 Uniform(0,1)的样本是相对容易生成的。 通过线性同余发生器可以生成伪随机数,我们用确定性算法生成 [0,1]之间的伪随机数序列后,这些序列的各种统计指标和均匀分布 Uniform(0,1) 的理论计算结果非常接近。 这样的伪随机序列就有比较好的统计性质,可以被当成真实的随机数使用。例如可以如下方式生成:
正太分布
利用获得的均匀分布样本,Box-Muller变换可以生成满足正太分布的样本。
Box-Muller 变换
如果随机变量
Matlab代码实现如下:
for i =1:10000 U1 = rand; U2 = rand; Z0 (i) = sqrt((-2)*log(U1))*cos(2 * pi * U2); Z1 (i) = sqrt((-2)*log(U1))*sin(2 * pi * U2);endsubplot(2,1,1); histfit(Z0) xlabel('Z0'); ylabel('出现的次数'); subplot(2,1,2); histfit(Z1) xlabel('Z1'); ylabel('出现的次数');
实验结果:
Monte Carlo数值积分
Monte Carlo 抽样计算随机变量的期望值是接下来内容的重点:
求解定积分
要求解
其中
例子
如果我们要求解定积分
matlab 代码
a = 1;b = 3;sum = 0;N =10000;for i=1:N s = a + (b-a) .* rand; p = 1 / (b-a); sum = sum + s*s / p;endsum/N
实验结果为:
ans = 8.6403
非常接近于精确解
- 蒙特卡罗模拟
- 蒙特卡罗模拟圆周率
- 蒙特卡罗随机模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟:
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 漫画解读软件开发模式
- 2017,业界最佳实践
- finereport破解并发数教程
- JS,JSON,NodeJS学习笔记
- finereport价格
- 蒙特卡罗模拟
- BZOJ3211 花神游历各国 【树状数组 + 并查集】
- hadoop安装问题---datanode无法启动
- finereport8.0破解jar
- python-快速使用urllib爬取网页(7-DebugLog)
- 程序员的五种不同寻常的特质
- finereport 破解版
- 云的安全 VS 云内的安全
- cad 2010 64位