0%

数模-蒙特卡罗算法

蒙特卡罗算法

概念

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

基本思想

  • 当所求问题的解是某个事件的概率,或是某个随机变量的数学期望,或是与概率,数学期望有关的量时,通过某种试验的方法,得出该事件发生的概率或该随机变量若干个具体观察值的算术平均值,通过它得到问题的解。
  • 当随机变量的取值仅为1或0时,它的数学期望就是某个事件的概率。或者说,某种事件的概率也是随机变量(仅取值为1或0)的数学期望。

优点

  1. 能够比较逼真地描述具有随机性质的事物的特点及物理实验过程
  2. 受几何条件限制小
  3. 收敛速度与问题的维数无关
  4. 具有同时计算多个方案与多个未知量的能力
  5. 误差容易确定
  6. 程序结构简单,易于实现

缺点

  1. 收敛速度慢
  2. 误差具有概率性
  3. 在粒子输运问题中,计算结果与系统大小有关

主要应用范围

  • 粒子输运问题(实验物理,反应堆物理,高能物理)
  • 统计物理
  • 典型数学问题
  • 真空技术
  • 激光技术以及医学
  • 生物
  • 探矿

matlab实现

以求积分为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
% 蒙特卡罗求积分
% x^2+cos(x)在[0,1]上求积分
a=0;
b=1;
n=20000;
t=rand(1,n);
x=a+(b-a)*t;
f=x.^2+cos(x);
s=sum(f);
s=s*(b-a)/n

% 画图
x=-0.5:0.01:1.5;
y=x.^2+cos(x);
plot(x,y);
axis([-0.5 1.5 0 2.5])
hold on;
x1 = 0:0.01:1;
y1 = x1.^2+cos(x1);
area(x1,y1);
grid on;