Está en la página 1de 6

MÉTODO MONTECARLO

1.- Simulación del valor de pi usando GNA escalar para N valores.

a) Diagrama de flujo.

INICIO

SYSTEM_CLOCK (COUNT1)

SEED1=COUNT1

RANDOM_SEED(PUT=SEED1)

SYSTEM_CLOCK (COUNT2)

SEED2=COUNT2

RANDOM_SEED(PUT=SEED2)

N
N 1=0 , N 2=0

I=1, N θ

RANDOM_NUMBER( R1)

Escriba aquí laecuación .


RANDOM_NUMBER( R2))

R= √ ¿ ¿

NO SI
R≤ 0.5

N 2=N 2 +1 N 1=N 1 +1

C='FUERA' C='DENTRO'

I, R1 , R 2 , R , C
RANDOM_SEED(GET=SEED1)

RANDOM_SEED(GET=SEED2)

N 1, N 2

PI = 4
( N ¿¿ 1/ N ¿¿ 2)¿ ¿

PI

RPTA

NO SI
α RPTA==”NO”

FIN
b) Algoritmo

Paso 1: Inicio del lazo DO 1


Paso 2: Llamar a la subrutina de Reloj de sistema: SYSTEM_CLOCK(COUNT1)
Paso 3: SEED = COUNT1
Paso 4: Llamar a la Subrutina semilla aleatoria: RANDOM_SEED(PUT=SEED1)
Paso 5: Llamar a la subrutina de Reloj de sistema: SYSTEM_CLOCK(COUNT2)
Paso 6: SEED = COUNT2
Paso 7: Llamar a la subrutina : RANDOM_SEED(PUT=SEED2)
Paso 8: Ingresar la cantidad de números aleatorios
Paso 9: Inicio de contador N 1=0, N 2=0
Paso 10: Inicio del lazo Do 2: I=1, N
Paso 11: Llamar a la subrutina de números aleatorios:

RANDOM_NUMBER (x1)
RANDOM_NUMBER (y1)
Paso 12: R= √ ¿ ¿

Paso 13: Si (R≤0.5)

Si ---¿ Mostrar: 'C=DENTRO' N 1=N 1 +1

No ---¿ Mostrar: 'C=FUERA' N 2=N 2 +1

Paso 14: Mostrar I , x1 , y1 , R , C

Paso 15: Llamar la subrutina semilla aleatoria:

RANDOM_SEED(GET=SEED1)

RANDOM_SEED(GET=SEED2)

Paso 16: Fin de lazo2

Paso 17: Mostrar N 1 , N 2

Paso 18: PI= 4( N 1/N)

Paso 19: Mostrar PI

Paso 20: Ingresar la respuesta a seguir (SI/NO): RPTA

Paso 21: IF(RPTA==”NO”) EXIT


Paso 22: Fin del lazo1

Paso 23: Fin del programa

c) Codificación

PROGRAM S_SIMULACION_MONTECARLO_PI
IMPLICIT NONE
INTEGER::COUNT1,COUNT2
INTEGER, DIMENSION(1)::SEED1, SEED2
INTEGER::N, I, N1, N2
REAL:: x1, y1, R, PI
CHARACTER(6):: C,RPTA*2
PRINT*, 'HALLANDO EL VALOR DE PI CON MET. DE MONTECARLO'
CALL SYSTEM_CLOCK(COUNT1)
SEED1=COUNT1
CALL RANDOM_SEED(PUT=SEED1)
CALL SYSTEM_CLOCK(COUNT2)
SEED2=COUNT2
CALL RANDOM_SEED(PUT=SEED2)
DO
PRINT*; 'INGRESAR LOS NÚMEROS DE PUNTOS'
READ*,N
N1=0; N2=0
DO I=1,N
CALL RANDOM_NUMBER(x1)
CALL RANDOM_NUMBER(y1)
R=SQRT ((x1-0.5)**2+(y1-0.5)**2)
IF(R≤0.5)THEN
N1=N1+1
C='DENTRO'
ELSE
N2=N2+1
C='FUERA '
END IF
CALL RANDOM_SEED(GET=SEED1)
CALL RANDOM_SEED(GET=SEED2)
END DO
PRINT*, 'PUNTOS DENTRO'=,N1
PRINT*, 'PUNTOS FUERA'=,N2
PI=4*(REAL(N1)/REAL(N))
PRINT*,'VALOR DE PI=',PI
PRINT*,SI, PARA CONTINUAR: '
READ*,RPTA
IF(RPTA=='NO')EXIT
END DO
END PROGRAM SIMULACION_MONTECARLO_PI
d) Verificación de resultados

También podría gustarte