我想使用蒙特卡罗方法估计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的正方形中生成随机点,并计算这些点在单位半径圆中的哪个比例恰好与正方形拟合。这个比例将是因此,这个圆圈的面积到广场的面积。
答案 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)