domingo, 11 de marzo de 2012


LABORATORIO No.2 DE SIMULACION

 Presentado Por: Jorge Andrés Prada.

Presentado A: Profesor Cesar Aceros


GENERACION DE NUMEROS ALEATORIOS.


 LABORATORIO No.2:

1.    Desarrolle un programa que genere secuencias de números pseudoaleatorios siguiendo el método explicado en el laboratorio:


Fig1. Método de generación de números pseudoaleatorios.



Respuesta No.1:

Se desarrolló el programa en Excel donde se generan los números aleatorios siguiendo el método explicado en el laboratorio mostrado en la figura1.

En el generador se distinguen cuatro elementos:

• Xo, es el valor inicial o semilla.
• a, multiplicador, siendo 0 < a ≤ m.
• c, incremento, siendo 0 < a ≤ m.
• m, módulo.



Fig2. Implementación de Método para Generar Números Pseudoaleatorios.


En el siguiente link se comparte el archivo en Excel que genera los números pseudolaeatorios:


Para corroborar los resultados se implementó también el código en MATLAB para hacer los análisis de autocorrelación de los números pseudoaleatorios generados:

clc
close all
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%GENERACION NUMEROS PSEUDOALEATORIA%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a = 4;% Constante Multiplicador.
Xo = 8;% Número Inicial Aleatorio.
c = 0;% Constante Aditiva.
m = 25;% Módulo.
u = zeros(m,1);
for i = 1:(m)
    calculo =((a*Xo)+c);
    u(i,1)= mod(calculo, m);
    Xo=u(i,1);
end
figure(1)
subplot(2, 1, 1),stem(u(1:(m)));
title('NUMEROS PSEUDOALEATORIOS')
xlabel('n')
ylabel('u[n]')
subplot(2,1,2), autocorr(u) ;

% Cálculo de la Media.
n=length(u);
media=sum(u)/n
% Cálculo de la Varianza.
varianza=sum((u-media).^2)/n

El código arrojó la siguiente gráfica en donde se muestran los números generados y la función de autocorrelación, esta última nos permite verificar si el grado de aleatoriedad de los números generados, una de las propiedades de la aleatoriedad es que su función de autocorrelación tiende a un δ(k) (Función Delta de Kronecker) a medida que los estados (valor de m aumenta).  

Fig3. Números Pseudoaleatorios con (a=4, Xo=8, c=0 y m=25).


Al analizar la figura 3 se observa que sigue existiendo una fuerte correlación entre los números generados, de acuerdo a esto se realizó una nueva selección de los parámetros:  “a”, “Xo”, “c” y ”m”,  ajustándolos a:


a = 11;% Constante Multiplicador.
Xo = 16;% Número Inicial Aleatorio.
c = 2;% Constante Aditiva.
m = 25;% Módulo.

y arrojó las siguientes gráficas:

Fig4. Números Pseudoaleatorios con (a=11, Xo=16, c=2 y m=25).

Se observa claramente en la segunda gráfica de la fig.4 que la autocorrelación tiende a un δ(k) (Función Delta de Kronecker), lo cual nos indica que la calidad de la aleatoriedad de los números generados es mejor que los representados en la Fig.3.

2.    Explique otro método para generar números aleatorios.

Respuesta No.2:

El método que se presentó en el numeral No.1 producía números en los que cada término depende del anterior. Ahora se presentará otro tipo de generadores en los que para generar un nuevo término se utilizan dos elementos anteriores en lugar de uno como el mostrado en el punto anterior, este corresponde al “Método Aditivo”.
En este caso la longitud máxima de periodo que se puede alcanzar es mayor, dado que para que se produzca un ciclo es necesario que se repitan parejas de números.

El primer generador de este tipo fue creado en los años 1950 y es la sucesión de Fibonacci que se muestra en la formula anterior.

A continuación se muestra el código y las gráficas para el método aditivo:
clc
close all
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%GENERACION NUMEROS PSEUDOALEATORIA%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a = 4;% Constante Multiplicador.
Xn = 16;% Número Inicial Aleatorio.
Xn_1 = 15
c = 2;% Constante Aditiva.
m = 25;% Módulo.
u = zeros(m,1);
for i = 1:(m)
    if i>1
    Xn_1 = u((i-1),1)   
    end
    calculo =(a*(Xn+Xn_1))+c;
    u(i,1)= mod(calculo, m);
    Xn=u(i,1);
end
figure(2)
subplot(2, 1, 1),stem(u(1:(m)));
title('NUMEROS PSEUDOALEATORIOS')
xlabel('n')
ylabel('u[n]')
subplot(2,1,2), autocorr(u) ;
% Cálculo de la Media.
n=length(u);
media=sum(u)/n
% Cálculo de la Varianza.
varianza=sum((u-media).^2)/n


Fig5. Números Pseudoaleatorios con el método aditivo.

No hay comentarios:

Publicar un comentario