Вы находитесь на странице: 1из 14

UNIVERSIDAD PERUANA DE CIENCIAS APLICADAS

FACULTAD DE INGENIERA
CURSO
SIMULACIN DE SISTEMAS

PROFESOR
J. Alcalde Ch.
TEMA
Tarea Acadmica
GRUPO DE TRABAJO
Maguia Chura No

Lima, Per
2015

Grupo lder
Nro.
Carnet
Nombres
1
u201500645
Elizbn

Carrera
Ing. Industrial

Apellidos y
Maguia Chura No

Simulacin de sistemas
Prof. Jaime Alcalde Chigne
20151a
MONTERRICO

TA1

Generacin de nmeros aleatorios


Pruebas de Uniformidad y aleatoriedad
Grupo :
Fecha de entrega: 23/7/2015

Generacin de nmeros aleatorios mediante las 2


tcnicas aprendidas en clase (Congruencial y Cuadrado
Central)
Generacin de nmeros Aleatorios mediante el Mtodo
Congruencial
(PseudoCodigo PseInt)
Proceso GenAleatCongruencial
Borrar Pantalla
Escribir 'Generacin de numeros aleatorios. Metodo Congruencial
lineal'
Escribir 'modelo: X(i+1) = [A*X(i) + C] modulo M'
Escribir ' '
Dimension R(200)
bandera<-0
i<-0
Escribir 'Digite los parametros'
Escribir 'Termino Multiplicativo A : '
Leer A
Escribir 'Termino aditivo
C : '
Leer C
Escribir 'Modulo
M : '
Leer M
Escribir 'Raiz
Xo: '
Leer X0
Escribir ' '
Escribir 'i
k
Xi
AXi+C
AXi+C mod M
Ri'
W1<-X0
Mientras bandera=0 Hacer
i<-i+1
W2<-A*W1+C
W3<-W2 MOD (M)
R(i)<-((W3/M))
W1<-W3
k<-i
imprime<-falso
Rcompara<-R(k)
Mientras k>=2 Hacer
Si Rcompara=R(k-1) Entonces
Escribir 'i ',i,'
k ',k,'
bandera ',bandera,'
Rk ',Rcompara,'
Rk-1 ',R(k-1),' iguales'
k<-1
bandera<-1
Sino
imprime<-verdadero
Escribir 'i ',i,'
k ',k,'
bandera ',bandera,'
Rk ',Rcompara,'
Rk-1 ',R(k-1),' diferentes'
k<-k-1
FinSi
FinMientras
Escribir ' '
Si imprime=verdadero O i=1 Entonces
Escribir i,' ',k,' ',W1,' ',W2,' ',W3,'
ri =
',R(i)
FinSi

FinMientras
FinProceso

Diagrama de la generacin de nmeros Aleatorios con el


Mtodo Congruencial
(PseInt)

