Search code examples
performancematlabmontecarlo

Find area of two overlapping circles using monte carlo method


Actually i have two intersecting circles as specified in the figure

i want to find the area of each part separately using Monte carlo method in Matlab .

The code doesn't draw the rectangle or the circles correctly so i guess what is wrong is my calculation for the x and y and i am not much aware about the geometry equations for solving it so i need help about the equations.

enter image description here this is my code so far :

n=1000;
%supposing that a rectangle will contain both circles so :
% the mid point of the distance between 2 circles will be (0,6) 
% then by adding the radius of the left and right circles the total distance 
% will be 27 , 11 from the left and 16 from the right 
% width of rectangle = 24

x=27.*rand(n-1)-11;
y=24.*rand(n-1)+2;
count=0;

for i=1:n

if((x(i))^2+(y(i))^2<=25 && (x(i))^2+(y(i)-12)^2<=100)
count=count+1;        
    figure(2);
    plot(x(i),y(i),'b+')
    hold on

elseif(~(x(i))^2+(y(i))^2<=25 &&(x(i))^2+(y(i)-12)^2<=100)  
    figure(2);
    plot(x(i),y(i),'y+')
    hold on

else 
     figure(2);
    plot(x(i),y(i),'r+')

end

end

Solution

  • Here are the errors I found:

    x = 27*rand(n,1)-5
    y = 24*rand(n,1)-12
    

    The rectangle extents were incorrect, and if you use rand(n-1) will give you a (n-1) by (n-1) matrix.

    and

    first If:

    (x(i))^2+(y(i))^2<=25 && (x(i)-12)^2+(y(i))^2<=100
    

    the center of the large circle is at x=12 not y=12

    Second If:

    ~(x(i))^2+(y(i))^2<=25 &&(x(i)-12)^2+(y(i))^2<=100
    

    This code can be improved by using logical indexing.

    For example, using R, you could do (Matlab code is left as an excercise):

    n = 10000
    x = 27*runif(n)-5
    y = 24*runif(n)-12
    plot(x,y)
    
    r = (x^2 + y^2)<=25 & ((x-12)^2 + y^2)<=100
    g = (x^2 + y^2)<=25
    b = ((x-12)^2 + y^2)<=100
    points(x[g],y[g],col="green")
    points(x[b],y[b],col="blue")
    points(x[r],y[r],col="red")
    

    which gives:

    Colored regions