0% encontró este documento útil (0 votos)
6 vistas44 páginas

Matlab 3

El documento presenta una introducción a las estructuras repetitivas en Matlab, incluyendo los ciclos 'for', 'while' y 'repeat', así como ejemplos prácticos de su uso. Se detallan las características y sintaxis de cada tipo de ciclo, además de ejemplos de programas que ilustran su aplicación en situaciones como contar ceros, calcular series y encontrar divisores. También se abordan variables contadoras y acumuladoras, proporcionando ejemplos de código para su implementación.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
6 vistas44 páginas

Matlab 3

El documento presenta una introducción a las estructuras repetitivas en Matlab, incluyendo los ciclos 'for', 'while' y 'repeat', así como ejemplos prácticos de su uso. Se detallan las características y sintaxis de cada tipo de ciclo, además de ejemplos de programas que ilustran su aplicación en situaciones como contar ceros, calcular series y encontrar divisores. También se abordan variables contadoras y acumuladoras, proporcionando ejemplos de código para su implementación.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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 .

También podría gustarte