MATLAB AGUJA DE BUFFON
Publicado por LUIS ALEJANDRO GOMEZ ARREAGA (9 intervenciones) el 09/07/2017 20:55:06
Buenas tardes,
Tengo que realizar un algoritmo para estimar el valor de pi utilizando el metodo de las agujas de buffon pero tengo un inconveniente y creo que estoy generando de manera incorrecta los numeros aleatorios
Estimación de los numeros aleatorios
Sea “a” la distancia entre el punto medio de la aguja
y la lınea más cercana. Esta distancia “a” es una variable aleatoria distribuida uniformemente en
el intervalo [0 , d/2]
Debido a la simetrıa, el ángulo que forma la aguja respecto a las lıneas paralelas, “θ” , es una
variable aleatoria distribuida uniformemente en el intervalo [0 , π] = [0 , 180°].
Una vez obtenidos los valores de “a” y “θ” , puede seguirse el siguiente procedimiento para
decidir si la aguja toca o intersecta la lınea más próxima al centro de la aguja (ver Figura 3.2):
• Si a ≤ (l/2) · sin(θ) , entonces la aguja toca o corta la lınea.
• Si a > (l/2) · sin(θ) , entonces la aguja ni toca ni corta la lınea.
Las muestras aleatorias “a” y “θ” pueden obtenerse a partir de números seudo aleatorios, u1 y
u2 , de la forma siguiente:
● a = (d/2) · u1 (3.4)
θ = 180° · u2 (3.5)
donde u1 y u2 son observaciones de una variable aleatoria uniformemente distribuida en el
intervalo [0,1].
*****************Algoritmo en matlab**********************
Al ejecutarlo me dau n valor de 6.25 aproximadamente lo cual es erroneo
Agradezco de antemano cualquier ayuda
Tengo que realizar un algoritmo para estimar el valor de pi utilizando el metodo de las agujas de buffon pero tengo un inconveniente y creo que estoy generando de manera incorrecta los numeros aleatorios
Estimación de los numeros aleatorios
Sea “a” la distancia entre el punto medio de la aguja
y la lınea más cercana. Esta distancia “a” es una variable aleatoria distribuida uniformemente en
el intervalo [0 , d/2]
Debido a la simetrıa, el ángulo que forma la aguja respecto a las lıneas paralelas, “θ” , es una
variable aleatoria distribuida uniformemente en el intervalo [0 , π] = [0 , 180°].
Una vez obtenidos los valores de “a” y “θ” , puede seguirse el siguiente procedimiento para
decidir si la aguja toca o intersecta la lınea más próxima al centro de la aguja (ver Figura 3.2):
• Si a ≤ (l/2) · sin(θ) , entonces la aguja toca o corta la lınea.
• Si a > (l/2) · sin(θ) , entonces la aguja ni toca ni corta la lınea.
Las muestras aleatorias “a” y “θ” pueden obtenerse a partir de números seudo aleatorios, u1 y
u2 , de la forma siguiente:
● a = (d/2) · u1 (3.4)
θ = 180° · u2 (3.5)
donde u1 y u2 son observaciones de una variable aleatoria uniformemente distribuida en el
intervalo [0,1].
*****************Algoritmo en matlab**********************
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
%inicializar Ncorta y n
Ncorta=0; %número de veces que la aguja corta o toca la l?nea
n=0; %numero de lanzamientos
%inicializar l, d, y Ntotal
Ntotal=3000; %numero total de lanzamientos de la aguja
l=10; %longitud de la aguja
d=20; %espaciado entre lineas paralelas donde d>=l
while(n<Ntotal)
%generar dos numeros pseudoaletorios u1, u2
u1 = random('Uniform',0,1);
u2 = random('Uniform',0,1);
%calcular a y angulo
a=(d/2)*(u1);
angulo=180*u2;
%procedimiento para saber si la aguja toca la linea
if a <= ((l/2)*(sin(angulo)))
n=n+1;
Ncorta=Ncorta+1;
else
n=n+1;
end
end
p=Ncorta/Ntotal;
pi=(2*l)/(p*d);
disp(pi);
Al ejecutarlo me dau n valor de 6.25 aproximadamente lo cual es erroneo
Agradezco de antemano cualquier ayuda
Valora esta pregunta
0