Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NÚMEROS ALEATORIOS
Ejemplo:
X0 = 4122 x20 = 16 | 9908 | 84
X1 = 9908 x21 = 98 | 1684 | 64
X2 = 1684 x22 = 2 | 8358 | 56
X3 = 8358 x23 = 69 | 8561 | 64
Entre las desventajas de este método está que tienen períodos breves (pocos
números aleatorios), no satisfacen completamente las pruebas estadísticas de
aleatoriedad.
BOTON EJECUTAR
Dim i, n As Integer
Dim x, k, w, y, z, v, t, nlimp As Double
Randomize()
k = Val(TextBox1.Text) REM número de simulaciones
x = Val(TextBox2.Text) REM primer número tomado al azar de "N cifras
n = Val(TextBox3.Text) REM número de dígitos
nlimp = 0
i=0
TextBox4.Text = TextBox4.Text & "X [" & i & "] = " & x & Chr(13) & Chr(10)
For i = 1 To k
y=x*x
z = Int(y / 100)
v = Int(z / 10 ^ (2 * n))
t = v * (10 ^ (2 * n))
w=z-t
TextBox5.Text = TextBox5.Text & "Y [" & i & "] = " & y & Chr(13) & Chr(10)
If i < nlimp * 10 + 10 Then
TextBox6.Text = TextBox6.Text & "W [" & i & "] = " & w & Chr(13)
& Chr(10)
End If
If i = nlimp * 10 + 10 Then
nlimp = nlimp + 1
TextBox6.Text = TextBox6.Text & "W [" & i & "] = " & w & Chr(13) &
Chr(10)
End If
x=w
TextBox4.Text = TextBox4.Text & "X [" & i & "] = " & x & Chr(13) & Chr(10)
Next
BOTON NUEVO
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox1.Focus()
End Sub
BOTON SALIR
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
End
End Sub
La ejecución da como resultado:
MÉTODOS CONGRUENCIALES (Esto es para análisis y estudio del alumno)
Se basan en el concepto matemático de números congruentes. El numero entero x es
congruente con y modulo m si x – y es divisible por m, es decir, x e y dan el mismo
resto cuando se dividen por m. se denota por x ≡ y. Por ejemplo, el número 140016 es
congruente con 16 modulo 103, ya que 140016 – 16 =14000. El resto de dividir tanto
140016 como 16 por 103 es 16.
x n+1=a xn +b ( mod m )
x 1=a x 0 +b ( mod m )
x 2=a x 1+ b=a2 x 0 + ( a+ 1 ) b ( mod m)
b ( a3+ 1 )
x 3=( a3 x 0 +a 2+ a+1 ) b=a3 x 0+ ( mod m )
( a−1 )
……………………………………………………………
……
……………………………………………………………
……
b ( an +1 )
x n=a n x 0 + ( mod m )−→(n ≤ m−1)
( a−1 )
En donde los x son enteros entre 0 y m-1, y las constantes a y b son no-negativas. La
selección de a, b, y m afectan el periodo y la auto correlación en la secuencia. Entre los
resultados de los estudios realizados con estos generadores tenemos:
El modulo m debe ser grande. Dado que los x están entre 0 y m-1, el periodo
nunca puede ser mayor que m.
Para que el computo de mod m sea eficiente, m debe ser una potencia de 2, es
decir, 2k. En este caso mod m puede ser obtenido truncando el resultado y
tomando en k bits a la derecha.
EJEMPLO 02
Elaborar un programa en Visual Basic.Net o Visual Basic 6.0 para generar
números pseudoaleatorios por el método congruencial.
BOTON EJECUTAR
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim I, S, R, A, B, M As Integer
Dim X1 As Double
S = Val(TextBox1.Text) REM ingresa numero semilla
A = Val(TextBox2.Text) REM ingresa valor de a numero primo
B = Val(TextBox3.Text) REM ingresa valor de b numero primo <>b
M = Val(TextBox4.Text) REM igreso del modulo
R = Val(TextBox5.Text) REM ingrese veces a generar el n° aleatorio
For I = 1 To R
X1 = (A ^ I * S + B * (A ^ I - 1) / (A - 1)) Mod M
TextBox6.Text = TextBox6.Text & "NA[" & I & "] = " & X1 & Chr(13)
& Chr(10)
Next
End Sub
BOTON NUEVO
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox1.Focus()
End Sub
BOTON SALIR
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
End
End Sub
En el ejemplo el numero semilla es 4 a vale 2 y be vale 3, lo que se ha generado es 500
números pseudoaleatorios en un rango de 0 y 9.
EJERCICIOS
Estos ejercicios deben ser resueltos en el laboratorio, solo se permitirá su diagrama de flujo
como herramienta de programación, caso contrario no será admitido para su presentación y
calificación.
En el ejemplo dado por el docente, hacer que el programa reporte solo números
aleatorios en un rango de 0 a 1.
En el ejemplo dado por el docente, hacer que el programa reporte la varianza y la
desviación estándar de los números generados.
Implementar un programa en Visual Net 2010 o cualquier otro lenguaje por el
Método Congruencial Multiplicativo (investigar usando cualquier medio
disponible).