蒙特卡洛模拟(求圆周率)

一、蒙特卡洛模拟简介

蒙特卡洛法是经过大量事件的统计结果来实现一些确定性问题的计算。
使用蒙特卡洛法必须使用计算机生成相关分布的随机数。

二、实例:蒙特卡洛求圆周率

(一)理论

易知:半径为 r r r 的圆的外接矩形为一个边长为 2 r 2r 2r 的正方形。记正方形面积为 S 0 = 2 r ∗ 2 r = 4 r 2 S_0 = 2r*2r=4r^2 S0=2r2r=4r2,记圆的面积 S 1 = π r 2 S_1 = \pi r^2 S1=πr2
假设我们有N个小球,随机投入这个正方形内。由古典概率模型知:小球落入圆内的概率为 P = S 0 S 1 = π 4 P =\frac{S_0}{S1} = \frac{\pi}{4} P=S1S0=4π
蒙特卡洛模拟(求圆周率)_第1张图片
由此:我们以单位圆为例,编程模拟以上过程,即可求得 π \pi π

(二)Matlab代码

clc;
clear;


%% 先画一个单位圆
alpha = 0:0.01:2*pi;    
X = sin(alpha(:));      
Y = cos(alpha(:));      
hold on;
plot(X, Y);             % 画圆
daspect([1 1 1]);       % 图片等比例

%% 蒙特卡洛模拟圆周率
N = 1000;
n = 0;

X2 = [];
Y2 = [];

for i=1:N
    x = 2*rand()-1;     % 产生
    y = 2*rand()-1;
    scatter(x, y,'.');
    if mod(i, 100) == 1
        str = num2str(n/i*4);   % pi = n/i*4
        title(str);
    end
    pause(0.00001);         %0.00001 秒投一个点
    X2(i) = x;
    Y2(i) = y;
    if x*x + y*y < 1        % 如果点在圆内
        n = n+1;
    end
end

(三)动态显示随机过程

蒙特卡洛模拟(求圆周率)_第2张图片

你可能感兴趣的:(数学建模,matlab,开发语言,蒙特卡洛模拟)