Academia.eduAcademia.edu

ENUNCIADOS CONDICIONALES Y CICLOS

GNU Octave es un programa libre, que utiliza una interpretación de lenguaje de alto nivel, y está diseñado especialmente para realizar cálculos numéricos. No está diseñado para hacer cálculos simbólicos o analíticos (como el programa Wol-fram Mathematica), aunque cuenta con extensiones que hacen operaciones analíticas sencillas. GNU Octave utiliza un intérprete para compilar y ejecutar una secuencia de instruc-ciones dadas por el usuario. Su lenguaje es compatible con el del software MATLAB, lo que lo hace un programa versátil. Octave puede ser utilizado para resolver problemas de diferentes tipos. Es usado por distintas empresas y centros de investigación alrededor del mundo en el análisis de datos, procesamiento de imágenes, econometría, análisis estadístico de datos, entre otros. 2. Variables y operadores Comenzamos con variables numéricas sencillas. Podemos asignarle valor a una variable de nombre a mediante el signo igual. >> a = 3 a = 3 >> x = pi x = pi Octave almacena este valor, y se lo podemos requerir después: >> a a = 3 >> x x = pi Octave está diseñado para trabajar con vectores y matrices. Los renglones se escriben >> b = [1, 2, 3] b = 1 2 3 Y las columnas, >> c = [1; 2; 3] c = 1 2 3

ENUNCIADOS CONDICIONALES Y CICLOS ANÁLISIS NUMÉRICO 1. introducción GNU Octave es un programa libre, que utiliza una interpretación de lenguaje de alto nivel, y está diseñado especialmente para realizar cálculos numéricos. No está diseñado para hacer cálculos simbólicos o analı́ticos (como el programa Wolfram Mathematica), aunque cuenta con extensiones que hacen operaciones analı́ticas sencillas. GNU Octave utiliza un intérprete para compilar y ejecutar una secuencia de instrucciones dadas por el usuario. Su lenguaje es compatible con el del software MATLAB, lo que lo hace un programa versátil. Octave puede ser utilizado para resolver problemas de diferentes tipos. Es usado por distintas empresas y centros de investigación alrededor del mundo en el análisis de datos, procesamiento de imágenes, econometrı́a, análisis estadı́stico de datos, entre otros. 2. Variables y operadores Comenzamos con variables numéricas sencillas. Podemos asignarle valor a una variable de nombre a mediante el signo igual. >> a = 3 a=3 >> x = pi x = pi Octave almacena este valor, y se lo podemos requerir después: >> a a=3 >> x x = pi Octave está diseñado para trabajar con vectores y matrices. Los renglones se escriben >> b = [1, 2, 3] b = 1 2 3 Y las columnas, >> c = [1; 2; 3] c=1 2 3 1 2 ENUNCIADOS CONDICIONALES Y CICLOS Una matriz, por tanto serı́a: >> A = [1, 2; 3, 4] A=1 2 3 4 Podemos definir dos variables, y luego hacer operaciones con ellas. Por ejemplo: >> p = 2 p=2 >> q = 4 q=4 >> p + q ans = 6 La palabra ans en la última lı́nea corresponde a ”answer”. Octave da una respuesta a la instrucción dada. Podemos usar ans como variable también. En el ejemplo anterior, ans = 6, por tanto si escribimos: >> ans + 1 ans = 7 Podemos ”borrar” el contenido de una variable con el comando clear, seguido de la variable que queremos borrar. >> clear b Podemos saber qué variables tienen un valor asignado con el comando ”who” >> who Podemos borrar todas las variables escribiendo simplemente ”clear”. >> clear Actividad 2.1. Realiza las siguientes operaciones, con las variables que acabas de introducir. (1) (a ∗ 10) + q (2) cos(a) p (3) a ∗ sin(x) (4) Borra el contenido de a, y luego llama a la variable desde Octave. ¿qué sucede? 3. Funciones Una función en Octave, recibe una o más variables de entrada y entrega una o más variables de salida. Por ejemplo, la función coseno recibe 0 y entrega 1. >> cos(0) ans = 1 ENUNCIADOS CONDICIONALES Y CICLOS 3 Hay funciones que reciben dos variables y entregan una. Por ejemplo, la función mı́nimo: >> min(2, 10) ans = 2 Podemos asignar a una variable el resultado de una función: >> h = min(10, 25) h = 10 >> k = cos(0) k=1 La función mı́nimo puede recibir más variables. Sólo hace falta escribir las variables dentro de un vector. Por ejemplo, primero definimos el vector >> x = [3, 5, 6, 7, 8] x=3 5 6 7 8 Después evaluamos a la función mı́nimo en el vector x, >> min(x) ans = 3 4. Funciones creadas por el usuario El usuario puede crear sus propias funciones. Comenzamos por indicar a Octave el camino de la carpeta de la cuál queremos que lea los archivos que vamos a utilizar. Para ello creamos una carpeta con un nombre sin espacios en el directorio c:. En nuestro ejemplo la llamaremos ”carpeta1”. Después introducimos el comando de cambio de directorio en la interfaz de Octave: >> cd: ’c: \\ carpeta1’ Abrimos ahora un bloc de notas, y lo guardamos en la carpeta que acabamos de crear, (la carpeta llamada ”carpeta1”) con extensión .m. En general, se puede escribir cualquier nombre, sin utilizar espacios. Llamaremos a este archivo de nuestro primer ejemplo ”f1”. Una función tiene la siguiente estructura. function salida = nombredelafuncion(E1 , E2 , ...) instrucción1 ; instrucción2 ; instrucción3 ; endfunction 4 ENUNCIADOS CONDICIONALES Y CICLOS Además el archivo .m debe de llamarse como el nombredelafuncion. En nuestro caso, siguiendo con el ejemplo, serı́a f 1. El nombre de la función no debe de tener espacios. salida representa a las variables de salida. E1 , E2 ,... representan a las variables de entrada. salida es una variable, que también puede ser un vector, por lo que podemos tener varias variables de salida. Ejemplo 4.1. Crea tus propias funciones y llámalas desde Octave. Edita un archivo .m con el nombre f1. Escribe lo siguiente en el archivo: function s=f1(x) s = x2 ; endfunction Ahora llámala desde Octave. Recuerda escribir un número en su argumento. En este ejemplo, escribimos el número 5 en el argumento, y obtenemos el cuadrado de 5. >> f 1(5) ans = 25 Actividad 4.2. Crea las funciones que se te piden. (1) Escribe una función que calcule el coseno cuadrado. Llámala f 2. Es decir f2 (x) = cos2 (x). Verifica que f2 funcione correctamente cuando es llamada desde Octave. (2) Escribe una función de dos variables. f3 (x, y) = x+y. Verifica que f3 funcione correctamente cuando es llamada desde Octave. (3) Escribe una función que entregue dos resultados, y reciba dos variables. f4 (x, y) = [x ∗ y, x + y]. Desde octave debe de correr como >> f 4(1, 2) ans = 2 3 (4) Escribe dos funciones más: f5 (x) = x3 + 4x2 − 10 y f6 (x) = x3 − 7x2 + 14x − 6 5. El comando disp() Algunos comandos que nos serán útiles son los siguientes. disp(): Este comando recibe una variable y la despliega en la pantalla de octave. Viene de ”display” en inglés. Ejemplo, si a = 10, obtenemos >> disp(a) 10 También podemos utilizarlo con cadenas de letras o mensajes. Éstos deben de ir entre comillas: ENUNCIADOS CONDICIONALES Y CICLOS 5 >> disp(”Hola mundo”) Hola mundo Escribe disp(”Hola”), seguido de disp(”mundo”). Ahora escribe disp(”Hola \n”), seguido de disp(”mundo”) y observa la diferencia. 6. Scripts En lugar de escribir una secuencia de comandos directamente en la interfaz de Octave, puedes escribirlos en un archivo de texto (guardado con extensión .m), y después ejecutar ese archivo desde la interfaz de Octave. Esto te permite hacer cualquier cambio a tu secuencia de comandos, sin tener que volver a escribirlo todo de nuevo. A un archivo compuesto de una secuencia de comandos se le llama script. Actividad 6.1. Escribe tus propio script. (1) Escribe un script que haga lo siguiente. Asigne los siguientes valores a las variables: x = 5, y = 4, z = 10. Después que evalúe f 1 en x y lo multiplique por f 2 evaluado en z. Finalmente, divide el resultado entre y. (2) Escribe un script que haga lo anterior y que al final despliegue el mensaje: ”el resultado es”, y luego el valor del resultado. 6.1. comentarios. Cuando un script se vuelve largo, es bueno escribir comentarios que nos hagan recordar que sucede en cada lı́nea. Lo que sigue después de un signo # es ignorado por Octave. Ejemplo: >> #disp(”Hola mundo”) No ejecuta el comando disp(). 7. El enunciado if El enunciado if nos ayuda a controlar el comportamiento de un script. La sintaxis general es if condición1 instrucción1 instrucción2 ... endif Si la condición es verdadera (distinta de cero), las instrucciones son ejecutadas. Por ejemplo, a=1; b=a/2; if(a > b) disp(”a es mayor que b”) endif 6 ENUNCIADOS CONDICIONALES Y CICLOS En el paréntesis que sigue a if , va un enunciado que puede ser falso o verdadero. Si a > b se despliega el mensaje ”a es mayor que b”. Si a < b o si a = b entonces el script se sigue de largo e ignora las instrucciones que se encuentran entre el if y el endif. Actividad 7.1. Realiza los siguientes ejercicios. (1) El comando: input(”mensaje”) despliega un mensaje, y recibe un valor del usuario. Por ejemplo: >> c = input(”escribe un numero : \n”) Desplegará en la pantalla el mensaje ”escribe un numero:”, y esperará a que se le asigne un valor desde el teclado. El valor que se asigne será almacenado en la variable c. Escribe un script que pida un numero entre 0 y 1000. Luego que despliegue los mensajes ”por favor regrese el lunes” si el usuario introduce un número menor que 500; y ”por favor regrese el viernes” si el usuario introduce un número mayor o igual a 500. Escribe un script que pida un numero a un usuario. Luego que despliegue los mensajes ”por favor regrese el lunes” si el usuario introduce un número menor que 100; ”por favor regrese el martes” si el usuario introduce un número mayor o igual a 100 pero menor a 500 y ”por favor regrese el viernes” si el usuario introduce un número mayor o igual a 500 pero menor a 1000. Finalmente, que escriba el mensaje ”por favor, no regrese”, si escribió un número mayor o igual que 1000. Podemos usar else. Este comando se escribe entre if y endif, y da una alternativa de instrucciones si no se cumple la condición del if. if (condición1) instrucciónA1 instrucciónA2 ... else instrucciónB1 instrucciónB2 ... endif 8. ciclos Los ciclos nos permiten llevar a cabo una acción iterativa. 8.1. Ciclo For. La sintaxis de for es como sigue: for condición instrucción1 instrucción2 instrucción3 ENUNCIADOS CONDICIONALES Y CICLOS 7 endfor Ejemplo. Este script escribe los números del 1 al 10 for i=1:10 disp(i) endfor Podemos salir del ciclo for con el comando break. El siguiente script despliega los cuadrados de los números del 1 al 10, pero termina el ciclo cuando un cuadrado es mayor que 7. for i = 1 : 10 a = i2 ; if(a > 7) break endif disp(a) endfor Actividad 8.1. Usando el ciclo for, escribe un programa que calcule f2 (i), para los primeros 30 números enteros positivos y que despliegue sus resultados en la pantalla, pero que termine el ciclo si f2 (i) es mayor que 30. 8.2. Ciclo While. Una alternativa para los ciclos son los enunciados while. La sintaxis para la construcción de while es la que sigue. while condición instrucción1 instrucción2 instrucción3 ... endwhile Por ejemplo y = −99; x = 100; while y < x if (y > 0) disp(y) disp(”es impar y positivo”) else disp(”es impar y negativo”) endif y=y+2; endwhile El comando break también puede ser usado para salir del ciclo while. 8 ENUNCIADOS CONDICIONALES Y CICLOS Actividad 8.2. Describe cómo funciona el script anterior. Actividad 8.3. Escribe un script que genere números aleatorios entre 1 y 10. Que despliegue los números en la pantalla. Que continúe haciendo esto mientras los números sean menores que 5 y que se detenga cuando salga el primer número mayor o igual a 5. Actividad 8.4. Escribe un script para encontrar el mı́nimo valor de N tal que N X 1 − 1.6| < 10−2 . | 2 i i=1 Despliega el el valor de N en la pantalla. En este mismo script, detén el proceso si encuentras el valor de N o si N > 100. Actividad 8.5. Escribe un script que divida el intervalo [0, 1] en dos partes iguales. Después que genere un número aleatorio entre 0 y 1. Si el número es menor que .7, que se desplieguen en la pantalla los números correspondientes al intervalo de la izquierda (es decir [0,1/2]), si el número es mayor o igual a .7, que se desplieguen en la pantalla los extremos del intervalo de la derecha (es decir [1/2,1]). Que se repita este proceso hasta que el intervalo tenga una longitud menor que 10−4 . Al terminar, que se impriman los números de los extremos del intervalo final. 9. El método de bisección Dada una función f y un intervalo [a, b], tal que f (a) y f (b) tienen signos opuestos, el método de la bisección busca un número p con f (p) = 0 en el intervalo [a, b]. El método consiste en bisectar el intervalo [a, b] y localizar la mitad que contiene a p. Después se repite este proceso hasta que el nuevo intervalo sea lo suficientemente pequeño para localizar a p con una precisión dada. Para comenzar, hacemos p1 = a y p2 = b y nos aseguramos de que f (p1 ) y f (p2 ) tengan signos opuestos. Después calculamos el punto medio p3 = a+b . Si f (p3 ) = 0, 2 hemos encontrado la raı́z. De otro modo, elegimos entre p1 y p2 , a aquél cuya imagen (f (pi )) tenga signo opuesto a f (p3 ). El elegido será llamado p4 . Después se repite el proceso, calculando el punto medio entre p3 y p4 : p5 , y ası́ sucesivamente. Algoritmo para el método de biseción. Entrada: extremos a, b; tolerancia T OL; número máximo de iteraciones N0 . Salida: solución aproximada o mensaje de fracaso. Paso 1. Tomar i = 1; F A = f (a) Paso 2. Mientras i ≤ N0 hacer pasos del 3 al 6. Paso 3. Tomar p = F P = f p. (a+b) 2 Paso 4. Si F P = 0 o (b − a)/2 < T OL Imprimir en pantalla (p) ENUNCIADOS CONDICIONALES Y CICLOS 9 Detener el programa. Paso 5. Tomar i = i + 1 Paso 6. Si (F A)(F P ) > 0, entonces tomar a = p; FA = FP si no, tomar b = p Paso 7. Imprimir en pantalla (”se han superado las iteraciones previstas”, N0 ) Detener el programa. Actividad 9.1. Usa 100 pasos del método de bisección para encontrar una raı́z de f (x) = x5 − 2 entre 0 y 1. Actividad 9.2. Escribe un script que aproxime una raı́z de f (x) = x5 − 2 entre 0 y 1, con un error absoluto menor que 10−4 usando el método de bisección. Bibliografı́a [1] Schmidt, J. GNU Octave: Beginners Guide Packt publishing. 2001. [2] https://www.gnu.org/software/octave/ ENES unidad León, León. Gto., México. E-mail address: [email protected]