Matlab - Tarea estadistica

 
Vista:

Tarea estadistica

Publicado por Andres M (7 intervenciones) el 26/08/2009 21:10:11
Hola a todos. Tengo una consulta sobre un problema que tengo en un programa para estadistica. En éste programa lo que hay que hacer es generar al azar puntos en un rectangulo y un circulo que se encuentra dentro del primero. La idea es contar la cantidad de puntos que caen dentro del circulo, para comprobar si la probabilidad de éste es: área (C) / área (R) que aproximadamente es 4pi/100 . Por lo que la fórmula se deduce así: área (C)=(nc / n)*área (R); donde nc es la cantidad de puntos que salieron dentro del circulo y n la cantidad total de puntos. Mi programa va mas o menos así.

clc
rectangle('position',[0,0,10,10],'curvature',[0,0],'facecolor',([0,0.2,0.6]),'edgecolor',([0,0,0]))
hold on
rectangle('position',[3,3,4,4],'curvature',[1,1],'facecolor',([0.2,0.8,0.501961]),'edgecolor',([0,0,0]))
hold on
v=10*rand(1,100)
t=0.1:0.1:10
plot(t,v,'k.')

El problema es que no se como discriminar que puntos caen en el circulo, incluyendo la frontera, y cuales no. Agradecería su ayuda.

Atte Andrés.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Tarea estadistica

Publicado por Kike (304 intervenciones) el 27/08/2009 04:54:34
Lo que se me ocurre es esto:
- Localizar el centro del círculo y su radio.
- Para cada punto obtener sus coordenadas (X, Y) y verificar si caen dentro del círculo así: calcular la distancia desde el punto hasta el centro del círculo (por Pitágoras) y si esta longitud es menor o igual que el radio entonces ese punto está dentro del círculo.

Yo sustituiría la forma de crear los puntos. Lo haría con un vector aleatorio para X y otro para Y, y luego graficaría ambos vectores con un plot(X, Y, '*').

Agregaría también la sentencia axis square para que el círculo no se vea ovalado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tarea estadistica

Publicado por Andrés M. (7 intervenciones) el 27/08/2009 22:40:51
Hola gracias por responder. Me podrías por favor, orientar mas o menos como podría hacer eso en el programa, ya que no le pego mucho al matlab. Te lo agradecería nuevamente.

Atte Andrés.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tarea estadistica

Publicado por ramiro (54 intervenciones) el 28/08/2009 01:23:13
Andrés:
Tu problema es parecido a uno que resolví hace tiempo sobre el método de Montecarlo, adaptándolo al tuyo me quedo lo siguiente:

clc
rectangle('position',[0,0,10,10],'curvature',[0,0],'facecolor',([0,0.2,0.6]),'edgecolor',([0,0,0]))
hold on
rectangle('position',[3,3,4,4],'curvature',[1,1],'facecolor',([0.2,0.8,0.501961]),'edgecolor',([0,0,0]))
hold on
v=10*rand(1,N)
t=10*rand(1,N)
plot(t,v,'k.')
for k=1:N
d(k)=sqrt((t(k)-5)^2+(v(k)-5)^2);
if d(k)<=2
plot(t(k),v(k),'xr')
else
end
end
axis equal
i=find(d<=2)
nc=length(i)
n=length(t)
format short g
pfrec=nc/n
p=4*pi/100
error=abs(pfrec-p)

Sólo guárdalo en un archivo de texto y ejecutalo después dándole a N el valor que quieras.

Espero que te sirva, para cualquier duda estoy tambipen en la dirección:
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tarea estadistica

Publicado por Andres M (7 intervenciones) el 31/08/2009 03:07:29
Muchas gracias ramiro, fismat y kike. Se pasaron. Me sirvio un monton. En verdad se los agradezco.

Atte Andrés.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tarea estadistica

Publicado por ramiro (54 intervenciones) el 31/08/2009 17:00:41
Muy bien Andrés, que bueno que te haya servido, de hecho creo que todos nos beneficiamos al participar en un foro, gracias a ti por haber puesto el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tarea estadistica

Publicado por fismat (391 intervenciones) el 28/08/2009 00:26:38
Hola Andres,

Estoy de acuerdo con la sugerencia de kike, yo trabaje en algo similar y lo qu tienes que hacer es calcular las distancias de cada punto respecto al centro del circulo y compararlo con el radio del circulo, a la tecnica la denomino "radio de busqueda".

Saludos
fismat
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tarea estadistica

Publicado por fismat (391 intervenciones) el 28/08/2009 00:52:14
Hola Andrez

Aqui un ejemplo rapido que determina los puntos dentro y fuera del circulo.

rc=5; % Radio del circulo
xc=rc*sin(-2*pi:pi/100:2*pi);
yc=rc*cos(-2*pi:pi/100:2*pi);

l=5; % lado del triangulo
xr=[-l -l l l -l];
yr=[-l l l -l -l];

% datos dispersos a graficar y determinar si estan o no dentro del circulo
n=30; % numero de puntos a generar
xp=2*rc*rand(n)-rc;
yp=2*rc*rand(n)-rc;

% Calculo de las disntancias de los puntos generados
dis=sqrt(xp.^2+yp.^2);

% Indices de las localizaciones dentro y fuera del circulo
in=find(dis<5);
out=find(dis>5);

% Graficas
plot(xp(in),yp(in),'b*')
hold on
plot(xp(out),yp(out),'r*')
hold on
plot(xr,yr,'r')
hold on
plot(xc,yc,'b')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar