Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Introducción a los Computadores (CNM–130):
Estructuras repetitivas en Matlab®
Alejandro Piedrahita H.
Instituto de Matemáticas
Facultad de Ciencias Exactas y Naturales
Universidad de Antioquia
Copyleft «2013. Reproducción permitida bajo los
términos de la licencia de documentación libre GNU.
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Contenido
1 Introducción
2 Ciclo para
3 Ciclo mientras
4 Números aleatorios
5 Referencias
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Estructuras de control repetitivas
Las estructuras de control permiten modificar el flujo de ejecución
de las instrucciones de un algoritmo o programa
Se utilizan cuando en el desarrollo de la solución de un problema es
necesario ejecutar una serie de instrucciones repetidas de veces
El conjunto de instrucciones que se ejecuta repetidamente se llama
ciclo o bucle
Cada vez que se ejecuta el bucle se dice que se ha producido una
iteración
Caracterı́sticas de los ciclos:
Deben incluir una condición de parada
Deben finalizar luego de un número finito de veces
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Tipos de estructuras repetitivas
Ciclo para (for)
Se conoce a priori el número de veces que se deben repetir las
instrucciones
El número de repeticiones no depende de las sentencias del ciclo
Ciclo mientras (while)
No se conoce a priori el número de veces que se deben repetir las
instrucciones
La condición de parada se evalúa antes de ejecutarse el ciclo
El número de repeticiones puede depender de las sentencias del ciclo
Ciclo repetir (repeat)
No se conoce a priori el número de veces que se debe repetir el conjunto
de instrucciones
Se ejecuta primero el ciclo y luego se evalúa la condición de parada
El número de repeticiones puede depender de las sentencias contenidas
en el ciclo
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Estructura repetitiva para
Estructura de control en la que se conoce el número máximo de
iteraciones
Elementos del bucle:
V: variable de control del ciclo VF: valor final
VI: valor inicial ID: incremento o decremento
Sintaxis en Matlab
for variable = inicio:incremento:final
<instrucciones>
.
.
.
end
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ciclo for
Sintaxis en Matlab
for variable = inicio:incremento:final
<instrucciones>
end
>> for i = 1:5 >> for k = 5:-1:1
disp(i) disp(k)
end end
1 5
2 4
3 3
4 2
5 1
>> i >> for j = 1:2:5
i = fprintf(’j es %d \n’, j);
5 fprintf(’j+1 es %d \n’, j+1);
end
>> for i = 1:2:5 j es 1
disp(i) j+1 es 2
end j es 3
1 j+1 es 4
3 j es 5
5 j+1 es 6
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Variables contadoras
Variables que se incrementan o disminuyen de forma constante cada
vez que se ejecuta la instrucción que lo contiene
Usos:
Cuentan las veces que ocurre un determinado suceso
Controlan la ejecución de un bucle que se realiza un determinado
número de veces.
Todo contador debe tomar un valor inicial antes de ser usado
Sintaxis de un contador:
nombre variable = nombre variable ± constante
>> a = 0 >> impares = 0;
a =
0
>> a = a + 1; >> for i = 1:2:99
>> a = a + 1; impares = impares+1;
>> a = a + 1; end
>> a = a + 1;
>> a >> impares
a = impares =
4 50
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo
Realice un programa en ( Matlab) que lea n números enteros desde el
teclado y cuente cuántos de ellos son ceros.
Solución
n: almacena el número de datos que se ingresan
num: almacenar los valores de los enteros ingresados.
numceros: variable contador, cuenta el número de ceros
>> numceros = 0;
>> num = input(’Ingrese un numero entero: ’);
>> Ingrese un numero entero: 2
>> num = input(’Ingrese un numero entero: ’);
>> Ingrese un numero entero: 0
>> numceros = numceros+1;
>> num = input(’Ingrese un numero entero: ’);
>> Ingrese un numero entero: 0
>> numceros = numceros+1;
>> num = input(’Ingrese un numero entero: ’);
>> Ingrese numero: -1
>> numceros
numceros =
2
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo 2.1
nceros.m
% El programa recibe n enteros y determina
% el numero de ceros ingresados.
clear all;
numceros = 0;
n = input(’Ingrese n: ’);
for i=1:n
num = input(’Ingrese numero: ’);
if num == 0
numceros = numceros + 1;
end
end
fprintf(’Numero de ceros ingresados: %d \n’, numceros);
>> nceros
Ingrese n: 3
Ingrese n: -1
Ingrese n: 0
Ingrese n: 2
Numero de ceros ingresados: 1
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Variables acumuladoras
Almacenan valores que se incrementan o disminuyen de forma variable
Sintaxis de un acumulador en Matlab:
nombre variable = nombre variable ± variable
nombre variable = nombre variable * variable
Todo contador debe tomar un valor inicial antes de ser usado:
nombre variable = 0 ó nombre variable = 1
>> suma = 0; >> mult = 1; >> suma = 0;
>> i = 1; >> i = 1; >> for i=1:4
>> suma = suma + i; >> mult = mult * i; suma = suma + i;
>> i = i + 1; >> i = i + 1; end
>> suma = suma + i; >> mult = mult * i; >> suma
>> i = i + 1; >> i = i + 1; suma =
>> suma = suma + i; >> mult = mult * i; 4
>> i = i + 1; >> i = i + 1;
>> suma = suma + i; >> mult = mult * i; >> mult = 1;
>> suma >> mult >> for i=1:4
suma = mult = mult = mult * i;
4 24 end
>> mult
mult =
24
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo 2.2: serie geométrica
Ejemplo
Realice una función en Matlab que tenga como argumento un entero
positivo n y calcule n
X 1 1 1 1 1
i
= 1 + 2 + 3 + ··· + n
i=1
2 2 2 2 2
Solución
n: almacena el entero hasta donde se realiza la suma
suma: almacena la n-ésima suma parcial.
>> suma = 0; >> suma = suma + 1/2∧i;
>> i = 1; >> i = i + 1;
>> suma = suma + 1/2∧i; >> suma = suma + 1/2∧i;
>> i = i + 1; >> i = i + 1;
>> suma = suma + 1/2∧i; >> suma = suma + 1/2∧i;
>> i = i + 1; >> i = i + 1;
>> suma
>> suma = suma + 1/2∧i; suma =
>> i = i + 1; 0.9844
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
geom.m
function y = geom(n)
% Calcula la suma parcial
% de la serie geometrica
suma = 0;
for i=1:n
suma = suma + 1/2∧i;
end
y = suma;
end
>> geom(1)
ans =
0.5000
>> geom(6)
ans =
0.9844
>> geom(10)
ans =
0.9990
>> geom(20)
ans =
1.0000
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo 2.3: Fibonacci
Ejemplo
Realice un programa en Matlab que calcule los n primeros términos de la
sución de Fibonacci
1, 1, 2, 3, 5, 8, 13, 21, 34, . . .
Solución
n: almacena el entero hasta donde se realiza la suma
El término n-ésimo de la sucesión para n = 2, 3, . . . está dado por:
fn = fn−1 + fn−2 con f0 = f1 = 1
pri: representa a fn−2 ; seg: representa a fn−1 ; ter: representa a fn
>> pri = 1; seg = 1; >> seg = ter
seg =
>> ter = pri + seg 2
ter =
2 >> ter = pri + seg
ter =
>> pri = seg 3
pri =
1
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
fibonacci.m
% El programa calcula los n primeros
% terminos de la sucesion de Fibonacci.
clear all;
pri = 1; seg = 1;
n = input(’Ingrese n: ’);
disp(pri);
disp(seg);
for k=1:(n-2)
ter = pri + seg;
pri = seg;
seg = ter;
disp(ter)
end
>> fibonacci
Ingrese n: 9
1
1
2
3
5
8
13
21
34
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo
Realice un programa en Matlab que encuentre todos los divisores positivos
de un entero no negativo n e imprima el número de divisores que posee.
Solución
n: almacena el entero positivo ingresado por el usuario
i: almacena los divisores de n y controla el ciclo
numdiv: variable contadora, cuenta los divisores de n
>> n = 15; >> i = i+1;
>> i = 1; >> if rem(n,i)==0
>> numdiv = 0; disp(i);
numdiv = numdiv + 1;
end
>> if rem(n,i)==0 3
disp(i);
numdiv = numdiv + 1; >> i = i+1;
end >> if rem(n,i)==0
1 disp(i);
numdiv = numdiv + 1;
end
>> i = i+1;
>> if rem(n,i)==0
disp(i); > numdiv
numdiv = numdiv + 1; numdiv =
end 2
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo 2.4: divisores de un entero
divisores.m
% El programa calcula los divisores positivos
% de un entero no negativo n.
clear all;
n = input(’Ingrese n: ’);
numdiv = 0;
for i=1:n
if rem(n,i) == 0
disp(i);
numdiv = numdiv + 1;
end
end
fprintf(’ %d tiene %d divisores \n’, n, numdiv);
>> divisores
Ingrese n: 12
1
2
3
4
6
12
12 tiene 6 divisores
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo 2.5: números primos
Ejemplo
Un número entero n > 1 es primo si los únicos enteros positivos que lo
dividen son 1 y n. Escriba una función en Matlab que tenga como
argumento a n y devuelva true si n es primo y false en caso contrario.
Solución
n: almacena el entero positivo ingresado por el usuario
i: almacena los divisores de n y controla el ciclo
primo: variable booleana ( true si n es primo y false sino lo es)
>> n = 35; >> if rem(n,i)==0 primo = false; end
>> i = 2; >> i = i+1;
>> primo = true;
>> if rem(n,i)==0 primo = false; end
>> if rem(n,i)==0 primo = false; end >> i = i+1;
>> i = i+1;
>> i
>> if rem(n,i)==0 primo = false; end i =
>> i = i+1; 6
>> primo >> primo
primo = primo =
1 0
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
primo.m
function y = primo(n)
% La funcion devuelve true si n es primo
% Se asume que n es un entero positivo
if n==1
y = false;
elseif n == 2
y = true;
else
y = true;
for i=2:(n/2)
if rem(n,i) == 0
y = false;
end
end
end
end
>> primo(32)
ans =
0
>> primo(17)
ans =
1
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Estructura repetitiva mientras
Estructura de control utilizada cuando NO se conoce el número
máximo de iteraciones
Elementos del bucle:
expresion: variable de control del ciclo
instrucciones: sentencias a ejecutar si expresion es verdadera
Sintaxis en Matlab
while (expresion)
instrucciones
.
.
.
end
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ciclo mientras
Sintaxis en Matlab
while (expresion)
instrucciones
end
>> n = 3; >> eps = 1;
>> i = 1;
while (1+eps/2 ∼= 1) eps = eps/2; end
>> while i<=n
disp(i);
i = i + 1; >> eps
end eps =
1 2.2204e-16
2
3 >> num = 1;
>> while (num ∼= 666)
num = input(’Ingrese numero: ’);
end
Ingrese numero: 3
Ingrese numero: -2
Ingrese numero: 666
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo (3.1): la conjetura de Collatz (Ulam)
Ejemplo (Problema de Collatz)
Sea n un entero positivo. Si n es par, divı́dalo entre 2, sino lo es,
multiplı́quelo por 3 y súmele 1. Repita este proceso hasta que el número
obtenido sea 1. Realice un programa en Matlab que implemente dicho
proceso.
Observaciones
Para n = 10 la sucesión generada es
10 , 5 , 16 , 8 , 4 , 2 , 1
Conjetura de Collatz:
“Para cualquier entero positivo n, el proceso iterativo de
Collatz arriba descrito siempre terminará en 1 en un número
finito de pasos”
La conjetura de Collatz es un problema abierto en matemáticas y hasta
ahora no ha sido resuelto
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
collatz.m
% Itera el proceso de Collatz
clear all;
n = input(’Ingrese entero: ’);
while n ∼= 1
disp(n);
if rem(n,2) == 0
n = n/2;
else
n = 3*n + 1;
end
end
disp(n);
>> collatz
Ingrese n: 10
10
5
16
8
4
2
1
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo 3.2: números primos
Ejemplo
Un número entero n > 1 es primo si los únicos enteros positivos que lo
dividen son 1 y n. En el ejemplo (3.2) desarrollamos una función en
Matlab que tiene como argumento a n y devuelve true si n es primo y
false en caso contrario. Optimice esta función.
Solución
n: almacena el entero positivo ingresado por el usuario
k: almacena los divisores de n y controla el ciclo
y: variable booleana ( true si n es primo y false sino lo es)
√
Al menos un divisor propio de n (si existe) es menor o igual que n:
√ √
n = ab =⇒ a ≤ n ∨ b ≤ n
√
0 < a ≤ n ⇐⇒ a2 ≤ n
Detener el ciclo cuando encuentre el primer divisor propio
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
esprimo.m
function y = esprimo(n)
% La funcion devuelve true si n es primo
% Se asume que n es un entero positivo
if n==1
y = false;
elseif n==2
y = true;
else
y = true;
k = 2;
while (y && k∧2<=n)
if rem(n,k)==0
y = false;
end
k = k+1;
end
end
end
>> esprimo(13)
ans =
1
>> esprimo(49)
ans =
0
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo 3.3: función contadora de números primos
Ejemplo
Implemente en Matlab la función definida por
π(x) = número de primos ≤ x, x ∈ R.
Solución
>> n = 8; >> if esprimo(i)
>> i = 2; numprimos = numprimos+1;
>> numprimos = 0; end
>> i = i + 1;
>> if esprimo(i)
numprimos = numprimos+1; >> if esprimo(i)
end numprimos = numprimos+1;
>> i = i + 1; end
>> i = i + 1;
>> numprimos
numprimos = >> if esprimo(i)
1 numprimos = numprimos+1;
end
>> i = i + 1;
>> if esprimo(i)
numprimos = numprimos+1; >> numprimos
end numprimos =
>> i = i + 1; 3
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
primos.m
function y = primos(x)
% Cuenta el numero de primos menores o iguales que n
% Requiere la funcion primo del ejemplo (3.2)
numprimos = 0;
i = 2;
while i<=x
if esprimo(i)
numprimos = numprimos + 1;
end
i = i+1;
end
y = numprimos;
end
>> primos(1)
ans =
0
>> primos(pi)
ans =
2
>> primos(150)
ans =
35
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Nociones de probabilidad
Definición
1 Experimento aleatorio: experimento cuyo resultado no puede ser de-
terminado de antemano.
2 Espacio muestral: conjunto Ω formado por todos los posibles resultados
de un experimento aleatorio.
Ejemplo 1
I Experimento: lanzamiento de una moneda corriente
I Espacio muestral: Ω = {c, s} donde c =“cara” y s =“sello”
Ejemplo 2
I Experimento: lanzamiento de un dado corriente 3 veces
consecutivas
I Espacio muestral: Ω = {(a1 , a2 , a3 ) | ai = 1, 2, 3, 4, 5 ó 6}
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Nociones de probabilidad
Definición
1 Experimento aleatorio: experimento cuyo resultado no puede ser de-
terminado de antemano.
2 Espacio muestral: conjunto Ω formado por todos los posibles resultados
de un experimento aleatorio.
Ejemplo 3
I Experimento: contar el número de veces que es necesario lanzar
una moneda corriente hasta obtener “cara” por primera vez
I Espacio muestral: Ω = {1, 2, 3, . . .}
Ejemplo 4
I Experimento: registrar la posición de una partı́cula que se mueve
aleatoriamente sobre el eje real
I Espacio muestral: Ω = R
R
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Nociones de probabilidad
Definición
1 Evento: algún subconjunto A ⊆ Ω del espacio muestral
2 Probabilidad de un evento A: número real P (A) que nos indica la
“posibilidad” que tiene el evento A de ocurrir y satisface:
P (A) ≥ 0 para todo evento A;
P (Ω) = 1;
Si A1 , A2 , . . . son eventos mutuamente excluyentes (Ai ∩ Aj = ∅),
P (A1 ∪ A1 ∪ · · · ) = P (A1 ) + P (A2 ) + · · ·
Ejemplo 5
I Experimento: lanzamiento de una moneda corriente
I Eventos: {c} = “se obtuvo cara” y {s} = “se obtuvo sello”
I Es igualmente probable obtener “cara” o “sello”:
1
P ({c}) = P ({s}) = = 0.5
2
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Nociones de probabilidad
Definición
1 Evento: algún subconjunto A ⊆ Ω del espacio muestral
2 Probabilidad de un evento A: número real P (A) que nos indica la
“posibilidad” que tiene el evento A de ocurrir y satisface:
P (A) ≥ 0 para todo evento A;
P (Ω) = 1;
Si A1 , A2 , . . . son eventos mutuamente excluyentes (Ai ∩ Aj = ∅),
P (A1 ∪ A1 ∪ · · · ) = P (A1 ) + P (A2 ) + · · ·
Ejemplo 6
I Experimento: lanzamiento de un dado corriente
I Eventos: cualquier subconjunto de Ω = {1, . . . , 6}
I Es igualmente probable obtener cualquier “cara”:
1
P ({1}) = · · · = P ({6}) = = 0.1666 · · ·
6
I La pobabilidad de “obtener 2 ó 5” es:
1 1 1
P ({2} ∪ {5}) = P ({2}) + P ({5}) = + =
6 6 3
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Nociones de probabilidad
Definición
Frecuencia relativa: si al repetirse N veces el experimento, el evento A
ocurre n(A) veces, la frecuencia relativa de A está dada por
n(A)
fr(A) =
N
Proposición
La frecuencia relativa de un evento nos permite estimar su probabilidad:
fr(A) → P (A) cuando n se hace “grande”
Ejemplo 7
I Experimento: se lanza una moneda corriente n = 100 veces y en 56 de
los lanzamientos se obtiene “cara”
I Eventos: A = “se obtuvo cara” y B = “se obtuvo sello”
I Las frecuencias relativas de los eventos A y B son:
n(A) 56 n(B) 44
f r(A) = = = 0.56 y f r(B) = = = 0.44
N 100 N 100
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Nociones de probabilidad
Definición (Resumen)
Un espacio de probabilidad es una terna (Ω, F, P ) donde:
1 Ω es un conjunto formado por todos los posibles resultados de un
experimento aleatorio (espacio muestral)
2 F es una colección de subconjuntos de Ω (eventos)
3 P : F → R es una función tal que
P (A) ≥ 0 para todo evento A;
P (Ω) = 1;
Si A1 , A2 , . . . son eventos mutuamente excluyentes (Ai ∩ Aj = ∅),
P (A1 ∪ A1 ∪ · · · ) = P (A1 ) + P (A2 ) + · · ·
Propiedades
1 P (∅) = 0
2 A ∩ B = ∅ =⇒ P (A ∪ B) = P (A) + P (B)
3 P (Ac ) = 1 − P (A)
4 P (A ∪ B) = P (A) + P (B) − P (A ∩ B)
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Números pseudo-aleatorios
Pregunta
¿Cómo simular el lanzamiento de una moneda en un computador?
No podemos generar números aleatorios en un computador.
Podemos generar números pseudo-aleatorios por medio de métodos de-
terminı́sticos.
Los números pseudo-aleatorios aparentan ser “aleatorios” pero son de-
terminı́sticos.
Generadores de congruencia lineal: generan una sucesión de números
pseudo-aleatorios u0 , u1 , u2 , . . . que “lucen” como variables aleatorias
que distribuyen uniformemente en [0, 1].
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Generadores de congruencia
Generador de congruencia lineal
Sea m un entero positivo, a y b enteros y x0 ∈ {1, . . . , m}. Entonces la
sucesión u0 , u1 , . . ., generada por
xn+1 = axn + b (mód m)
un = xn /m
es una sucesión de números que resulta “casi imposible” de distinguir de una
sucesión de números que distribuyen uniformemente en [0, 1).
>> a = 3; b = 0; >> a = 171; b = 0; >> a = 171; b = 0;
>> m = 7; x = 2; >> m = 29241; x = 3; >> m = 30269; x = 27218;
>> for i = 1:8 >> for i = 1:8 >> for i = 1:8
disp(x); disp(x); disp(x/m);
x = rem(a*x+b,m); x = rem(a*x+b,m); x = rem(a*x+b,m);
end end end
2 3 0.8992
6 513 0.7639
4 0 0.6185
5 0 0.7614
1 0 0.1948
3 0 0.3085
2 0 0.7592
6 0 0.8276
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Números pseudoaleatorios en Matlab
Comando Genera
rand() Número pseudoaleatorio que distribuye uniformemente en (0, 1)
randn() Número pseudoaleatorio que distribuye normal en (0, 1)
randi(n) Número pseudoaleatorio entero ≤ n que distribuye uniformemente
>> rand() >> for i=1:10
ans = disp(rand())
0.7475 end
0.3673
0.7449
>> randn() 0.8923
ans = 0.2426
1.6050 0.1296
0.1296
0.3500
>> randi(8) 0.2871
ans = 0.9275
5 0.0513
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo: simulación de un experimento tipo Bernoulli
Ejemplo
Utilice números pseudoaleatorios para simular la realización del lanzamiento
de una moneda corriente 10 veces consecutivas.
Solución
Experimento: lanzamiento de una moneda corriente 10 veces
consecutivas
Espacio muestral: Ω = {(a1 , . . . , a10 ) | ai = 0 ó 1}
“ai = 0” ⇐⇒ “se obtuvo cara en el i-ésimo lanzamiento”
“ai = 1” ⇐⇒ “se obtuvo sello en el i-ésimo lanzamiento”
En cada lanzamiento hay igual posibilidad de obtener cara (0) o sello
(1)
Para simular cada lanzamiento, generamos un número pseudoaleatorio
r que distribuya uniformemente en (0, 1):
1 1
cara: 0 ≤ r < 2
sello: 2
≤r≤1
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
lanzamientos.m >> lanzamientos
% Simula el lanzamiento de una moneda 0
% corriente 10 veces consecutivas 0
1
for i = 1:10 0
if rand() < 1/2 1
disp(0); 1
1
else
1
disp(1); 1
end 0
end
>> lanzamientos >> lanzamientos
0 1
0 1
1 1
1 1
1 1
0 1
0 0
0 0
1 0
0 0
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Ejemplo: simulación de la probabilidad de un evento
Ejemplo (Lanzamiento de una moneda corriente)
Utilice números pseudoaleatorios para simular la probabilidad de “obtener
cara” al lanzar una moneda corriente.
Solución
Experimento: lanzamiento de una moneda corriente
Espacio muestral: Ω = {0, 1}
{0} = “se obtuvo cara”
{1} = “se obtuvo sello”
Es igualmente probable obtener cara (0) o sello (1):
1
P ({0}) = P ({1}) = = 0.5
2
Para simular P ({0}) utilizamos frecuencias relativas: si al lanzar la
moneda N veces, el evento {0} ocurre n veces, entonces
n
f r({0}) = → P ({0}) cuando n se hace “grande”
N
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
lanzamientos.m >> for i=100:100:2000
function f = moneda(N) disp(moneda(i))
% Calcula la frecuencia relativa de end
% obtener cara al lanzar N veces una 0.4300
% moneda corriente 0.4850
% Cuenta el numero de caras obtenidas 0.5333
n = 0; 0.4625
for i = 1:N 0.5200
if rand() < 1/2 0.5133
n = n+1; 0.4786
end 0.5088
end 0.4956
f = n/N; 0.5160
end 0.5064
0.4592
0.4946
>> moneda(20) 0.4946
ans = 0.5020
0.4000 0.5020
0.4925
0.4947
0.5139
>> moneda(57)
0.5139
ans =
0.5088 0.5100
0.5015
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Bibliografı́a I
S. Attaway
Matlab: A Practical Introduction to Programming and Problem
Solving
Butterworth-Heinemann, 2011
L. Blanco
Probabilidad
Universidad Nacional de Colombia, Primera edición, 2004.
J.W. Brown, D.J. Murdoch
A First Course in Statistical Programming With R
Cambridge University Press, 1th edition , 2008
D. Burton
Elementary Number Theory
McGraw Hill Higher Education, 5th edition, 2002
O. Cairó
Metodologı́a de la programación
Segunda edición. Alfaomega Grupo Editor, S.A., 2005
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Bibliografı́a II
M.A. Criado
Programación en lenguajes estructurados
Alfaomega Grupo Editor, S.A. de C.V. Primera Edición, 2006
S. Ghahramani
Fundamentals of Probability with Stochastic Processes
Pearson Education, Inc., 2005
D.J. Hunter
Essentials of Discrete Mathematics
Jones & Bartlett Learning; 2 edition, 2010
H.P. Langtangen
A Primer on Scientific Programming with Python
Springer, 2011
O. Jones, R. Maillardet, A. Robinson
Introduction to Scientific Programming and Simulation Using R
Chapman and Hall/CRC; 1 edition, 2009
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Bibliografı́a III
J. Kiusalaas
Numerical Methods in Engineering with Matlab
Cambridge University Press, 2 edition, 2009
D.E. Knuth
The Art of Computer Programming
Volume 1, Fundamental Algorithms
Addison Wesley Longman, 1997
S. Lipschutz
Schaum’s Outline of Essential Computer Mathematics
McGraw-Hill, 1th edition, 1982
Ch.F. Van Loan
Introduction to Scientific Computing
Prentice-Hall, Inc., 1997
C.B. Moler
Numerical Computing with Matlab
SIAM, 2004
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Bibliografı́a IV
H.M. Mora Escobar
Introducción a C y a métodos numéricos
Universidad Nacional de Colombia (Sede Bogotá), 2004
A. Quarteroni, F. Salieri
Cálculo cientı́fico con Matlab y Octave
Springer-Verlag Italia, 2006
S.M. Ross
Simulation
Elsevier Inc., 2006
R. Séroul
Programming for Mathematicians
Springer, 2000
E. Scheinerman
C ++ for Mathematicians: An Introduction for Students and
Professionals
Taylor & Francis Group, LLC, 2006
Introducción Ciclo para Ciclo mientras Números aleatorios Referencias
Bibliografı́a V
A. Shen
Algorithms and Programming
Springer Undergraduate Texts in Mathematics and Technology, 2010
P. Tymann
Schaum’s Outline of Principles of Computer Science
McGraw-Hill, 1th edition, 2008
J. Villate
Introdução aos Sistemas Dinâmicos: uma abordagem pratica com
Maxima
Copyright © 2005, 2006, 2007 .