Cdigo Fuente (nombre del archivo


NumAleatoriosCongruencial.java)
import java.io.*;
public class NumAleatoriosCongruencial {
public static void main(String args[]) throws IOException {
BufferedReader bufEntrada = new BufferedReader(new
InputStreamReader(System.in));
double a;
double bandera;
double c;
int i;
boolean imprime;
int k;
double m;
double r[];
double rcompara;
double w1;
double w2;
double w3;
String x0;
System.out.println(""); // no hay forma directa de borrar la consola en Java
System.out.println("=======================================");
System.out.println("|| Generador de numeros aleatorios. ||");
System.out.println("||

Metodo Congruencial lineal

||");

System.out.println("=======================================");
System.out.println("modelo: X(i+1) = [A*X(i) + C] modulo M");
System.out.println(" ");
r = new double[200];
bandera = 0;
i = 0;
System.out.println("Digite los parametros");
System.out.println("Termino Multiplicativo A : ");
a = Double.parseDouble(bufEntrada.readLine());
System.out.println("Termino Aditivo

C : ");

c = Double.parseDouble(bufEntrada.readLine());
System.out.println("Modulo

M : ");

m = Double.parseDouble(bufEntrada.readLine());
System.out.println("Raiz

Xo: ");

x0 = bufEntrada.readLine();
System.out.println(" ");
System.out.println("i

Xi

AXi+C

AXi+C mod M

Ri");

w1 = Double.parseDouble(x0);
while (bandera==0) {
i = i+1;
w2 = a*w1+c;
w3 = w2%(m);
r[i-1] = ((w3/m));
w1 = w3;
k = i;
imprime = false;
rcompara = r[k-1];
while (k>=2) {
if (rcompara==r[k-2]) {
System.out.println("i "+i+" k "+k+" bandera "+bandera+"
Rk "+rcompara+" Rk-1 "+r[k-2]+" iguales");
k = 1;
bandera = 1;
} else {
imprime = true;
System.out.println("i "+i+" k "+k+" bandera "+bandera+"
Rk "+rcompara+" Rk-1 "+r[k-2]+" diferentes");
k = k-1;
}
}
System.out.println(" ");
if (imprime==true || i==1) {
System.out.println(i+" "+k+" "+w1+" "+w2+" "+w3+" ri =
"+r[i-1]);
}
}
}
}

Capturas de funcionabilidad (archivo


NumAleatoriosCongruencial.java)

asd

Generacin de nmeros Aleatorios mediante el Mtodo


Cuadrado Central
(PseudoCodigo PseInt)
Proceso GenAleatCuadM
Borrar Pantalla
Escribir "Generador de numeros aleatorios. Metodo Cuadrado medio"
Escribir "modelo: X(i+1) = medio [X(i)*X(i), d]"
Escribir " "
Dimension R(200)
Finish <- 0
i <- -1
Escribir "Digite los parametros";
Escribir "Cantidad de digitos
d : "
Leer d;
Escribir "Numero inicial Raiz
Xo : "
Leer Xo;
Escribir " "
Xi <- Xo
Escribir "i
Xi
Xi2
Xim1
Ri"
Escribir "--------------------------------"
Mientras Finish = 0 Hacer
i <- i + 1
Si I > 40 Entonces
Finish <- 1
Fin Si
Xi2 <- Xi * Xi
Sarta <- CONVERTIRATEXTO(Xi2)
LongSarta <- LONGITUD(Sarta)
Si LongSarta > d Entonces
NrosAElim <- LongSarta - d
cola <- TRUNC(NrosAElim / 2)
WCentral <- SUBCADENA(Sarta,cola+1,cola+d)
Xim1 <- CONVERTIRANUMERO(WCentral)
Ri <- Xim1
Escribir i," ",Xi," ",Sarta," ",Xim1," ",Ri;
Sino
Xim1 <- CONVERTIRANUMERO(Sarta)
Ri <- Xim1
Escribir i," ",Xi," ",Sarta," ",Xim1," ",Ri;
Fin Si
Xi <- Xim1
Fin Mientras
FinProceso

Diagrama de la generacin de nmeros Aleatorios con el


Mtodo Cuadrado Central
(PseInt)

Cdigo Fuente (nombre del archivo


NumAleatoriosCongruencial.java)

import java.io.*;
public class genaleatcuadm {
public static void main(String args[]) throws IOException {
BufferedReader bufEntrada = new BufferedReader(new
InputStreamReader(System.in));
double cola;
int intcola;
double d;
int intd;
double finish;
double i;
double longsarta;
double nrosaelim;
String r[];
double ri;
String sarta;
String wcentral;
double xi;
double xi2;
String xim1;
String xo;
System.out.println(""); // no hay forma directa de borrar la consola en Java
System.out.println("Generador de numeros aleatorios. Metodo Cuadrado medio");
System.out.println("modelo: X(i+1) = medio [X(i)*X(i), d]");
System.out.println(" ");
r = new String[200];
finish = 0;
i = -1;
System.out.println("Digite los parametros");
System.out.println("Cantidad de digitos
d : ");
d = Double.parseDouble(bufEntrada.readLine());
System.out.println("Numero inicial Raiz Xo : ");
xo = bufEntrada.readLine();
System.out.println(" ");
xi = Double.parseDouble(xo);
System.out.println("i Xi Xi2 Xim1 Ri");
System.out.println("--------------------------------");
while (finish==0) {
i = i+1;
if (i>40) {
finish = 1;
}
xi2 = xi*xi;
sarta = Double.toString(xi2);
longsarta = sarta.length();
if (longsarta>d) {
nrosaelim = longsarta-d;
cola = Math.floor(nrosaelim/2);
intcola = (int) cola;
intd = (int) d;
wcentral = sarta.substring(intcola,intcola+intd);
xim1 = String.valueOf(wcentral);
ri = Double.parseDouble(xim1);
System.out.println(i+" "+xi+" "+sarta+" "+xim1+" "+ri);
} else {
xim1 = String.valueOf(sarta);
ri = Double.parseDouble(xim1);
System.out.println(i+" "+xi+" "+sarta+" "+xim1+" "+ri);
}
xi = Double.parseDouble(xim1);
}}}

Capturas de funcionabilidad (archivo NumAleatoriosCCentral.java)

Ingresando las variables (# de digitos y la raz Xo)

Lista de nmeros aleatorios generados.

El ingreso de N nmeros aleatorios provenientes de una Base de datos, o de


excel, o que permita digitar desde el terminal de computadora.
El programa debe ser realizar las pruebas de Aleatoriedad y Uniformidad
estudiadas en clase.

Ingreso de N nmeros aleatorios y la validacin de la prueba


de Uniformidad.
(PseudoCodigo PseInt)
import java.util.ArrayList;
import java.util.Collections;
public class Kolmogorov_Smirnov {
public ArrayList<Double> listaDeNumeros;
public double[] D;
public double Dmas;
public double Dmenos;
public double D010;
public double D005;
public double D001;
public static void main(String[] args) {
Kolmogorov_Smirnov ks = new Kolmogorov_Smirnov();
ks.pruebaK_S(20000000);
}
public Kolmogorov_Smirnov() {
D = new double[2];
D[0] = -1;
D[1] = -1;
D010 = 0;
D005 = 0;
D001 = 0;
Dmas = 0;
Dmenos = 0;
listaDeNumeros = new ArrayList<>();
}
public void pruebaK_S(int ciclosMax) {
GeneradorMZRAN generador = new GeneradorMZRAN();
System.out.println("Obteniendo nmeros aleatorios: ");
listaDeNumeros = generador.mzran(ciclosMax);
System.out.println("Ordenando lista de nmeros aleatorios...");
Collections.sort(listaDeNumeros);
System.out.println("Lista ordenada =D");
double ciclosRealizados = listaDeNumeros.size();
double raizDelPeriodo = Math.sqrt(ciclosRealizados);
D010 = (1.22 / raizDelPeriodo);
System.out.println("D010: " + D010);
D005 = (1.36 / raizDelPeriodo);
System.out.println("D005: " + D005);
D001 = (1.63 / raizDelPeriodo);
System.out.println("D001: " + D001);
int ciclos;
double numeroAleatorio;
double cicloActual;
for (ciclos = 1; ciclos <= ciclosRealizados; ciclos++) {

cicloActual = ciclos;
numeroAleatorio = listaDeNumeros.get(ciclos - 1);
//Kolmogorov-Smirnov:
Dmas = (((cicloActual) / ciclosRealizados) - numeroAleatorio);
if (D[0] < Dmas) {
D[0] = Dmas;
}
Dmenos = numeroAleatorio - ((cicloActual - 1) / ciclosRealizados);
if (D[1] < Dmenos) {
D[1] = Dmenos;
}
//Fin Kolmogorov-Smirnov
}
if (D[0] > D[1]) {
System.out.println("Dmas es mayor que Dmenos: " + D[0] + " > " + D[1]);
if ((D[0] < D010) && (D[0] < D005) && (D[0] < D001)) {
System.out.println("D[0] es menor que el valor crtico de K_S por lo que no
podemos rechazar la hiptesis nula");
}
} else {
System.out.println("Dmenos es mayor que Dmas: " + D[1] + " > " + D[0]);
if ((D[1] < D010) && (D[1] < D005) && (D[1] < D001)) {
System.out.println("D[1] es menor que el valor crtico de K_S por lo que no
podemos rechazar la hiptesis nula");
}
}
}
}

Вам также может понравиться