Autor Tema: Gráfica de Números Aleatorios.

0 Usuarios y 1 Visitante están viendo este tema.

08 Marzo, 2011, 04:32 am
Leído 2325 veces

Jorge quantum

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 120
  • Karma: +0/-0
  • Sexo: Masculino
Hola.

Resulta que estoy aprendiendo el Método de Monte-Carlo y la primera parte es saber generar números aleatorios. En uno de los ejercicios introductorios, me piden ver que tan buena es la siguiente función generadora:

\( \displaystyle x_n=MOD\left ( cx_{n-1}+a_0,N_{máx} \right ) \)

En donde se define: \( \displaystyle MOD(a,b)=a-b*int(b/a) \) e \( int \) hace referencia a la parte entera del cociente.

En la primera expresión \( \displaystyle c  \), \( \displaystyle x_0 \) y \( \displaystyle N_{máx} \), son constantes que define el usuario (\( \displaystyle x_0 \)  se denomina semilla).

Ahora bien, éste algoritmo me genera numeros aleatorios formando el conjunto \(   \displaystyle \left \{ x_i \right \}=\left \{ x_0,x_1,x_2,x_3,...,x_n \right \} \).

Con esto, para saber si es buen generador, se escojen pares ordenados de la forma  \(  \displaystyle \left \{ x_i \right \}=\left \{ \left (x_0,x_1  \right ),\left (x_2,x_3  \right ),...,\left (x_{n-1},x_n   \right )\right \} \) los cuales se grafican y se mira que no hallan comportamientos privilegiados, como digamos, líneas rectas.

He hecho el siguiente programa en Matlab para graficar dichos puntos:

function ale=ale()
a=input('Digite la Semilla ');
b=input('Digite el Nmáx ');
c=input('Digite C ');


  for i=1:80
      d=a*c;
      z(i)=d-b*floor(d/b);
      a=z(i);

     
end
z
 for k=1:70
     A=z(:,[k]);
     B=z(:,[k+1]);
     
     hold on;
     plot(A,B,'.')
     plot(25,125,'square')
     plot(113,53,'square')
     hold off;
 end


Pero me doy cuenta que está graficando más puntos de los que debería y lo hace de la forma \(   \displaystyle \left \{ x_i \right \}=\left \{ \left (x_0,x_1  \right ),\left (x_1,x_2  \right ),\left ( x_2,x_3 \right )...\right \} \), lo cual, evidentemente, está malo.

Alguien me podría decir cómo corrijo ese error??...

La otra forma de saber si es buen generador, es conociendo el periodo del algoritmo, es decir, cuando la secuencia de numeros aleatorios se repite, pero de ésta no tengo idea de cómo hacerlo. Si alguien me ayuda también con esta, sería genial

De antemanos muchas gracias...

02 Abril, 2011, 12:08 pm
Respuesta #1

oveka

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 294
  • Karma: +1/-0
  • Sexo: Masculino
!Salud, Jorge!
1. Revisar a la calidad del generador podemos usando la función de corelación.
   Corelación entre \( x_i; x_i_+_t \). Esperamos que son a 0. La memoria se desaparece.
2. En momentos puedes correjir los parametros usando timer al azar.
    Entonces interrumpimos el periodo eventual.
3. Generar una distribuidad en Método de Monte-Carlo puedes
    aplicando generador apartmente para cada intervalo de histograma.
!Exitos! Salud de Ucrania.

07 Abril, 2011, 01:34 am
Respuesta #2

Dogod

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,679
  • Karma: +0/-0
  • Sexo: Masculino
El generador te dará tantos números como tamaño tenga el módulo. Una vez se sobrepase este valor los números se repetirán.

Por otro lado, la semila debe ser \( X_0>>\sqrt[ ]{m} \) para tener un buen generador.


Un saludo.
Las cosas pasan es por algo, y no hay mal que por bien no venga dicen en mi tierra...