3

Simulación en Fortran

Posted by José L. Panta A. on 10:14 in
Una aplicación sumamente poderosa de las computadoras modernas es la simulación. Una simulación es un experimento de computadora que refleja algún aspecto del mundo real que parece ser basado en los procesos del azar, o se complica para entender propiamente también. Algunos ejemplos son: el decaimiento radioactivo, división de la bacteria y flujo de tráfico. La escencia de un programa de la simulación es que el programador es incapaz de predecir de antemano el resultado exacto del evento que es simulado. Por ejemplo, cuando tu lanzas una moneda, tu no sabes exactamente cual será el resultado.

Entonces, lo primero a necesitar en una simulación son las estadísticas del evento, es decir, la probabilidad con que el evento se encuentra en cierto estado final, osea el resultado, luego necesitarás generar números aleatorios, para que se entienda mejor pondré el ejemplo del lance de una moneda:

  1. Al lanzar una moneda existen sólo dos posibilidades: cara o sello; entonces cada posible resultado tiene una probabilidad de ser cierto de 0.5.
  2. Ahora, se genera un número aleatorio cuyo valor varíe en el intervalo de [0;1>
  3. A cada posible resultado se le asigna un subintervalo dentro del intervalo [0;1>
  4. Si el número aleatorio es, por ejemplo, 0.378, el resultado cae dentro del intervalo cara, esto quiere decir que, el resultado es cara.
Entonces, existe igualdad de probabilidades de cada resultado, pero esto depende del evento a realizarse, la probabilidad puede estar relacionada con la energía (proceso físico) o puede estar relacionada con una serie de datos experiementales.

La cuestión aquí es como simular en fortran, bueno, para eso lo que tenemos que realizar es la generación de números aleatorios mediante
la subrutina RANDOM_NUMBER (R), esta subrutina puede ser usada para simular diferentes eventos aleatorios, Random_Number genera números pseudo aleatorios distribuidos uniformemente en el rango de:

0≤R<1>

El problema es que una cmputadora no puede, realmente, generar números aleatorios, pero estos son igualmente impredecibles. R puede ser un escalar o una matriz, pero debe ser real. Random_Number arrojará siempre la misma secuencia de números aleatorios. Para producir diferentes secuencias cada vez que se utilice el programa, el generador puede ser iniciado de diferentes maneras.

La subrutina SYSTEM_CLOCK retorna el valor del reloj del sistema, su argumento debe ser entero.

RANDOM_SEED es la subrutina que permite inicializar a RANDOM_NUMBER. Tiene unos argumentos mudos, en el ejemplo PUT se usa para reiniciar el valor de la semilla. Otro argumento mudo es GET que se usa para tomar el valor actual de la semilla. Esto nos ayuda sobre todo dentro de un bucle.

Luego, como ejemplo tenemos:

INTEGER Hora
REAL, DIMENSION(10) :: R

INTEGER, DIMENSION(1) :: semilla

CALL SYSTEM_CLOCK( Hora )
semilla = Hora
CALL RANDOM_SEED( PUT = semilla )
CALL RANDOM_NUMBER( R )

Con esto creo que ya puedes jugar a simular cualquier evento, si eres bueno programando puedes simular cualquier evento, juego de cartas, lance de un dado y de una moneda que es más fácil, pero la cosa es que empieces a simular por ejemplo, el movimiento de un electrón, usando la ecuación de Shrodinger, decamiento radioactivo, crecimiento de cristales, nucleación, etc.

Si tienes las herramientas a la mano, pues empieza a construir.

Acá el link del libro Fortran for Scientific and Ingeneering que está en DJVU, puede servirte o en todo caso revisa el manual del mismo título que viene en el Fortran Power Statio 4.0


|

3 Comments


Brother alucino ke eres de Sistemas Unac, porque en su facu no se ponen un Blog, haber si te das una vuelta por el Blog Fiee Unac y nos das algunos consejos en el formato de presentacion, saludos y buena suerte


hello... hapi blogging... have a nice day! just visiting here....


No me funciono
me salio el siguiente error
Error: Size of 'put' argument of 'random_seed' intrinsic at (1) too small (1/8)

Copyright © 2009 NO Somos Vagos All rights reserved. Theme by Laptop Geek. | Bloggerized by FalconHive.