Conocimiento

Estructura del código (1)

La estructura del código de simulación tiene que tener tres unidades básicas:

  • la definición de la función distribución (el arreglo que recoge las bolitas en la tabla de Galton)
  • el simulador del avance de la partícula que entrega la posición final
  • la unidad que determina la clase que debe ser incrementada en la función distribución (la unidad que determina en que contenedor del receptor de bolitas esta es depositada)

Para el primer punto debemos definir un arreglo, que inicialmente se setea en cero, que al final es poblado según la posición alcanzada.

Para el primer paso debemos primero definir el rango en que la bolita pede caer, es decir un valor mínimo $x_{min}$ (xmin) y un valor máximo $x_{max}$ (xmax). Este debe ser subdividido en $num$ (num) intervalos de largo Dx:

$\Delta x = \displaystyle\frac{x_{max}-x_{min}}{num}$

Si el arreglo lo llamamos $p$ sera primero necesario setear los $num$ elementos en cero (vaciar los elementos de la tabla de Galton)

// set distribution to cero
for(i = 0;i < num;i++){
p[i] = 0.0; // set to empty
}

Una ves se han seteado en cero debemos estudiar el comportamiento de $N$ bolitas/partículas y determinar su posición final $x$ después de $steps$ pasos (ver página que detalla el cálculo):

Position calculation

Una vez se ha obtenido la posición $x$ se puede determinar el casillero en que se debe depositar la bolita simplemente restando el valor mínimo y dividiendo por el ancho de cada contenedor:

$cls = \displaystyle\frac{x-x_{min}}{\Delta x}$

Con este valor se puede localizar el contenedor $p[cls]$ y agregarle una bolita o partícula. El código correspondiente sería:

cls = round((x-xmin)/Dx);   // find position in array
p[cls]++; // increment array p in posicion cls on one

en donde la función $round$ (en javascript Math.round) redondea el valor para obtener un valor $cls$ entero. El cómando p[cls]++ corresponde a incrementar el elemento p[cls] en uno.

Código - suma por posiciones

(ID-description:[email protected]©20180108)