2016-02-28 7 views
0

На самом деле у меня есть две пересекающиеся окружности, как указано на рисункеНайти площадь двух пересекающихся окружностей с использованием метода Монте-Карло

я хочу найти площадь каждой части в отдельности с использованием метода Монте-Карло в Matlab.

Код не рисует прямоугольник или круги правильно, поэтому Я предполагаю, что неправильно, это мой расчет для x и y, и я не очень хорошо разбираюсь в уравнениях геометрии для его решения, поэтому мне нужна помощь в уравнения.

enter image description here это мой код до сих пор:

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 
+0

Что именно ваш вопрос? Смутное * «Мне нужна помощь» * не объясняет, чего вы хотите. Опишите, что делает код, как правильный, так и неправильный. Пожалуйста, опишите, что вы хотите. Страницы [help] дают много советов о том, как написать хороший вопрос. См. Также [mcve]. – AdrianHHH

+0

«Мне нужна помощь об этом» была о геометрических уравнениях, в любом случае я ее отредактировал, спасибо за уведомление – Suzy

ответ

2

Вот ошибки, которые я нашел:

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

Прямоугольник экстентов были неправильными, и если вы используете рандов (п-1) даст вам (n-1) на (n-1) матрицу.

и

первый Если:

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

центр большого круга находится при х = 12, не у = 12

Второй, если:

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

Этот код могут быть улучшены с помощью логической индексации.

Например, с помощью R, вы могли бы сделать (Matlab код остается как физические упражнения):

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") 

, который дает:

Colored regions

+0

Спасибо, сэр, это было действительно полезно :) – Suzy

Смежные вопросы