蒙特卡洛算法是以概率和统计的理论、方法为基础的一种计算方法,将所求解的问题同一定的概率模型相联系;用电子计算机实现统计模拟和抽样,以获得问题的近似解,故又称统计模拟法或统计实验法。
蒙特卡洛算法:蒙特卡洛是美国摩纳哥的一个城市,以赌博闻名于世。蒙特卡洛算法借用这一城市的名称是为了象征性的表明该方法的概率统计特点。蒙特卡洛算法作为一种计算方法,是由S.M.乌拉姆和J.冯诺依曼在20世纪40年代中叶为研制核武器的需要而提出的。
蒙特卡洛方法的基本思想虽然早已被人提出,例如在古典概率中的著名法国数学家布丰利用投针求圆周率Pi值,却很少被使用。直到电子计算机出现后,使得人们可以通过电子计算机来模拟巨大数目的随机试验过程,使得蒙特卡洛方法得到广泛地应用。
用蒙特卡洛投点法计算Pi的值;
在一个边长为a的正方形内一均匀概率随机投点,该点落在此正方形的内切圆中的概率即为内切圆与正方形的面积比值,即:Pi * (a / 2)^2 : a^2 = Pi / 4。
%总的实验次数
n = input('请输入n:');
%落在圆中点的次数
m = 0;
%使用的圆的半径
a = 2;
%循环实验
for i = 1:n
x = rand * a / 2;
y = rand * a / 2;
if (x^2 + y^2 <= (a/2)^2)
m = m + 1;
end
end
%显示结果
fprintf('当总实验次数n = %d时计算出来的圆周率:Pi = %d\n',n, 4 * m / n);
从实验结果可以分析得出:
1.随着投点的次数增加,圆周率Pi计算的准确率在增加;
2.但当次数达到一定规模时,准确率精度增加在减缓,其原因是生成的随机数是伪随机的,这也是蒙特卡洛算法达不到祖冲之求圆周率精度的内在原因;
3.同时在进行两次的1亿次投点中也可以发现,对于相同的投点数由于实验本身的随机性每次的实验结果是不同的。