在圆内生成随机点的算法,其中刻有一个正方形,不能正常工作

时间:2017-11-17 18:42:08

标签: matlab probability

我尝试确定点在一个刻在半径为1的圆的正方形内的概率。首先,我在我的圆圈内生成我的N个随机点,然后如果Ox和Oy坐标都是,则检查每个点小于宽度的一半,分别是高度。我知道答案越接近2 / Pi但我得到的数字更接近0,78 ..这是不好的。

`close all;clear all;clc;
%length of width and height
a=sqrt(2);
%radius of circle (it is 1)
raza=a*sqrt(2)/2; 
%total number of points
N=1000;

%Here I generate my N random numbers inside the circle
theta = 2*pi*rand(1,N);
r = rand(1,N);
x = r.*cos(theta);
y = r.*sin(theta);

%here I count how many point are inside the square that is inscribed in the 
%circle
cont = 0;
for i=1:N
    if x(i) >= -a/2 && x(i) <= a/2 && y(i) >= -a/2 && y(i) <= a/2
        cont = cont + 1; 
    end
end
%Here i get sth closer to 0,78...not 2/Pi(0,63..)
cont/N

我是否以错误的方式生成积分,还是我不正确地计算广场内的积分?

`

1 个答案:

答案 0 :(得分:0)

我看到有一个简单的错误,请参阅以下公式

square_area/circle_area = number_of_total/number_of_inside_circle

所以

(2*R)^2/(pi*R^2) = n_total/n_Indide  --> 4*R^2/pi*R^2=n/cont --> 4/pi = n/con 

所以,如果您计算cont/N,那么您尝试根据上面的公式计算pi/4并且&#39; pi / 4 is equal to 0.7854`以便您的结束

注意:如果您想计算pi,那么您可以写4*cont/N

但是如果你想总结一下你的程序,可以像下面这样写一下

n=2000;
x=2*rand(1,n)-1;
y=2*rand(1,n)-1;
inside_index = find(sqrt(x.^2+y.^2)<1); % find index of those point that are inside the circle
PI = 4*numel(inside_index)/n

给了你

PI =

  3.1540