MATLAB中估计pi的Monte Carlo方法

时间:2015-09-13 19:35:26

标签: matlab

我想使用蒙特卡罗方法估计pi的值,这是,随机数生成器可用于估计pi的值。所以我找到了以下代码

n=input('Number of points: ');
x=rand(n,1);
y=rand(n,1);
figure('color','white');
hold all

axis square;
x1=x-0.5;
y1=y-0.5; %cirle has centre at (0.5,0.5)
r=x1.^2+y1.^2;
m=0;   %Number of points inside circle
for i=1:n
    if r(i)<=0.25
        m=m+1;
        plot(x(i),y(i),'b.');
    else

        plot(x(i),y(i),'r.');
    end
end
m/(0.25*n)

问题是如何修改它,它给我一个长度为2的方格和一个半径为1的圆?

到目前为止,我已经做到了这一点,但它只给了我想要的四分之一:

n=input('Number of points: ');
x=rand(n,1);
y=rand(n,1);
figure('color','white');
hold all

axis square;
axis ([0 2 0 2])
x1=x-1;
y1=y-1; %cirle has centre at (0.5,0.5)
r=x1.^2+y1.^2;
m=0;   %Number of points inside circle
for i=1:n
    if r(i)<=1
        m=m+1;
        plot(x(i),y(i),'b.');
    else

        plot(x(i),y(i),'r.');
    end
end
m/(0.25*n)

注意:方法如下:在长度为2的正方形中生成随机点,并计算这些点在单位半径圆中的哪个比例恰好与正方形拟合。这个比例将是因此,这个圆圈的面积到广场的面积。

1 个答案:

答案 0 :(得分:1)

试试

n=input('Number of points: ');
x=2*rand(n,1);
y=2*rand(n,1);
figure('color','white');
hold all

axis square;
x1=x-1;
y1=y-1; %cirle has centre at (1,1)
r=x1.^2+y1.^2;
m=0;   %Number of points inside circle

ii = r<=1;
m = sum(ii);
plot(x(ii), y(ii), '.b');
plot(x(~ii), y(~ii), '.r');

m/(0.25*n)