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...