Sei sulla pagina 1di 4

Tarea 1

1. Generación de números pseudoaleatorios y variables aleatorias.

1.1. Generación de números pseudoaleatorios

Para generar números aleatorios con distribución uniforme se utilizó el algoritmo


recursivo de congruencia lineal, cuyos parámetros corresponden a:

𝑋0: semilla; 0 ≤ 𝑋0 ≤ 𝑐;
𝑎: multiplicador 0 ≤ 𝑎 ≤ 𝑐;
𝑏: incremento 0 ≤ 𝑏 ≤ 𝑐;
𝑐: módulo; 𝑐 > 0;

Este algoritmo genera una secuencia de 𝑐 números diferentes de la siguiente


forma:
𝑋𝑖+1 = (𝑎𝑋𝑖 + 𝑏)𝑚𝑜𝑑 𝑐

𝑖𝑋
Los valores de 𝑋𝑖 al transformarse en 𝑈𝑖 = 𝑐−1 tienen valores entre 0 y 1.

1.2. Método de la transformada inversa

Si se desea simular una variable aleatoria continua se puede utilizar el método de la


transformada inversa, mediante la función acumulada 𝐹(𝑥) de la distribución y la
generación de números pseudoaleatorios con distribución uniforme 𝑈(0,1).

Este método consta de los siguientes pasos:

 Calcular la función acumulada 𝐹(𝑥) a partir de la función de densidad 𝑓(𝑥).


 Despejar la variable aleatoria x, obteniéndose la función acumulada inversa
𝐹 −1 (𝑥).
 Evaluar con números pseudoaleatorios 𝑈(0,1) la función 𝐹 −1 (𝑥). De esta forma,
los valores obtenidos permiten simular la variable aleatoria.

1.3.Generación de números pseudoaleatorios con distribución uniforme (0,1)

Para generar números pseudoaleatorios con distribución uniforme (a,b) (a=0, b=1) se
aplicó el algortimo de congruencia lineal y se incluye el método de la transformada
inversa. Este algoritmo fue programado en lenguaje Java, a continuación se muestra el
código de éste.

public static void main(String[] args) {

//parámetros generador congruencial lineal

double X0=1;//semilla

Daniela Lazo Toledo


Tarea 1

double X; // número pseudoaleatorio


double A=5;//multiplicador
double B=7;//incremento
double C=100000;//modulo
double r; // número pseudoaletorio (0,1)

//parámetros distribución uniforme

double a=0;//limite superior


double b=1;// limite inferior
double unif;// número aleatorio distribución uniforme
double n=20;// cantidad de números generados

X=X0;

for (int i = 0; i < n; i++)


{
X= ((A*X+B)%C); //número pseudoaleatorio
r=X/(C-1); // número pseudoaleatorio (0,1)

unif= r*(b-a)+a;
System.out.println(unif);

1.4.Generación de una variable aleatoria con distribución exponencial de


parámetro “a”

Para generar números pseudoaleatorios con distribución exponencial de parámetro a


(a>0) se aplicó el algortimo de congruencia lineal y el método de la transformada inversa.

La función inversa obtenida a partir de la función acumulada 𝐹(𝑥) = 1 − 𝑎𝑒 −𝑎𝑥


−log(𝑟)
corresponde a 𝑟 = 𝑎 , donde r es un número pseudoaleatorio 𝑈(0,1).

Este algoritmo fue programado en lenguaje Java, a continuación se muestra el


código de éste.

public class Vexponencial {


public static void main(String[] args) {

//parámetros generador congruencial lineal

double X0=1;//semilla
double X; // número pseudoaleatorio
double A=5;//multiplicador
double B=7;//incremento

Daniela Lazo Toledo


Tarea 1

double C=100000;//modulo
double r; // número pseudoaletorio (0,1)

//parámetros distribución exponencial

double a=1;//tasa
double exp;// número aleatorio distribución exponencial
double n=20;// cantidad de números generados

X=X0;

for (int i = 0; i < n; i++)


{
X= ((A*X+B)%C); //número pseudoaleatorio
r=X/(C-1); // número pseudoaleatorio (0,1)

exp=(-Math.log(r))/a;
System.out.println(exp);

}
}

Daniela Lazo Toledo

Potrebbero piacerti anche