Choose n points randomly from a circle, how to calculate the probability that all the points are in one semicircle?

3 vues (au cours des 30 derniers jours)
I want to create a graphic monte carlo simulation that solves this problem, The mathematical answer is : n/2^(n-1)
maybe someone have the algorithm code for that question ?
  2 commentaires
Guillaume
Guillaume le 10 Jan 2020
It's not entirely clear what you need help with. The problem itself is simple, so we don't know what's blocking you. You'd just run a monte-carlo simulation which is easy enough to implement.
The one difficultly I can see is the generation of points in a circular uniform distribution. You have to be careful not to use the naive approach of just picking uniform random radii and angles. However, less than 5 minutes of searching on the internet would give you simple and reliable algorithms for that, if it's not already built in matlab.
elroi berkovits
elroi berkovits le 10 Jan 2020
Can u try to help with the code?
i have this so far:
clear all
clc
clear
% Plot a circle.
angles = linspace(0, 2*pi, 720); % 720 is the total number of points
radius = 20;
xCenter = 50;
yCenter = 40;
x = radius * cos(angles) + xCenter;
y = radius * sin(angles) + yCenter;
% Plot circle.
plot(x, y, 'b-', 'LineWidth', 2);
% Plot center.
hold on;
plot(xCenter, yCenter, 'k+', 'LineWidth', 2, 'MarkerSize', 16);
grid on;
axis equal;
xlabel('X', 'FontSize', 16);
ylabel('Y', 'FontSize', 16);
% Now get random locations along the circle.
s1 = 2; % Number of random points to get.
n=1000; % Number of sim
xRandom = zeros(n,s1);
yRandom = zeros(n,s1);
for i=0:n-1
randomIndexes = randperm(length(angles), s1);
xRandom(i+1,:) = x(randomIndexes);
yRandom(i+1,:) = y(randomIndexes);
plot(xRandom, yRandom, 'ro', 'LineWidth', 2, 'MarkerSize', 16);
end
P = nnz(all(xRandom >=50,2))
R = nnz(all(xRandom <50,2))
PROB = (P+R)/n

Connectez-vous pour commenter.

Réponses (1)

KSSV
KSSV le 10 Jan 2020
% Generate circle
r = 1. ; % radius
th = linspace(0,2*pi) ;
x = r*cos(th) ;
y = r*sin(th) ;
% Geenrate random points inside the circle
N = 5000 ;
a = -1 ; b = 1 ;
xr = (b-a).*rand(N,1) + a;
yr = (b-a).*rand(N,1) + a;
% pick points lying inside the circle
idx1 = inpolygon(xr,yr,x,y) ;
xr = xr(idx1) ;
yr = yr(idx1) ;
% random points inside circle
NP1 = nnz(idx1) ;
% points lying in semicircle
idx2 = inpolygon(xr,yr,x(1:50),y(1:50)) ;
NP2 = nnz(idx2) ;
iwant = NP2/NP1 ; % probability that points lie in semicircle
plot(x,y)
hold on
plot(xr,yr,'.r')
plot(xr(idx2),yr(idx2),'ob')
  3 commentaires
elroi berkovits
elroi berkovits le 10 Jan 2020
It is very nice and efficient, but it does not answer the statistical question, for example at 3 points the probability is 0.75, at 4 points the probability is 0.5, at 5 points the probability is 0.3125, etc.
KSSV
KSSV le 10 Jan 2020
Modifié(e) : KSSV le 10 Jan 2020
Yes you are right..I made the problem complex instead of using the inequality.
@elroi berkovits please noe that, you need not to use inpolygon. We have given you a idea, you should try the one you want.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Lighting, Transparency, and Shading dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by