我尝试确定点在一个刻在半径为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
我是否以错误的方式生成积分,还是我不正确地计算广场内的积分?
`
答案 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