Sección 9 - Instituto De Matemáticas

   EMBED

Share

Preview only show first 6 pages with water mark for full document please download

Transcript

Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Introducci´on a los Computadores (CNM–130): Estructuras repetitivas en Matlab® Alejandro Piedrahita H. Instituto de Matem´ aticas Facultad de Ciencias Exactas y Naturales Universidad de Antioquia Copyleft «2013. Reproducci´ on permitida bajo los t´ erminos de la licencia de documentaci´ on libre GNU. Referencias Introducci´ on Ciclo para Contenido 1 Introducci´ on 2 Ciclo para 3 Ciclo mientras 4 N´ umeros aleatorios 5 Referencias Ciclo mientras N´ umeros aleatorios Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Estructuras de control repetitivas Las estructuras de control permiten modificar el flujo de ejecuci´ on de las instrucciones de un algoritmo o programa Se utilizan cuando en el desarrollo de la soluci´ on 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´ on Caracter´ısticas de los ciclos: Deben incluir una condici´ on de parada Deben finalizar luego de un n´ umero finito de veces Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Tipos de estructuras repetitivas Ciclo para (for) Se conoce a priori el n´ umero de veces que se deben repetir las instrucciones El n´ umero de repeticiones no depende de las sentencias del ciclo Ciclo mientras (while) No se conoce a priori el n´ umero de veces que se deben repetir las instrucciones La condici´ on de parada se eval´ ua antes de ejecutarse el ciclo El n´ umero de repeticiones puede depender de las sentencias del ciclo Ciclo repetir (repeat) No se conoce a priori el n´ umero de veces que se debe repetir el conjunto de instrucciones Se ejecuta primero el ciclo y luego se eval´ ua la condici´ on de parada El n´ umero de repeticiones puede depender de las sentencias contenidas en el ciclo Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Estructura repetitiva para Estructura de control en la que se conoce el n´ umero m´ aximo de iteraciones Elementos del bucle: V: variable de control del ciclo VI: valor inicial VF: valor final ID: incremento o decremento Sintaxis en Matlab for variable = inicio:incremento:final . . . end Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Ciclo for Sintaxis en Matlab for variable = inicio:incremento:final end >> for i = 1:5 disp(i) end 1 2 3 4 5 >> for k = 5:-1:1 disp(k) end 5 4 3 2 1 >> i i = >> for j = 1:2:5 fprintf(’j es %d \n’, j); fprintf(’j+1 es %d \n’, j+1); end j es 1 j+1 es 2 j es 3 j+1 es 4 j es 5 j+1 es 6 5 >> for i = 1:2:5 disp(i) end 1 3 5 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Variables contadoras Variables que se incrementan o disminuyen de forma constante cada vez que se ejecuta la instrucci´ on que lo contiene Usos: Cuentan las veces que ocurre un determinado suceso Controlan la ejecuci´ on de un bucle que se realiza un determinado n´ umero de veces. Todo contador debe tomar un valor inicial antes de ser usado Sintaxis de un contador: nombre variable = nombre variable ± constante >> a = a = 0 >> a = >> a = >> a = >> a = >> a a = 4 0 a a a a >> impares = 0; + + + + 1; 1; 1; 1; >> for i = 1:2:99 impares = impares+1; end >> impares impares = 50 Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Ejemplo Realice un programa en ( Matlab) que lea n n´ umeros enteros desde el teclado y cuente cu´ antos de ellos son ceros. Soluci´ on n: almacena el n´ umero de datos que se ingresan num: almacenar los valores de los enteros ingresados. numceros: variable contador, cuenta el n´ umero de ceros >> numceros = 0; >> num = input(’Ingrese un numero >> Ingrese un numero entero: 2 >> num = input(’Ingrese un numero >> Ingrese un numero entero: 0 >> numceros = numceros+1; >> num = input(’Ingrese un numero >> Ingrese un numero entero: 0 >> numceros = numceros+1; >> num = input(’Ingrese un numero >> Ingrese numero: -1 >> numceros numceros = 2 entero: ’); entero: ’); entero: ’); entero: ’); Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros 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´ on Ciclo para Ciclo mientras N´ umeros 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 >> suma = 0; >> i = 1; >> suma = suma >> i = i + 1; >> suma = suma >> i = i + 1; >> suma = suma >> i = i + 1; >> suma = suma >> suma suma = 4 + i; + i; + i; + i; >> mult = 1; >> i = 1; >> mult = mult >> i = i + 1; >> mult = mult >> i = i + 1; >> mult = mult >> i = i + 1; >> mult = mult >> mult mult = 24 o ´ * i; * i; * i; * i; nombre variable = 1 >> suma = 0; >> for i=1:4 suma = suma + i; end >> suma suma = 4 >> mult = 1; >> for i=1:4 mult = mult * i; end >> mult mult = 24 Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Ejemplo 2.2: serie geom´etrica Ejemplo Realice una funci´ on en Matlab que tenga como argumento un entero positivo n y calcule n X 1 1 1 1 1 = 1 + 2 + 3 + ··· + n i 2 2 2 2 2 i=1 Soluci´ on n: almacena el entero hasta donde se realiza la suma suma: almacena la n-´esima suma parcial. >> suma = 0; >> i = 1; >> suma = suma + 1/2∧i; >> i = i + 1; >> suma = suma + 1/2∧i; >> i = i + 1; >> suma = suma + 1/2∧i; >> i = i + 1; >> suma = suma + 1/2∧i; >> i = i + 1; >> suma = suma + 1/2∧i; >> i = i + 1; >> suma = suma + 1/2∧i; >> i = i + 1; >> suma suma = 0.9844 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios 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 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Ejemplo 2.3: Fibonacci Ejemplo Realice un programa en Matlab que calcule los n primeros t´erminos de la suci´ on de Fibonacci 1, 1, 2, 3, 5, 8, 13, 21, 34, . . . Soluci´ on n: almacena el entero hasta donde se realiza la suma El t´ermino n-´esimo de la sucesi´ on para n = 2, 3, . . . est´ a 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; >> ter = pri + seg ter = 2 >> pri = seg pri = 1 >> seg = ter seg = 2 >> ter = pri + seg ter = 3 Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios 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 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Ejemplo Realice un programa en Matlab que encuentre todos los divisores positivos de un entero no negativo n e imprima el n´ umero de divisores que posee. Soluci´ on 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 = 1; >> numdiv = 0; >> if rem(n,i)==0 disp(i); numdiv = numdiv + 1; end 1 >> i = i+1; >> if rem(n,i)==0 disp(i); numdiv = numdiv + 1; end >> i = i+1; >> if rem(n,i)==0 disp(i); numdiv = numdiv + 1; end 3 >> i = i+1; >> if rem(n,i)==0 disp(i); numdiv = numdiv + 1; end numdiv numdiv = 2 > Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios 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 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Ejemplo 2.5: n´ umeros primos Ejemplo Un n´ umero entero n > 1 es primo si los u ´nicos enteros positivos que lo dividen son 1 y n. Escriba una funci´ on en Matlab que tenga como argumento a n y devuelva true si n es primo y false en caso contrario. Soluci´ on 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; >> i = 2; >> primo = true; >> if rem(n,i)==0 primo = false; end >> i = i+1; >> if rem(n,i)==0 primo = false; end >> i = i+1; >> primo primo = 1 >> if rem(n,i)==0 primo = false; end >> i = i+1; >> if rem(n,i)==0 primo = false; end >> i = i+1; >> i i = 6 >> primo primo = 0 Introducci´ on Ciclo para Ciclo mientras N´ umeros 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´ on Ciclo para Ciclo mientras N´ umeros aleatorios Estructura repetitiva mientras Estructura de control utilizada cuando NO se conoce el n´ umero m´ aximo 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 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Ciclo mientras Sintaxis en Matlab while (expresion) instrucciones end >> n = 3; >> i = 1; >> eps = 1; while (1+eps/2 >> while i<=n disp(i); i = i + 1; end 1 2 3 >> while (num ∼= 666) num = input(’Ingrese numero: ’); end Ingrese numero: 3 Ingrese numero: -2 Ingrese numero: 666 >> eps eps = 2.2204e-16 >> num = 1; ∼= 1) eps = eps/2; end Introducci´ on Ciclo para Ciclo mientras N´ umeros 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´ umele 1. Repita este proceso hasta que el n´ umero obtenido sea 1. Realice un programa en Matlab que implemente dicho proceso. Observaciones Para n = 10 la sucesi´ on 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´ a en 1 en un n´ umero finito de pasos” La conjetura de Collatz es un problema abierto en matem´ aticas y hasta ahora no ha sido resuelto Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios 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 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Ejemplo 3.2: n´ umeros primos Ejemplo Un n´ umero entero n > 1 es primo si los u ´nicos enteros positivos que lo dividen son 1 y n. En el ejemplo (3.2) desarrollamos una funci´ on en Matlab que tiene como argumento a n y devuelve true si n es primo y false en caso contrario. Optimice esta funci´ on. Soluci´ on 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 = ab =⇒ a ≤ n ∨ b ≤ n √ 0 < a ≤ n ⇐⇒ a2 ≤ n Detener el ciclo cuando encuentre el primer divisor propio √ n: Introducci´ on Ciclo para Ciclo mientras N´ umeros 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´ on Ciclo para Ciclo mientras N´ umeros aleatorios Ejemplo 3.3: funci´on contadora de n´ umeros primos Ejemplo Implemente en Matlab la funci´ on definida por π(x) = n´ umero de primos ≤ x, x ∈ R. Soluci´ on >> n = 8; >> i = 2; >> numprimos = 0; >> if esprimo(i) numprimos = numprimos+1; end >> i = i + 1; >> numprimos numprimos = 1 >> if esprimo(i) numprimos = numprimos+1; end >> i = i + 1; >> if esprimo(i) numprimos = numprimos+1; end >> i = i + 1; >> if esprimo(i) numprimos = numprimos+1; end >> i = i + 1; >> if esprimo(i) numprimos = numprimos+1; end >> i = i + 1; >> numprimos numprimos = 3 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros 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´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Nociones de probabilidad Definici´ on 1 Experimento aleatorio: experimento cuyo resultado no puede ser determinado 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 o ´ 6} Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Nociones de probabilidad Definici´ on 1 Experimento aleatorio: experimento cuyo resultado no puede ser determinado de antemano. 2 Espacio muestral: conjunto Ω formado por todos los posibles resultados de un experimento aleatorio. Ejemplo 3 I Experimento: contar el n´ umero 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´ on de una part´ıcula que se mueve aleatoriamente sobre el eje real I Espacio muestral: Ω = R R Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Nociones de probabilidad Definici´ on 1 Evento: alg´ un subconjunto A ⊆ Ω del espacio muestral 2 Probabilidad de un evento A: n´ umero 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”: P ({c}) = P ({s}) = 1 = 0.5 2 Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Nociones de probabilidad Definici´ on 1 Evento: alg´ un subconjunto A ⊆ Ω del espacio muestral 2 Probabilidad de un evento A: n´ umero 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 La pobabilidad de “obtener 2 o ´ 5” es: 1 1 1 P ({2} ∪ {5}) = P ({2}) + P ({5}) = + = 6 6 3 I Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Nociones de probabilidad Definici´ on Frecuencia relativa: si al repetirse N veces el experimento, el evento A ocurre n(A) veces, la frecuencia relativa de A est´ a dada por fr(A) = n(A) N Proposici´ on 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: f r(A) = n(A) 56 = = 0.56 N 100 y f r(B) = n(B) 44 = = 0.44 N 100 Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Nociones de probabilidad Definici´ on (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´ on de subconjuntos de Ω (eventos) 3 P : F → R es una funci´ on 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) Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias N´ umeros pseudo-aleatorios Pregunta ¿C´ omo simular el lanzamiento de una moneda en un computador? No podemos generar n´ umeros aleatorios en un computador. Podemos generar n´ umeros pseudo-aleatorios por medio de m´etodos determin´ısticos. Los n´ umeros pseudo-aleatorios aparentan ser “aleatorios” pero son determin´ısticos. Generadores de congruencia lineal: generan una sucesi´ on de n´ umeros pseudo-aleatorios u0 , u1 , u2 , . . . que “lucen” como variables aleatorias que distribuyen uniformemente en [0, 1]. Introducci´ on Ciclo para Ciclo mientras N´ umeros 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´ on u0 , u1 , . . ., generada por xn+1 = axn + b (m´ od m) un = xn /m es una sucesi´ on de n´ umeros que resulta “casi imposible” de distinguir de una sucesi´ on de n´ umeros que distribuyen uniformemente en [0, 1). >> a = 3; b = 0; >> m = 7; x = 2; >> for i = 1:8 disp(x); x = rem(a*x+b,m); end 2 6 4 5 1 3 2 6 >> a = 171; b = 0; >> m = 29241; x = 3; >> for i = 1:8 disp(x); x = rem(a*x+b,m); end 3 513 0 0 0 0 0 0 >> a = 171; b = 0; >> m = 30269; x = 27218; >> for i = 1:8 disp(x/m); x = rem(a*x+b,m); end 0.8992 0.7639 0.6185 0.7614 0.1948 0.3085 0.7592 0.8276 Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias N´ umeros pseudoaleatorios en Matlab Comando Genera rand() randn() randi(n) N´ umero pseudoaleatorio que distribuye uniformemente en (0, 1) N´ umero pseudoaleatorio que distribuye normal en (0, 1) N´ umero pseudoaleatorio entero ≤ n que distribuye uniformemente >> rand() ans = 0.7475 >> randn() ans = 1.6050 >> randi(8) ans = 5 >> for i=1:10 disp(rand()) end 0.3673 0.7449 0.8923 0.2426 0.1296 0.1296 0.3500 0.2871 0.9275 0.0513 Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Ejemplo: simulaci´on de un experimento tipo Bernoulli Ejemplo Utilice n´ umeros pseudoaleatorios para simular la realizaci´ on del lanzamiento de una moneda corriente 10 veces consecutivas. Soluci´ on Experimento: lanzamiento de una moneda corriente 10 veces consecutivas Espacio muestral: Ω = {(a1 , . . . , a10 ) | ai = 0 o ´ 1} “ai = 0” ⇐⇒ “se obtuvo cara en el i-´esimo lanzamiento” “ai = 1” ⇐⇒ “se obtuvo sello en el i-´esimo lanzamiento” En cada lanzamiento hay igual posibilidad de obtener cara (0) o sello (1) Para simular cada lanzamiento, generamos un n´ umero pseudoaleatorio r que distribuya uniformemente en (0, 1): cara: 0 ≤ r < 1 2 sello: 1 2 ≤r≤1 Introducci´ on Ciclo para lanzamientos.m % Simula el lanzamiento de una moneda % corriente 10 veces consecutivas for i = 1:10 if rand() < 1/2 disp(0); else disp(1); end end >> lanzamientos 0 0 1 1 1 0 0 0 1 0 Ciclo mientras N´ umeros aleatorios >> lanzamientos 0 0 1 0 1 1 1 1 1 0 >> lanzamientos 1 1 1 1 1 1 0 0 0 0 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Referencias Ejemplo: simulaci´on de la probabilidad de un evento Ejemplo (Lanzamiento de una moneda corriente) Utilice n´ umeros pseudoaleatorios para simular la probabilidad de “obtener cara” al lanzar una moneda corriente. Soluci´ on 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 = 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 P ({0}) = P ({1}) = Introducci´ on Ciclo para Ciclo mientras lanzamientos.m function f = moneda(N) % Calcula la frecuencia relativa de % obtener cara al lanzar N veces una % moneda corriente % Cuenta el numero de caras obtenidas n = 0; for i = 1:N if rand() < 1/2 n = n+1; end end f = n/N; end >> moneda(20) ans = 0.4000 >> moneda(57) ans = 0.5088 N´ umeros aleatorios >> for i=100:100:2000 disp(moneda(i)) end 0.4300 0.4850 0.5333 0.4625 0.5200 0.5133 0.4786 0.5088 0.4956 0.5160 0.5064 0.4592 0.4946 0.4946 0.5020 0.5020 0.4925 0.4947 0.5139 0.5139 0.5100 0.5015 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios 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´ on, 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´ o Metodolog´ıa de la programaci´ on Segunda edici´ on. Alfaomega Grupo Editor, S.A., 2005 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Bibliograf´ıa II M.A. Criado Programaci´ on en lenguajes estructurados Alfaomega Grupo Editor, S.A. de C.V. Primera Edici´ on, 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 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios 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 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros aleatorios Bibliograf´ıa IV H.M. Mora Escobar Introducci´ on a C y a m´etodos num´ericos Universidad Nacional de Colombia (Sede Bogot´ a), 2004 A. Quarteroni, F. Salieri C´ alculo cient´ıfico con Matlab y Octave Springer-Verlag Italia, 2006 S.M. Ross Simulation Elsevier Inc., 2006 R. S´eroul Programming for Mathematicians Springer, 2000 E. Scheinerman C ++ for Mathematicians: An Introduction for Students and Professionals Taylor & Francis Group, LLC, 2006 Referencias Introducci´ on Ciclo para Ciclo mientras N´ umeros 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¸ca ˜o aos Sistemas Dinˆ amicos: uma abordagem pratica com Maxima Copyright © 2005, 2006, 2007 .