Aprender a Programar Con MATLAB

download Aprender a Programar Con MATLAB

of 134

Transcript of Aprender a Programar Con MATLAB

Lenguajes de Programacin o Gu docente ECTS aIngenier Naval y Ocenica a a Escuela Tcnica Superior de Ingenieros Navales e Universidad Politcnica de Madrid e

A. Souto Iglesias, J.L. Bravo Trinidad L. Gonzlez Gutirrez, A. Cantn Pire a e o 30 de septiembre de 2008

....para m una buena escuela ser una escuela distinta, a una escuela que tuviese un principio segn el cual todas sus u normas estuviesen enfocadas a mantener a tantos estudiantes como sea posible durante el mayor tiempo dentro del sistema. As todo tendr que estar dirigido a hacer que los estudiantes , a participasen, que se sintiesen identicados con la escuela, que tuviesen la sensacin de estar haciendo las cosas bien. Para o m una buena escuela es una escuela que mantiene a todos los alumnos trabajando, comprometidos y con la sensacin de que no o van a fracasar. Stephen Ball.

In teaching you philosophy Im like a guide showing you how to nd your way round London. I have to take you through the city from north to south, from east to west, from Euston to the embankment and from Piccadilly to the Marble Arch. After I have taken you many journeys through the city, in all sorts of directions, we shall have passed through any given street a number of times - each time traversing the street as part of a dierent journey. At the end of this you will know London; you will be able to nd your way about like a Londoner. Of course, a good guide will take you through the more important streets more often than he takes you down side streets; a bad guide will do the opposite. In philosophy Im a rather bad guide. L. Wittgenstein.

Indice generalNotacin y abreviaturas o 6

I

Aprender a programar, con MATLAB

79 13 13 13 17 19 23 25 27 28 31 32 35 35 35 38 40 42 43 44 46 47 50 50 52 53 54

Introduccin o 0. Tutorial de MATLAB 0.1. Introduccin . . . . . . . . . . . . . . o 0.2. Conceptos bsicos . . . . . . . . . . . a 0.3. Manejo de vectores . . . . . . . . . . 0.4. Introduccin al tratamiento de matrices o 0.5. Resolucin de sistemas lineales . . . . o 0.6. Vectorizacin de operaciones . . . . . o 0.7. Creacin de grcas . . . . . . . . . . o a 0.8. Conjuntos de ordenes . . . . . . . . . 0.9. MATLAB y nmeros complejos . . . . u 0.10. Matemticas simblicas con MATLAB a o

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

1. Funciones y Condicionales 1.1. General . . . . . . . . . . . . . . . . . . . . . 1.2. Funciones y variables . . . . . . . . . . . . . . 1.3. Funciones con varios argumentos de entrada . 1.4. Estructura de control condicional if . . . . . . 1.5. Estructura de control condicional if-else . . . . 1.6. Funcin que llama a otra funcin . . . . . . . o o 1.7. Condicionales anidados. . . . . . . . . . . . . 1.8. Variante elseif en el condicional . . . . . . . . 1.9. Operadores lgicos . . . . . . . . . . . . . . . o 1.10. Operadores de comparacin: son iguales? . . o 1.11. Igualdad entre nmeros reales: precisin y valor u o 1.12. Variables enteras y reales como argumentos . . 1.13. Variables contador y sumador . . . . . . . . . 1.14. Funcin parte entera . . . . . . . . . . . . . . o

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . absoluto . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

2. Bucles 55 2.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.2. Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.3. Bucles con incremento variable . . . . . . . . . . . . . . . . . . . . . . . . . 57 Pg. 3 a

Lenguajes de Programacin: Gu ECTS o a 2.4. 2.5. 2.6. 2.7. 2.8. Bucles con otras operaciones . . . . . . . . . . . Bucles y relaciones de recurrencia . . . . . . . . . Bucles y condicionales . . . . . . . . . . . . . . . Uso de bucles para vericar una condicin sobre un o Bucles anidados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . conjunto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 58 60 62 63 65 65 65 66 67 69 70 73 75 77 78 80

3. Vectores 3.1. General . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Vectores como argumentos de funciones . . . . . . . . . . . 3.3. Funciones que llaman a funciones con argumentos vectores . 3.4. Clculo de extremos . . . . . . . . . . . . . . . . . . . . . a 3.5. Clculo de posicin de extremos . . . . . . . . . . . . . . . a o 3.6. Evaluacin de un polinomio . . . . . . . . . . . . . . . . . o 3.7. Funcin que devuelve un vector . . . . . . . . . . . . . . . o 3.8. Funciones que reciben y devuelven vectores . . . . . . . . . 3.9. Construccin de vectores . . . . . . . . . . . . . . . . . . . o 3.10. Vectores y bucles anidados . . . . . . . . . . . . . . . . . . 3.11. Funciones con salidas mltiples . . . . . . . . . . . . . . . u

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

II

Gu ECTS para estudiantes a

8385 87 87 87 87 87 88 89 89 89 91 91

1. Introduccin o 2. Datos generales 2.1. Temporalidad y carcter a 2.2. Crditos LRU . . . . . . e 2.3. Departamento . . . . . 2.4. Profesores . . . . . . . 2.5. Crditos ECTS . . . . . e

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

3. Objetivos 3.1. General . . . . . . . . . . . . . 3.2. Objetivos generales: descripcin o 3.3. Prerrequisitos . . . . . . . . . 3.4. Otras asignaturas de las que LP

. . . . . . . . . . . . . . . . . . . . . . . . . . . es prerrequisito

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4. Programa y Metodolog a 93 4.1. Mtodos docentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 e 4.2. Temario y estimacin del tiempo de estudio . . . . . . . . . . . . . . . . . . . 94 o 5. Recursos 5.1. Gu . . . . . . . . . . . . . . . . . . a 5.2. Tutor as . . . . . . . . . . . . . . . . 5.3. Tutor virtuales . . . . . . . . . . . . as 5.4. Pgina web - Plataforma de B-learning a 5.5. Copias . . . . . . . . . . . . . . . . . 5.6. Centro de Clculo . . . . . . . . . . . a 5.7. Bibliograf . . . . . . . . . . . . . . . a 97 97 97 97 97 98 98 98

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Pg. 4 a

INDICE GENERAL

6. Evaluacin o 6.1. General . . . . . . . . . . . 6.2. Evaluacin tradicional . . . o 6.3. Evaluacin ECTS . . . . . o 6.4. El examen . . . . . . . . . 6.5. Evaluacin de los objetivos o

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

101 101 101 101 103 105

III

Apndices e

107109 117 123 127 132

A. Ejemplos de Exmenes a B. Gestin del CC o C. Control de tiempos y cha D. Premio SENER Indice alfabtico e

Pg. 5 a

Lenguajes de Programacin: Gu ECTS o a

Notacion y abreviaturasAO aptdo. cap. DHOf DNI ECTS FHOf g. G GATE I JEE LOU LP LRU MEC pg. a PAS PF ref. TIC Aula de Ordenadores apartado cap tulo para referirse a actividades a realizar dentro del horario ocial. para referirse al nmero del Documento Nacional de Identidad. u sistema de crditos europeos. e para referirse a actividades a realizar fuera del horario ocial. gura para referirse a actividades a realizar en grupo. Gabinete de Teleeducacin. o para referirse a actividades a realizar de modo individual. Jefatura de Estudios. Ley Orgnica d 6/2001 de Universidades. a Lenguajes de Programacin. o Ley Orgnica 11/1983 de Reforma Universitaria. a Ministerio de Educacin y Ciencia. o pgina. a Personal de Administracin y Servicios. o Portafolio. referencia bibliogrca. a Tecnolog de la informacin y la comunicacin. as o o

Pg. 6 a

Parte I Aprender a programar, con MATLAB

Pg. 7 a

Introduccin oDe modo resumido, podemos decir que programar es ensearle a un ordenador cmo se n o resuelve un determinado problema. Para poder ensear a alguien, es necesario dos cosas: tener n un lenguaje en comn y conocer bien lo que se quiere ensear. En esta primera parte nos u n ocupamos del primer problema (que es el ms sencillo y el que responde a la denicin de a o programar). El lenguaje que hablan los ordenadores es muy simple, por lo que el proceso de aprenderlo ser rpido. El principal problema es descomponer ideas complejas en otras ms simples para a a a que podamos programarlas. Siguiendo el esquema anterior, hemos organizado cada unidad didctica en un esquema conceptoa ejemplo-ejercicios/problemas. Normalmente se trabajan uno o dos conceptos de Programacin o en cada unidad didctica (contadores y bucles while, por ejemplo), los cuales se introducen a primero formalmente y despus mediante un ejemplo, sobre el que se proponen una serie de e ejercicios que nos permitan asimilar y madurar las ideas explicadas. Por cada concepto introducido se trabajan cuatro o cinco ejemplos. Se pretende que en cada uno de estos ejemplos aparezca un uso habitual del concepto introducido. Se trata de asimilar bloques con un sentido concreto, construidos con los elementos bsicos de Programacin. A a o menudo, en los cursos de Programacin, se introducen slo los elementos de Programacin y se o o o supone que el alumno aprender a integrarlos por s mismo. Sin embargo, muchas aplicaciones a de esos elementos son estndares en la programacin (por ejemplo, el uso de contadores, un a o bucle while y un condicional para seleccionar determinados elementos de un vector, crear un vector mediante un contador, etc.) y una vez nos hemos familiarizado con ese uso conseguimos una mayor agilidad a la hora de programar. Las unidades didcticas que constituyen el curso son las siguientes: a 0. Tutorial de MATLAB. 1. Funciones y Condicionales. 2. Bucles. 3. Vectores. El curso comienza con un tutorial en el que se usa MATLAB como una potente calculadora al principio para terminar dibujando curvas, y agrupando instrucciones en cheros script, lo que permite introducir ideas importantes para ms adelante crear funciones. Adems, se a a aprovecha esta unidad 0 para insistir en conceptos bsicos de manejo de las herramientas del a sistema operativo, sobre todo la creacin y gestin de carpetas, y la ubicacin precisa de las o o o mismas en el sistema de archivos del usuario, bien en un disco local o en la unidad de red del aula de ordenadores donde se trabaja. Pg. 9 a

Lenguajes de Programacin: Gu ECTS o a El lenguaje elegido para la implementacin de ejemplos y ejercicios es el lenguaje de comandos o o scriptde MATLAB (o su versin libre Octave). Esta eleccin se debi a varios motivos: o o o 1. MATLAB es un entorno de clculo que los estudiantes usarn a lo largo de la carrera y a a probablemente despus en su vida profesional ya que dispone de herramientas espec e cas (toolboxes) para muchos mbitos. Aunque las competencias de manejo asociadas a a esas herramientas espec cas no se trabajan en este curso, el que el estudiante se sienta al nal cmodo con el entorno MATLAB le permitir si es necesario asimilar su o a funcionamiento con mucha mayor facilidad que si empezase de cero con el programa. 2. MATLAB es un lenguaje completo; tiene todos los elementos de un lenguaje de programacin, con una sintaxis similar al C pero con la simplicidad del BASIC. Comprobamos o en cursos anteriores que al utilizar un lenguaje como C, los alumnos dedicaban la mayor parte del tiempo a la correccin de errores de sintaxis y a la declaracin de variables, o o reserva de memoria, etc., teniendo poco tiempo para comprender el funcionamiento de las estructuras de datos o de control del ujo del programa. En este sentido, el lenguaje MATLAB se acerca al pseudocdigo usado en algunos cursos de Programacin, pero con o o la ventaja de poder realmente ejecutar los cdigos creados. La simplicidad de MATLAB o a estos efectos es a veces causa de falta de rigor en la forma de abordar la Programacin. As el hecho de que no haya tipado expl o cito de variables pudiendo la misma variable ser una matriz en una l nea del cdigo y un escalar un poco ms abajo, o de o a MATLAB se ocupe del la reserva dinmica de memoria de modo automtico, nos alejan a a de un lenguaje ms potente como C. Sin embargo y como comentbamos ms arriba, a a a eso permite centrarse en el manejo de estructuras de control para resolver problemas y desarrollar estrategias, creemos que esencial al principio. 3. MATLAB es un lenguaje interpretable: MATLAB traduce durante la ejecucin las dio ferentes sentencias al lenguaje primario y bsico de la mquina. Se paga el precio de a a necesitar MATLAB para ejecutar nuestros cdigos pero se recibe la recompensa de no o tener que compilar y enlazar nuestros cdigos para despus ejecutarlos. o e 4. MATLAB proporciona una interfaz que permite probar las funciones directamente sin necesidad de llamarlas desde un programa principal. Esto permite comprobar su funcionamiento de un modo sencillo e inmediato, y como comentamos ms abajo, ha permia tido una estructura del curso creemos que muy interesante para un curso de introduccin o a la Programacin para no Informticos. o a 5. Todo ello hace que sea muy sencillo empezar a generar cdigos interesantes en MATLAB, o algo a lo que se llega con mucho ms esfuerzo en un lenguaje de Programacin ms a o a riguroso como C. Una vez realizado este tutorial, hasta hace unos aos emplebamos la organizacin curricular n a o usual en un curso de Programacin (comenzando por la entrada y salida y el programa Hola o mundo). Sin embargo, ahora usamos una estructura similar a la programacin funcional, o comenzando por el concepto de funcin y estudiando la entrada y salida casi al nal. De o este modo, en la unidad 1 se trabaja al principio sobre el concepto de funcin, introduciendo o inmediatamente la estructura de control condicional, la cual permite construir funciones ms a complejas e interesantes. En la unidad 2 se trabaja con bucles, posibilitando la repeticin de operaciones. Es una unidad o Pg. 10 a

ardua, pues no se recurre todav a vectores o matrices, donde los bucles surgen de modo a natural. Aqu estn los ejemplos ms interesantes del curso, como el de comprobar si un a a nmero natural es primo. Si el estudiante se siente cmodo al nal de esta unidad, el resto u o del curso ser para l una progresin sencilla. Si no se siente cmodo todav tendr ocasin a e o o a, a o de cubrir los vac en las unidades siguientes. os En la unidad 3 se introducen los vectores, pues ya se tienen las herramientas para manejarlos. Como comentbamos en el prlogo, no hemos pretendido escribir un compendio exhaustivo a o ni de Programacin ni de MATLAB. Debido a ello la seleccin de unidades didcticas no es o o a inocente sino que subyace la idea de mostrar unicamente los aspectos considerados esenciales para aprender a programar. Creemos que en ese sentido el libro es una aportacin interesante o ya que no hay en la literatura cursos de introduccin a la Programacin que se apoyen en o o MATLAB como lenguaje de referencia, y lo ms parecido corresponde a cursos de MATLAB a en los que en algn cap u tulo se tratan diferentes aspectos de la programacin1 . En cuanto a o compendios de MATLAB, recomendamos el sensacional trabajo de Guillem Borrell2 .

Gilat, A., MATLAB. Una introduccin con ejemplos prcticos, Revert, 2006, es un buen ejemplo de este o a e tipo de libros 2 Borrell i Nogueras, G., Introduccin Informal a MATLAB y OCTAVE. Disponible online en o http://forja.rediris.es/

1

Pg. 11 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 12 a

Unidad Didctica 0 a Tutorial de MATLAB0.1. Introduccin o

Presentamos un tutorial de MATLAB, una herramienta potent sima, casi estndar para clculos a a en muchas ramas de la Ingenier y de uso razonablemente simple. En la asignatura de LP, a, utilizaremos el intrprete de comandos de MATLAB para que el estudiante se introduzca en e el apasionante mundo de la programacin de ordenadores. Este tutorial, en el que haremos o una descripcin de los elementos bsicos de MATLAB, y que se realizar durante las primeras o a a sesiones del curso de LP, tiene como objetivo que el estudiante se sienta cmodo con el o programa y con el sistema de usuarios, carpetas y archivos del CC. As al nal del tutorial , ser capaz de utilizar MATLAB como si fuese una calculadora potent a sima, manejando sus elementos de clculo en l a nea de comandos, sin entrar en la programacin de aplicaciones, a o lo cual nos dedicaremos el resto del curso.

0.2.

Conceptos bsicos a

Para arrancar MATLAB, se procede como con cualquier programa Windows, o sea, Inicio, Programas, MATLAB, R2006a, MATLAB R2006a 1 , o con el correspondiente icono en el escritorio, que tiene como etiqueta MATLAB R2006a. Una vez arrancado, nos encontramos con algo similar a lo que se observa en la gura 1. En el espacio que denotamos como ventana de comandos en dicha gura aparece el cursor con el s mbolo (>>) o (EDU >>), indicando que se pueden introducir rdenes. De hecho, en este tutorial, cuando aparezca este s o mbolo, se tiene que introducir por teclado la orden que aparece escrita a la derecha del mismo. Podeis, de momento, cerrar las otras ventanas que aparecen en la pantalla, para quedaros simplemente con la ventana de comandos. La utilizacin ms bsica de MATLAB es como calculadora 2 . As por ejemplo, para calcular o a a , 7.3 3 cos(5) 2 , se debe introducir : >>cos(5)*27.3 ans = 44.7013A veces, durante el curso hay algunos problemas con las licencias y se usa la versin educacional, a la cual o se accede con Inicio, Programas, Student MATLAB, o a travs del icono q est en el escritorio e a 2 Funcionando de este modo, es similar a una calculadora programable, aunque bastante ms verstil. a a 3 Los argumentos de las funciones trigonomtricas siempre estn en radianes. e a1

Pg. 13 a

Lenguajes de Programacin: Gu ECTS o a

Figura 1: Espacio de trabajo de MATLAB

Pg. 14 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

MATLAB mantiene en memoria el ultimo resultado. Caso de que ese clculo no se asigne a a ninguna variable, lo hace a una variable por defecto de nombre ans. Si queremos referirnos a ese resultado, lo haremos a travs de la variable ans, y si no se asigna ese nuevo clculo a e a ninguna variable, volver a ser asignado a ans. a >>log(ans) ans = 3.8000 En este momento cabr preguntarnos si tratamos con un logaritmo decimal o con uno nepea riano (natural). Para saberlo, pedimos ayuda acerca del comando log utilizando: >>help log LOG Natural logarithm. LOG(X) is the natural logarithm of the elements of X. Complex results are produced if X is not positive. See also LOG2, LOG10, EXP, LOGM. Aunque en la explicacin que se obtiene al pedir helpde las rdenes los comandos aparecen o o en maysculas, se deben usar en minsculas. u u Por defecto, los resultados aparecen con 4 cifras decimales. Si se necesitara ms precisin en a o los resultados, se puede utilizar la orden format long repitiendo los clculos: a >>format long Para recuperar una orden y ejecutarla otra vez o modicarla se usan la echas arriba y abajo del cursor , . Presionemos hasta recuperar la orden: >>cos(5)*27.3 ans = 44.70132670851334 Ejercicio 0.1 Realizar la siguiente operacin: 2.72.1 + log10 108.2. o Ejercicio 0.2 Pedir ayuda de la orden exp. Ejercicio 0.3 Realizar la siguiente operacin e2.7 o2.1 +log 10

108.2

.

El resultado del ejercicio anterior aparecer como 2.3992e+004. La notacin 2.3992+004, a o 4 signica 2.3992 10 o lo que es lo mismo 23992. Si necesitamos referirnos a determinados clculos, se asignan a variables y as se pueden a recuperar despus. El concepto de variable es crucial cuando se programa, como veremos e durante todo el curso. Por ejemplo, podemos recuperar con la orden cos(5) 27.3 y asignar su valor a la variable x editando dicha orden. Luego podremos utilizarla para otros clculos. Los a nombres de las variables en MATLAB han de comenzar por una letra; adems, no contendrn a a s mbolos que nos sean letras, nmeros o el guin bajo (que est en la misma tecla que el signo u o a menos). Pg. 15 a

Lenguajes de Programacin: Gu ECTS o a >>x=cos(5)*27.3 x = 44.70132670851334 >>y=log(x) y = 3.80000318145901 Ejercicio 0.4 Realizar la siguiente operacin: 2.72.1 + log10 108.2 y asignarla a la variable x. o Ejercicio 0.5 Realizar la siguiente operacin: e2.7 o2.1 +log 10

108.2

y asignarla a la variable t.

Si queremos saber cunto vale una variable, no tenemos ms que escribirla en la l a a nea de comandos y pulsar Enter. >>y y = 3.80000318145901 Como es muy fcil recuperar rdenes previas podemos utilizar esta idea para simular los trmia o e nos de una sucesin recurrente. Por ejemplo, xn+1 = cos(xn ) o >>x=0.2 x = 0.20000000000000 >>x=cos(x) x = 0.98006657784124 >>x=cos(x) x = 0.55696725280964 >>x=cos(x) x = 0.84886216565827 >>x=cos(x) x = 0.66083755111662 >>x=cos(x) x = 0.78947843776687 >>x=cos(x) x = 0.70421571334199 Ejercicio 0.6 Repetir la operacin anterior hasta que se estabilice el cuarto decimal de x de o un paso al siguiente. Ejercicio 0.7 Cambiar el formato para que otra vez se vean slo cuatro decimales. o Ejercicio 0.8 Empezando por x = 100 repetir la operacin o x2 81 2x hasta que se converja en el cuarto decimal. Qu relacin hay entre el ultimo x y 81? e o x=x Pg. 16 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

Ejercicio 0.9 Denir A como en vuestro documento de identidad o pasaporte. Empezando por x = 100 repetir la operacin o x2 A x=x 2x hasta que se converja en el cuarto decimal. A qu ha convergido la sucesin? 4 e o Es interesante comentar de este ejercicio que MATLAB distingue entre letras maysculas y u minsculas en los nombres de las variables. u A veces es bueno apagar y encender la calculadora para borrar todo y empezar de nuevo. Esto se hace con la orden clear. Hay que tener cuidado al utilizarla, ya que borra todas las variables que estn en la memoria sin pedir conrmacin. e o >>clear >>x ??? Undefined function or variable x. Ejercicio 0.10 Preguntar el valor de A igual que acabamos de preguntar x. Tiene sentido el resultado?

0.3.

Manejo de vectores

Para crear y almacenar en memoria un vector v que tenga como componentes v1 = 0, v2 = 2, v3 = 4, v4 = 6 y v5 = 8 podemos hacerlo componente a componente: >>v(1)=0 v = 0 >>v(2)=2 v = 0 >>v(3)=4 v = 0 >>v(4)=6 v = 0 >>v(5)=8 v = 0

2

2

4

2

4

6

2

4

6

8

Se puede tambin denir este vector especicando su primer elemento, un incremento y el e ultimo elemento. MATLAB rellenar paso a paso sus componentes. As podemos denir igual a , mente el vector v como una secuencia que empieza en 0, avanza de 2 en 2 y que termina en el 8:4

Las calculadoras obtienen la ra cuadrada de un nmero mediante esta sucesin. z u o

Pg. 17 a

Lenguajes de Programacin: Gu ECTS o a >> v = [0:2:8] v = 0 2 >> v v = 0 2

4

6

8

4

6

8

Si ponemos ; al nal de una l nea de comandos, cuando pulsemos la tecla Enter para ejecutarla, se ejecutar pero no mostrar el resultado en pantalla (se anula el eco en pantalla). Esto es a a muy util algunas veces: >> v = [0:2:8]; >> v v = 0 2

4

6

8

Podemos construir el vector v editando directamente entre los corchetes las componentes del vector v: >>v = [0 2 4 6 8]; >> v v = 0 2 4

6

8

Es fcil acceder al contenido de una posicin del vector, por ejemplo la primera. a o >> v(1) ans = 0 O modicarla: >> v(1)=-3; >> v v = -3 2

4

6

8

3 O hacer operaciones entre componentes, v2 v5 :

>> v(2)*v(5)3 ans = 1024 Ejercicio 0.11 Calcular la suma de los elementos de v, elemento a elemento. Para trasponer un vector o una matriz se usa el apstrofo, que es el acento que est en la o a misma tecla que el signo de interrogacin ?. o >> v ans = -3 2 4 6 8 Pg. 18 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

Como hemos comentado, para recuperar una orden y ejecutarla otra vez o modicarla se usan la echas arriba y abajo del cursor , . Presionemos hasta recuperar la orden: >> v(1)=-3; Modiqumosla para dejar el valor original e >> v(1)=0; Al denir ese vector v de 5 componentes, en realidad lo que denimos es una matriz la de cinco columnas, o sea, un matriz de 1 5. Esto se comprueba preguntando el tamao de v n con la sentencia size: >>size(v) ans = 1

5

que nos indica que v tiene una la y 5 columnas. Ejercicio 0.12 Denir un nuevo vector que sea el traspuesto de v y aplicar a ese vector el comando size. Es coherente el resultado? Ejercicio 0.13 Pedir ayuda sobre la funcin norm y aplicarla al vector v. o

0.4.

Introduccin al tratamiento de matrices o

Haremos una introduccin a la denicin y manipulacin de matrices. Se supone que se ha o o o seguido la seccin anterior y que se dispone de los conocimientos bsicos sobre la denicin o a o y manipulacin de vectores usando MATLAB. La denicin de una matriz es muy similar a la o o de un vector. Para denir una matriz, se puede hacer dando sus las separadas por un punto y coma (no olvidarse poner los espacios en blanco!): >> A = [ 1 2 3; 3 4 5; 6 7 8] A = 1 2 3 3 4 5 6 7 8 o denirla directamente la a la, que es ms intuitivo: a >> A = [ 1 3 6 A = 1 3 6 2 3 4 5 7 8] 2 4 7 3 5 8

Se puede modicar alguno de los elementos de la matriz A, accediendo a cualquiera de sus posiciones, por ejemplo: Pg. 19 a

Lenguajes de Programacin: Gu ECTS o a >> A(2,2)=-9 A = 1 2 3 -9 6 7

3 5 8

Dejemos su valor original: >> A(2,2)=4; De igual modo, se la puede considerar como una la de vectores columna: >> B = [ [1 2 3] [2 4 7] [3 5 8]] B = 1 2 3 2 4 5 3 7 8 (Otra vez, es importante colocar los espacios en blanco.) Ejercicio 0.14 Sumar los elementos diagonales de la matriz A, rerindonos a ellos, elemento e a elemento. Podemos sumar o restar matrices para tener otras matrices. >>C=A+B C = 2 5 9

4 8 14

6 10 16

Ejercicio 0.15 Denir la matriz D = 2B A. Tambin podemos multiplicarlas. e >>C=A*B C = 14 26 44

31 57 96

37 69 117

Ejercicio 0.16 Denir la matriz D = B A B. Ejercicio 0.17 Denir la matriz C = AAt . Podemos denir algunos tipos especiales de matrices, como por ejemplo una matriz de 3 3 que tenga todos sus elementos nulos. >>I=zeros(3) I = 0 0 0 0 0 0

0 0 0 Pg. 20 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

Podemos modicar sus elementos diagonales para tener la matriz identidad. >>I(1,1)=1; >>I(2,2)=1; >>I(3,3)=1 I = 1 0 0 1 0 0

0 0 1

Ejercicio 0.18 Repetir el ejercicio 0.16 sacando factor comn y utilizando la matriz identidad. u Otra forma de denir la matriz identidad es a travs de la funcin diag, que recibe un vector e o que convierte en diagonal de una matriz cuyos otros elementos son nulos. >>J=diag([1 1 1]) J = 1 0 0 0 1 0 0 0 1 Ejercicio 0.19 Denir una matriz D diagonal cuyos elementos sean 2, 1, 0.2 y 0.7. Ejercicio 0.20 Pedir ayuda de la funcin eye, y denir la matriz identidad de 10 10. o Ejercicio 0.21 Repetir el ejercicio 0.16 sacando factor comn y utilizando la funcin eye. u o

0.4.1.

Denicin de submatrices o

La denicin de subvectores o submatrices es muy fcil. Si v es o a >> v = [0:2:8] v = 0 2

4

6

8

Podemos denir un vector e cuyas componentes sean las tres primeras componentes del vector v poniendo >> e=v(1:1:3) e = 0 2

4

donde el primer uno indica que vamos a tomar el primer elemento de v. El segundo nmero es u el incremento de ndices dentro de v y el ultimo nmero marca el elemento nal. Esta orden u es equivalente a la siguiente >> e=v(1:3) e = 0 2

4

ya que cuando el incremento es la unidad, se puede suprimir. Pg. 21 a

Lenguajes de Programacin: Gu ECTS o a Ejercicio 0.22 Adivinar cul va a ser el resultado de las dos rdenes siguientes a o >> e=v(2:2:5) >> e=v(1:3:5) Como comentamos al principio, la notacin usada por MATLAB sigue en lo posible la notacin o o estndar de Algebra Lineal que se asume conocida. Es muy sencillo multiplicar matrices y a vectores, teniendo cuidado de que las dimensiones sean las adecuadas. >> A*v(1:3) ??? Error using == * Inner matrix dimensions must agree. >> A*v(1:3) ans = 16 28 46 Es importante acostumbrase a ver ese mensaje de error. Una vez que se empieza a trabajar con vectores y matrices, es sencillo olvidar los tamaos de los objetos que se han ido creando. n Ejercicio 0.23 Utilizando el comando size, razona sobre los problemas en lo que se reere a dimensiones en la multiplicacin anterior. o Se pueden extraer columnas o las de una matriz. Si queremos, por ejemplo, que C sea la tercera la de la matriz A: >> C=A(3,:) C = 6 7

8

O que C sea la segunda columna de la matriz B >>C=B(:,2) C = 2 4 7 O bien que D sea la submatriz cuadrada de orden dos inferior derecha de la matriz A. >> D=A(2:3,2:3) D = 4 5 7 8 Ejercicio 0.24 Denir una matriz de nombre D1 formada por la primera y tercera columnas de la matriz A. Una vez que se es capaz de crear y manipular una matriz, se pueden realizar muchas operaciones estndar. Por ejemplo, calcular su inversa. Hay que tener cuidado y no olvidar que a las operaciones son clculos numricos realizados por ordenador. En el ejemplo, A no es una a e matriz regular, y sin embargo MATLAB devolver su inversa, pues los errores de redondeo a durante su clculo convierten en invertible a dicha matriz. a Pg. 22 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

>> inv(A) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 4.565062e-18 ans = 1.0e+15 * -2.7022 4.5036 -1.8014 5.4043 -9.0072 3.6029 -2.7022 4.5036 -1.8014

Con la matriz B s que es posible calcular su inversa: >>inv(B) ans = -3.0000 -1.0000 2.0000

5.0000 -1.0000 -1.0000

-2.0000 1.0000 0

Ejercicio 0.25 Denir una matriz de nombre B1 como la inversa de B. Multiplicar B por B1 y razonar la coherencia del resultado. Hay que comentar que MATLAB distingue entre maysculas y minsculas. Este puede ser el u u origen de algunas confusiones si se manejan algoritmos complejos. >> inv(a) ??? Undefined function or variable a.

0.5.

Resolucin de sistemas lineales o

Tambin hay funciones para resolver sistemas lineales. Si Ax = b y queremos encontrar x, e el modo ms directo es simplemente invertir A, y luego premultiplicar por la inversa ambos a lados. Sin embargo, hay medios mucho ms ecientes y estables para resolver sistemas lineales a pero nosotros de momento nos quedaremos con ste. Por ejemplo, el sistema lineal Bx = v e con: >>v = [1 3 5] v = 1 3 5 >>B = [ [1 2 3] [2 4 7] [3 5 8]]; se resuelve con: >> x = inv(B)*v x = 2 1 -1 Para comprobar: Pg. 23 a

Lenguajes de Programacin: Gu ECTS o a >> B*x ans = 1 3 5 Ejercicio 0.26 Denir una matriz B2 = BB t . Ejercicio 0.27 Encontrar la solucin del sistema lineal BB t x = v asignando esa solucin al o o vector x. Ejercicio 0.28 Comprobar la solucin obtenida realizando el clculo BB T x v. o a Podemos crear una matriz aumentada a partir de B y del trmino independiente y reducirla e hasta convertir el sistema en uno equivalente triangular, efectuando las necesarias transformaciones elementales de la >>BA=[B v] BA = 1 2 3 1 2 4 5 3 3 7 8 5 >>BA(2,:)=BA(2,:)-2*BA(1,:) BA = 1 2 3 1 0 0 -1 1 3 7 8 5 >>BA(3,:)=BA(3,:)-3*BA(1,:) BA = 1 2 3 1 0 0 -1 1 0 1 -1 2 La segunda la tiene el elemento diagonal nulo, as que hay que realizar una permutacin de o las, premultiplicando por la identidad permutada: >>IP=[1 0 0;0 0 1;0 1 0]; >>BA=IP*BA BA = 1 0 0 2 1 0 3 -1 -1 1 2 1

Ahora ya es inmediato resolver este sistema por sustitucin hacia atrs: o a Ejercicio 0.29 Denir una matriz H de 3 3 a partir de las tres primeras columnas de la matriz BA. Ejercicio 0.30 Denir un vector h utilizando la ultima columna de BA. Pg. 24 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

Ejercicio 0.31 Denir el vector z tal que Hz = h. Es coherente el resultado? Ejercicio 0.32 Pedir ayuda de la funcin det utilizndola con la matriz B y de la funcin o a o rank utilizndola con la matriz BA. a Ejercicio 0.33 Calcular el determinante de la matriz H.

0.6.

Vectorizacin de operaciones o

Ejercicio 0.34 Borrar la memoria porque vamos a empezar operaciones nuevas reutilizando nombres de variables ya usadas. Con MATLAB es sencillo crear vectores y matrices. La potencia de MATLAB nace de la facilidad con la que se pueden manipular estos vectores y matrices. Primero mostraremos cmo realizar operaciones sencillas, sumar, restar y multiplicar. Luego las combinaremos para o mostrar que se pueden realizar operaciones complejar a partir de estas operaciones simples sin mucho esfuerzo. Primero deniremos dos vectores, los cuales sumaremos y restaremos: >> v = [1 2 3] v = 1 2 3 >> b = [2 4 6] b = 2 4 6 >> v+b ans = 3 6 9 >> v-b ans = -1 -2 -3 La multiplicacin de vectores y matrices, igual que su suma, sigue las reglas estrictas del o Algebra Lineal. En el ejemplo anterior, los vectores son ambos vectores columna con tres elementos. No se puede sumar un vector la con un vector columna. Se debe recordar que el nmero de columnas del primer operando debe ser igual al nmero de las del segundo. u u >> v*b Error using == * Inner matrix dimensions must agree. >> v*b ans = Pg. 25 a

Lenguajes de Programacin: Gu ECTS o a 2 4 6 >> v*b ans = 28 4 8 12 6 12 18

MATLAB permite realizar las operaciones entre elementos de un vector o matriz de modo muy sencillo. Supongamos que queremos multiplicar, por ejemplo, cada elemento del vector v con su correspondiente elemento en el vector b. En otras palabras, supongamos que se quiere conocer v(1) b(1), v(2) b(2), y v(3) b(3). Ser estupendo poder usar directamente el a s mbolo pues en realidad estamos haciendo una especie de multiplicacin, pero como esta o multiplicacin tiene otro sentido, necesitamos algo diferente. Los programadores que crearon o MATLAB decidieron usar el s mbolo para realizar estas operaciones. De hecho, un punto delante de cualquier s mbolo signica que las operaciones se realizan elemento a elemento. >> v.*b ans = 2 8 18 >> v./b ans = 0.5000 0.5000 0.5000 Ejercicio 0.35 Denir un vector w tal que sus componentes sean las de v al cubo. Una vez que hemos abierto la puerta a operaciones no lineales, por qu no ir hasta el nal? e Si aplicamos una funcin matemtica predenida a un vector, MATLAB nos devolver un o a a vector del mismo tamao en el que cada elemento se obtiene aplicando la funcin al elemento n o correspondiente del vector original >> sin(v) ans = 0.8415 0.9093 0.1411 >> log(v) ans = 0 0.6931 1.0986 Saber manejar hbilmente estas funciones vectoriales es una de las ventajas de MATLAB. De a este modo, se pueden denir operaciones sencillas que se pueden realizar fcil y rpidamente. a a En el siguiente ejemplo, se dene un vector muy grande y lo manipulamos de este modo tan sencillo. Pg. 26 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

>> x = [0:0.1:100] x = Columns 1 through 7 0 0.1000 0.2000 0.3000 ...................... Columns 995 through 1001 99.4000 99.5000 99.6000 99.7000 >> y = sin(x).*x./(1+cos(x));

0.4000

0.5000

0.6000

99.8000

99.9000 100.0000

Usando este tratamiento vectorial, se pueden generar grcos de modo muy sencillo. Damos a una muestra de esto que luego completaremos. >> plot(x,y) Ejercicio 0.36 Denir un vector t cuya primera componente sea 4, que tenga un incremento entre componentes de 0.05 y termine en el punto 1. Ejercicio 0.37 Denir un vector y a partir de cada componente del vector t recin denido e y = 5et + sin(10t)2

0.7.

Creacin de grcas o a

En esta seccin presentamos los comandos bsicos para crear representaciones grcas de o a a funciones. Para mostrar el uso del comando plot, utilizaremos la funcin seno y su desarrollo o en serie de Taylor5 en torno al cero con trminos cbicos, x x3 /6. Para dibujar la grca, e u a seleccionamos el paso del vector de muestreo x y sus valores primero y ultimo >>h=0.1 >>xmin=-2; >>xmax=2; >>x=xmin:h:xmax; >>yseno=sin(x); >>ytaylor=x-x.3/6; Tras esto, tenemos en los vectores yseno e ytaylor los valores reales y los valores aproximados obtenidos del desarrollo limitado. Para compararlos, dibujamos los valores exactos superpuestos con los aproximados marcados por puntos verdes o. El comando plot se utiliza para generar grcas en MATLAB. Admite una gran variedad de a argumentos. Aqu slo utilizaremos el rango y el formato, y la posibilidad de representar dos o curvas en la misma grca. aBrook Taylor naci en 1685 en Inglaterra en el seno de una inuyente y adinerada familia. Estudi en o o Cambridge y cuando se gradu ya hab escrito su primer art o a culo matemtico de relevancia. Taylor para ticip activamente en las agrias disputas entre matemticos britnicos (newtonianos) y matemticos euo a a a ropeos (leibnitzianos) sobre la adjudicacin del descubrimiento del Clculo Diferencial, llegando a formar o a parte del Comit que la Real Sociedad form para dar n a tal discusin. e o o Aunque las aportaciones de Taylor a las matemticas son profundas y variadas (entre otras, introdujo a el clculo en diferencias nitas, la integracin por partes, desarroll un mtodo para encontrar soluciones a o o e singulares de ecuaciones diferenciales y sent las bases de la geometr descriptiva y proyectiva) su resultado o a ms conocido es el Teorema de Taylor, que permite el desarrollo de funciones en series polinmicas. Sin a o embargo, no fue Taylor el primero en obtenerlo, James Gregory, Newton, Leibniz, Johann Bernoulli, y de Moivre hab ya descubierto independientemente variantes del mismo. an5

Pg. 27 a

Lenguajes de Programacin: Gu ECTS o a >>plot(x,yseno,go,x,ytaylor); La g se reere al color verde (green), y la o signica que los puntos se van a marcar con un circulito. La tilde antes y despus de go en el comando anterior es la que est en la tecla de e a la interrogacin de cierre. o Ejercicio 0.38 En la ventana en la que aparece la gura, seleccionar Edit, Copy Figure. Abrir un nuevo documento de Word y pegar la gura en ese documento. Tambin es buena idea representar la funcin error: e o >>plot(x,abs(yseno-ytaylor),mx); Para que al nal del chero con todas las rdenes aparezca en pantalla el grco, una vez o a que ste ya ha sido ejecutado alguna vez, se utiliza la orden shg, que hace que la ventana del e grco se convierta en la activa. Usemos este comando para utilizar el comando de peticin a o de ayuda help que es muy util tambin por sus referencias cruzadas a otros comandos. e >> help shg SHG Show graph window. SHG brings the current figure window forward. Ejercicio 0.39 Pedir ayuda de los comandos grid y plot. Ejercicio 0.40 Dibujar la curva t, y del ejercicio 0.37. Ejercicio 0.41 Dibujar la curva t, y del ejercicio 0.37 con cruces rojas y con una ret cula incorporada (grid). Tambin se puede copiar este grco al portapapeles desde la ventana del grco, para despus e a a e pegarlo en un documento Word por ejemplo, como ya vimos en el ejercicio 0.38.

0.8.

Conjuntos de rdenes o

En esta seccin explicaremos cmo reunir rdenes en cheros ejecutables desde la l o o o nea de comandos de MATLAB. A estos cheros se les suele llamar scripts. Ello permite realizar operaciones ms complejas, y facilita sus repeticiones. a Para empezar a trabajar sobre esta parte del tutorial, lo primero que haremos es ejecutar clear para borrar las variables activas. Como ejemplo, consideramos el chero correspondiente al dibujo de las grcas de la seccin 0.7. Para ejecutar los comandos del chero se debe a o especicar el intervalo entre los valores de las abscisas en el muestreo. De este modo, se pueden construir innidad de aproximaciones variando este parmetro. a Primero hay que crear el chero. El editor ms conveniente es el que trae incorporado el a propio MATLAB, aunque cualquier editor de texto es vlido dado que la codicacin de los a o archivos de comandos de MATLAB es el estndar ASCII como sucede habitualmente en los a lenguajes de programacin. El editor de MATLAB es muy simple y suciente para este tipo de o aplicaciones. A partir de la versin 5, viene incorporado al propio MATLAB y mejora de versin o o en versin. Los cheros ejecutables de MATLAB, los M-les, deben tener la extensin .m. o o En este ejemplo crearemos un chero de nombre tutorm.m. Para abrir el editor pinchamos en (File, New, M-le) y debemos ir escribiendo y/o copiando-pegando los comandos necesarios. Se debe tener en cuenta que cuando una sentencia comienza por %, es un comentario, y no se va a ejecutar. Por tanto, en este ejemplo, no es necesario reproducir esas l neas. Pg. 28 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

% file: tutorm.m % Seno y desarrollo del seno. % % Para ejecutarlo tienes que fijar el paso % h : intervalo entre las x % % El programa genera tres vectores, % x con las abscisas, yseno con % el seno evaluado en esas abscisas, % e ytaylor con el desarrollo % hasta el termino cubico del seno en torno al cero. % xmin=-2; xmax=2; x=xmin:h:xmax; yseno=sin(x); ytaylor=x-x.3/6;

Una vez que se hayan introducido las sentencias, se guarda el chero en la carpeta que creamos conveniente, aunque hay que comunicar a MATLAB la ruta en la que se encuentra para que MATLAB lo encuentre. Esto se puede hacer de varias maneras, dependiendo de la versin de o MATLAB que estemos usando. En las versiones 6.5 y superiores se puede hacer modicando la carpeta-directorio activo en la caja correspondiente (ver gura 1); para volver a activar la vista inicial de MATLAB se procede como se indica en la gura 2. En versiones previas, se puede indicar la ruta del archivo en el path browser con el icono correspondiente, o desde el men File con la opcin Set Path. Por defecto, si se guarda en el directorio ..\matlab\bin, u o MATLAB lo encontrar 6 . a Ahora se ha de volver a la ventana con la l nea de comando y se teclea en esta l nea el nombre del chero quitando .m. En este caso tutorm. >>tutorm ??? Undefined function or variable h. Error in ==> C:\MATLAB\bin\tut.m On line 13 ==> x=xmin:h:xmax; Si se se invoca el chero sin haber denido primero la variable h, aparecer un mensaje de a error. Se deben denir todas las variables que no se denen en el propio script y que ste e utiliza. >>h = 0.1; >>tutorm >>plot(x,yseno,rx,x,ytaylor) Una vez ejecutada esta instruccin deber aparecer una ventana con una grca como la de o a a la Figura 3. Cuando tecleamos tutorm en la l nea de comandos, MATLAB buscar en los a directorios indicados en el path un chero llamado tutorm.m. Una vez que lo encuentre lo leer y ejecutar los comandos como si se hubiesen tecleado uno detrs de otro en la l a a a nea de comandos. Si se desea ejecutar el programa otra vez pero con un paso diferente, hay que tenerSi se utiliza MATLAB en el centro de clculo o laboratorio de una facultad o escuela, probablemente el a usuario no tenga permiso de escritura en ese directorio y no pueda guardar ah sus cheros. En este caso, se pueden guardar en la carpeta que se desee que despus se incorpora a la ruta de bsqueda (path), bien con el e u comando path o con el icono correspondiente.6

Pg. 29 a

Lenguajes de Programacin: Gu ECTS o a

Figura 2: Recuperar vista de la gura 1 cuidado. El programa sobreescribir los vectores x, yseno e yatylor. Si se quieren guardar a estos vectores hay que especicarlo, almacenndolos en nuevas variables. a >>xp = x; >>ysenop = yseno; >>ytaylorp = ytaylor; Ahora podemos seleccionar un nuevo paso h y volver a ejecutar tutor. >>h = 0.01; >>tutorm Tenemos dos aproximaciones; la primera con un paso h de 0.1 que se almacena en los vectores xp, ysenop e ytaylorp y la segunda relativa a un paso de 0.01 que guardamos en los vectores x, yseno e ytaylor. Ejercicio 0.42 Calcular la dimensin que tienen que tener los vectores x y xp y conrmar el o resultado utilizando la orden size. Ejercicio 0.43 Crear y ejecutar desde MATLAB un chero que se llame BAIP.m con la secuencia de comandos siguiente: v = [1 3 5]; B = [ [1 2 3] [2 4 7] [3 5 8]]; BA=[B v] BA(2,:)=BA(2,:)-2*BA(1,:) BA(3,:)=BA(3,:)-3*BA(1,:) IP=[1 0 0;0 0 1;0 1 0]; BA=IP*BA Pg. 30 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

Figura 3: Grca correspondiente al ejemplo tutorm.m. a

Ejercicio 0.44 Pedir ayuda del comando pause e incorporarlo entre algunas l neas del ejercicio anterior para ver todos los pasos de la secuencia de comandos. Ejercicio 0.45 Crear y ejecutar desde MATLAB un chero que se llame CURVATY.m con una secuencia de comandos que realicen las operaciones siguientes: 1. Borrar todas las variables activas de la memoria. 2. Denir un vector t cuya primera componente sea 4, que tenga un incremento entre componentes de 0.05 y termine en el punto 1. 3. Denir un vector y a partir de cada componente del vector t recin denido como: e y = 5et + sin(10t) 4. Dibujar la curva (t, y) con cruces rojas y con una ret cula ( grid) incorporada.2

0.9.

MATLAB y nmeros complejos u

MATLAB entiende la aritmtica compleja y es perfectamente posible trabajar con nmeros e u complejos. Podemos multiplicar dos nmeros complejos como: u >>(2+3*i)*(3-7*i) ans = 27.0000 - 5.0000i O dividirlos como: >>(2+3*i)*(3-7*i) ans = -0.2586 + 0.3966i Pg. 31 a

Lenguajes de Programacin: Gu ECTS o a

0.10.

Matemticas simblicas con MATLAB a o

MATLAB dispone de herramientas para clculo simblico. Para ello es necesario instalar el a o Symbolic Math Toolbox, que es una especie de versin reducida de Maple, un programa de o clculo simblico muy conocido. Aqu podemos usar esta caja de herramientas para resolver a o integrales y calcular determinantes de modo simblico entre otras cosas. Lo primero que o tenemos que hacer es denir una variable como susceptible de ser utilizada en clculo simblico: a o >>syms x Ahora podemos denir una funcin que dependa de x y cuya integral queramos calcular: o >>f=cos(x)2; >>int(f) ans= 1/2*cos(x)*sin(x)+1/2*x Podemos tambin denir una matriz que dependa de x y de una nueva variable y: e >>syms y >> A=[x y x-y 2 x2 y -x -y 0] A = [ x, y, x-y] [ 2, x2, y] [ -x, -y, 0] Y podemos calcular su determinante de modo simblico: o >> det(A) ans = -2*y*x+2*y2+x4-x3*y Ejercicio 0.46 Calcular de modo simblico la inversa de la matriz A. o Podemos evaluar este determinante para valores reales de x e y asignando valores a esas variables y utilizando despus la orden eval: e >> x=2.41 x = 2.4100 >> y=-3.2 y = -3.2000 >> eval(det(A)) ans = 114.4301 En el momento en que hemos asignado valores a las variables, stas dejan de ser s e mbolos. Si queremos que vuelvan a serlo tenemos que hacerlo de modo expl cito Pg. 32 a

UNIDAD DIDACTICA 0. TUTORIAL DE MATLAB

>>syms x Ejercicio 0.47 Denir una funcin f como ex . o Ejercicio 0.48 Pedir ayuda de la funcin di y calcular la derivada de f . Evaluar esta derivada o para x = 3.327. Ejercicio 0.49 Pedir ayuda de la funcin limit y calcular el l o mite de f cuando x .2

Pg. 33 a

Lenguajes de Programacin: Gu ECTS o a

Pg. 34 a

Unidad Didctica 1 a Funciones y Condicionales1.1. General

Una vez que en el tutorial de la unidad 0 hemos usado MATLAB como una calculadora potente, pero al n y al cabo una calculadora, ha llegado el momento de aprender a programar. En ese sentido, la unidad 1, dedicada al concepto de funcin y la estructura de control condicional, o y la unidad 2, dedicada al estudio de los bucles, son las ms importantes. Constituyen la base a sobre la que se cimenta el resto del curso. En la unidad 1 se tratan principalmente las ideas de funciones, variables, argumentos de las funciones, asignacin y la primera estructura de control del curso: el condicional. Tambin se o e realiza primeramente una contextualizacin del curso desde la perspectiva de la historia de la o Programacin y sus fundamentos. o

1.2.

Funciones y variables

La organizacin habitual de un curso de Programacin supone que se comience por los t o o picos programas de entrada y salida, el programa Hola mundo. Sin embargo, en este curso que ahora comienza nos hemos decidido por una estructura similar a la programacin funcional, o comenzando por el concepto de funcin y estudiando la entrada y salida ya con el curso o muy avanzado. La ventaja de este enfoque es que los alumnos comienzan por los conceptos fundamentales: funciones, estructuras de control y vectores. Como el aprendizaje es continuo, aadiendo sucesivamente nuevos conceptos y estructuras, conseguiremos que al nal los n alumnos estn ms familiarizados con las estructuras esenciales de la Programacin. Esto es e a o posible porque MATLAB proporciona una interfaz estndar para las funciones y desde la l a nea de comandos es posible ejecutarlas directamente. El entender las cosas desde la perspectiva funcional proporciona la posibilidad de asimilar desde el principio conceptos claves en Programacin, como el de encapsulamiento de tareas, la o divisin de tareas y su codicacin en funciones, crucial cuando se abordan problemas grandes o o y se trabaja en equipo. Tambin se trabajan ideas esenciales relativas a el diseo de funciones e n y a la reusabilidad de cdigo ya escrito, visto ya como cajas negras que realizan determinadas o tareas, y que servir de base para construir nuevas funciones, etc... a La que ahora presentamos es la funcin ms sencilla que veremos durante el curso. Tiene un o a argumento de entrada, x y un argumento de salida y. Lo unico que se hace es calcular una expresin matemtica sencilla y asignar ese valor a y. o a% ud1_f1.m

Pg. 35 a

Lenguajes de Programacin: Gu ECTS o a% Una funcin sencilla o % un argumento function y=ud1_f1(x) y=x2-log(x);

El s mbolo = en Programacin es una asignacin, no siendo por tanto simtrico; se asigna o o e a lo que est a la izquierda del s a mbolo igual lo que haya a la derecha del mismo, una vez realizadas las operaciones que estn especicadas en esa parte derecha. e El nombre de la funcin, para evitar confusiones, debe coincidir con el nombre del archivo .m o donde esta funcin se encuentra. Por tanto, como este primer ejemplo es la funcin ud1_f1, o o debemos guardarla en el archivo ud1_f1.m. La primera l nea comienza con la palabra reservada function lo cual es comn a todas las funciones que veremos en el curso. u Lo ms interesante es entender a partir de este ejemplo cmo se pasan los argumentos desde a o la l nea de comandos hasta las funciones. Cuando invocamos esta funcin desde la l o nea de comandos podr amos hacerlo del siguiente modo, obteniendo la siguiente respuesta:>> ud1_f1(5) ans = 23.3906

Cuando se pulsa Enter, tecla de retorno de carro, se carga en memoria RAM la funcin o ud1_f1.m, y se crea espacio en memoria para la variable x. En ese espacio se coloca el valor 5. Se crea espacio tambin para y. Las variables x e y se llaman variables locales de la e funcin; el adjetivo locales procede de que viven en el espacio de memoria de la funcin. Una o o vez hecho esto, el ordenador ejecuta las sentencias de la funcin (en este caso una sola) de o arriba abajo. Durante esta ejecucin se dene la variable de salida y, en la cual al nal de la o misma est el resultado, 23.3906. Una vez terminada la ejecucin se devuelve el control a la a o l nea de comandos, se asigna en este caso el resultado a la variable por defecto ans y se borra de la memoria RAM la funcin ud1 f11 . o Podemos invocar a la funcin ud1_f1.m ahora del siguiente modo: o>> t=5; >> z=ud1_f1(t) z = 23.3906

En ese caso, tendremos 4 variables x, y, z y t. Las variables x e y son locales de la funcin y o las variables z y t viven en el espacio de memoria asignado a la ventana de comandos. Cuando se llama a la funcin, x copia el valor de t y cuando se termina la ejecucin de la funcin es o o o z la que copia el valor de la calculada y antes de que esta desaparezca (ver gura 1.1). La situacin no cambia sustancialmente si invocamos a la funcin del siguiente modo: o o>> x=5; >> y=ud1_f1(x) y = 23.3906

Volvemos a tener 4 variables en memoria, x e y en el espacio de memoria de la ventana de comandos y x e y en el espacio de memoria de la funcin ud1_f1.m mientras sta se ejecuta. o e1

Esto no es exactamente as pero esta es la imagen ms adecuada para un principiante en Programacin. , a o

Pg. 36 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

Figura 1.1: Ejemplo ud1 f1.m. Uso de la memoria RAM

De hecho, si cambiamos el valor de la x en el cdigo de la funcin, la variable t del prrafo o o a anterior y la variable x del espacio de memoria de la ventana de comandos no se ven afectadas. O sea que si cambiamos la funcin ud1_f1.m y la grabamos ahora como: ofunction y=ud1_f1(x) x=2; y=x2-log(x);

Si la invocamos desde la l nea de comandos del siguiente modo,>> x=5; >> y=ud1_f1(x) y = 3.3069 >> x x = 5

el resultado no ser correcto, pero x tampoco habr cambiado su valor. Ello es as porque la a a variable local x vive en la funcin. Al principio de la misma, copia el valor de la variable x o del espacio de comandos, y aunque cambiemos la variable local en la funcin, la variable en o el espacio de comandos no se ve afectada; estn en mundos diferentes que slo se comunican a o a travs de la l e nea de argumentos. Hagamos ahora algunos ejercicios para consolidar estas ideas: Ejercicio 1.1Vamos a preparar el espacio donde vas a trabajar, dentro de la unidad de red Z. Si no lo has hecho ya, crea una carpeta que se llame CXXY Y donde XX son las dos ultimas cifras del ao en que n empieza el curso y Y Y las dos ultimas cifras del ao en que termina. En el curso 2008-2009, la n carpeta se llamar C0809. Dentro de esa carpeta crea otra que se llame LP . Dentro de esta,crea a una carpeta llamada ud1. Esta ser tu carpeta de trabajo para todo slos ejemplos y ejercicios de la a unidad 1.

Pg. 37 a

Lenguajes de Programacin: Gu ECTS o a Ejercicio 1.2Edita manualmente la funcin ud1 f1 creando un archivo nuevo con el editor on desde la ventana de o comandos (con File, New ), gurdala en tu carpeta de trabajo y ejecuta: a >> >> >> >> ud1_f1(2.3) ud1_f1(0.1) ud1_f1(0) ud1_f1(-2.2)

Son correctos los resultados? Qu errores o problemas da? e

Ejercicio 1.3Crea una funcin que reciba el radio de un c o rculo y devuelva su rea. MATLAB conoce el valor de a , pide ayuda sobre pi para usarlo.

Ejercicio 1.4Prueba la funcin que has creado con un c o rculo de radio la unidad. Deber devolver . Prubala a e con 2; deber devolver 4 (puedes calcular ese valor con MATLAB). a

1.3.

Funciones con varios argumentos de entrada

El siguiente paso es construir funciones en las que haya ms de un argumento de entrada. a Tenemos as la siguiente, la cual calcula el rea de un rectngulo. Si necesitamos ms argu a a a mentos de entrada, simplemente los colocamos uno tras otro separados por comas dentro de los parntesis a la derecha del nombre de la funcin. e o% ud1_farea % primera funcin con ms de un argumento. o a % rea del rectngulo de lados a y b a a function area=ud1_farea(a,b) area=a*b;

Para invocarla, se nos ocurren estas tres posibilidades, aprovechando lo explicado en la seccin o 1.2:>> ud1_farea(2,3) ans = 6 >> x=3; >> y=5; >> ud1_farea(x,y) ans = 15 >> ud1_farea(x,4) ans = 12

En la primera, pasamos directamente dos nmeros, los cuales son copiados por las variables u locales a y b. En la segunda posibilidad pasamos dos variables correspondientes al espacio de memoria de la ventana de comandos, x e y, las cuales son copiadas igualmente por las variables locales de la rutina, a y b, a travs de la lista de argumentos. Finalmente en la tercera, e Pg. 38 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

tenemos una combinacin de las dos posibilidades anteriores. o En el siguiente ejemplo los argumentos no conmutan entre s Se trata de calcular el rea de . a un pol gono regular sabiendo el nmero de lados y el lado. En el clculo de la apotema los dos u a argumentos no conmutan entre s .% ud1_fareapol.m % area de un polgono regular de n lados % primeras variables propias de la rutina, P,a, % las variables no conmutan pues juegan distinto papel function area=ud1_fareapol(l,n) P=n*l; % permetro a=l/(2*tan(pi/n)); area=P*a/2;

Es la primera funcin en la que usamos variables locales a la funcin. Si invocamos esta funcin o o o desde la ventana de comandos, y preguntamos despus lo que valen esas variables locales, las e cuales no pertenecen al espacio de memoria de la ventana de comandos tendremos el siguiente resultado:>> ud1_fareapol(3,4) ans = 9.0000 >> ud1_fareapol(4,3) ans = 6.9282 >> P ??? Undefined function or variable P. >> a ??? Undefined function or variable a. >>

Los ejercicios correspondientes a estos ejemplos son los siguientes: Ejercicio 1.5Edita manualmente las funciones ud1_farea y ud1_fareapol, gurdalas en tu carpeta de trabajo a y prubalas desde la ventana de comandos de MATLAB. e

Ejercicio 1.6Crea una funcin que reciba la base y la altura de un tringulo y devuelva el rea. o a a

Ejercicio 1.7Crea una funcin que reciba la masa y la velocidad de un mvil y devuelva la energ cintica. o o a e

Ejercicio 1.8Consideramos la funcin o function d=ud1_fprueba(a,b,c) b=c; a=b; d=a+b+c;

Pg. 39 a

Lenguajes de Programacin: Gu ECTS o aSin ejecutar la funcin, qu valor devolver si invocamos desde MATLAB ud1 f prueba(1, 2, 3)? o e a Raznalo primero y comprubalo despus editando la funcin y ejecutando esa orden. Es la primera o e e o funcin que tiene ms de dos argumentos. Conmutan entre s los argumentos de entrada? o a

Ejercicio 1.9Crea una funcin que reciba los tres coecientes a, b, c, de un polinomio de segundo grado y devuelva o la ra z b + b2 4ac . 2a Cuando se invoque la funcin, se elegirn los coecientes para que la ecuacin tenga ra reales. Se o a o ces recomienda usar una variable auxiliar D para denir el discriminante b2 4ac. Conmutan entre s los argumentos de entrada?. Para comprobar si tu cdigo es correcto, usa los coecientes del polinomio o x2 7x + 12, que tiene como ra 3 y 4. ces

Ejercicio 1.10Crea una funcin anloga para la otra ra o a z, b b2 4ac . 2a

Ejercicio 1.11Crea una funcin que reciba dos alturas, h1 y h2 y una masa y devuelva la energ potencial perdio a da/ganada por el cuerpo al caer/subir de h1 a h2 .

1.4.

Estructura de control condicional if

Hasta ahora, todas las sentencias se han ejecutado de modo consecutivo, una detrs de la otra. a No disponemos todav de herramientas que permitan controlar de algn modo la ejecucin a u o o realizar operaciones ms complejas con la informacin de entrada a la funcin. La primera a o o de esas herramientas y una de las ms importantes es el condicional y nos pone en la parrilla a de salida del desarrollo de estrategias y algoritmos para resolver los problemas de los que un ordenador es capaz. Adems, y no menos importante, se convierte en el primer mecanismo de a provocacin de vuestra capacidad de pensar y de articular un discurso complejo a partir de o elementos m nimos, o sea, PROGRAMAR. La estructura condicional aparece en los lenguajes de programacin normalmente mediante la o palabra reservada if. En MATLAB lo hace de ese modo, tal como se indica en las siguientes l neas. function y=nombrefuncion(arg1,arg2,....) .... .... if cond .... .... end .... .... Pg. 40 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

Por cond nos referimos a una condicin lgica o combinacin de ellas. As cond puede ser o o o , que una variable sea mayor que un determinado valor, igual, mayor o igual (>=) etc. En caso de que eso sea as se ejecutarn las sentencias que estn entre la sentencia del if y la primera , a a sentencia end que se encuentre. Es importante para que los cdigos sean legibles tabular o indentar las instrucciones correso pondientes a una estructura de control 3 o 4 espacios (sern 4 en nuestros ejemplos), como a hemos hecho con el puntead en el bloque if anterior. Uno de los ejemplos ms sencillos que se pueden poner de esta estructura es el de una funcin a o que devuelva el mayor de dos nmeros a, b supuestos distintos entre s Se puede abordar este u . problema de varias maneras. La primera es mediante dos estructuras if, la primera controlando el caso de que a sea el mayor de los valores y la segunda controlando el caso de que el mayor sea b.% ud1_fmayorab % primer uso del condicional if % Devuelve el mayor de dos nmeros a,b u % a,b se supondrn diferentes a function mayor=ud1_fmayorab(a,b) if a>b mayor=a; end % if b>a mayor=b; end

En la segunda posibilidad se dene la variable mayor por defecto como a. Ahora se comprueba si b es mayor que a, y si eso es cierto se dene la variable mayor como b.% ud1_fmayorab0 % Devuelve el mayor de dos nmeros a,b u % a,b se supondrn diferentes a function mayor=ud1_fmayorab0(a,b) mayor=a; if b>a mayor=b; end

En la tercera variante se juega con la variable a calcular, dndole primero el valor a. Despus a e se compara b con esa variable, y si en la comparacin gana b, se actualiza el valor de mayor. o% ud1_fmayorab0 % Devuelve el mayor de dos nmeros a,b u % a,b se supondrn diferentes a function mayor=ud1_fmayorab1(a,b) mayor=a; if b>mayor mayor=b; end

Los ejercicios correspondientes a este ejemplo son los siguientes: Pg. 41 a

Lenguajes de Programacin: Gu ECTS o a Ejercicio 1.12Abre la ventana principal de MATLAB, copia manualmente las funciones ud1_fmayorab, ud1_fmayorab0 y ud1_fmayorab1, gurdalas en tu carpeta de trabajo y prubalas . a e

Ejercicio 1.13Crea una funcin que reciba un nmero r y devuelva el rea del c o u a rculo de radio r si r 0 y 1 en caso contrario.

Ejercicio 1.14Crea una funcin que reciba un valor x y devuelva el valor y de la funcin denida a trozos: o o y= x + 1 x < 1 1 x2 x 1

Ejercicio 1.15(Para valientes) Crea una funcin que reciba tres nmeros a, b, c, que se supondrn diferentes entre o u a si, y devuelva el mayor de los tres.

1.5.

Estructura de control condicional if-else

En el caso de que queramos que se ejecuten determinadas sentencias cuando cond sea falsa, deberemos complementar if con else. De este modo, si cond es cierta se ejecutar el primer a bloque y si es falsa el segundo, como se muestra en el siguiente esquema: function y=nombrefuncion(arg1,arg2,....) .... .... if cond bloque1 else bloque2 end .... .... El ejemplo para ilustrar esta estructura es el correspondiente a la funcin que calcula el mayor o de dos nmeros supuestos distintos. Se comprueba si el primero es mayor que el segundo y si u no es as se toma el mayor como el segundo. ,% ud1_felseab % primer uso de la estructura if-else % Devuelve el mayor de dos nmeros a,b u % a,b se supondrn diferentes a function mayor=ud1_felseab(a,b) if a>b mayor=a; else mayor=b; end

Pg. 42 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

Los ejercicios correspondientes a este ejemplo son los siguientes: Ejercicio 1.16Edita manualmente la funcin ud1_felseab, modicando alguna de las anteriores, gurdala en tu o a carpeta de trabajo y prubala. Adivina cul ser el resultado si pasas como argumentos dos nmeros e a a u iguales.

Ejercicio 1.17Crea una funcin que reciba un nmero r y devuelva el rea del c o u a rculo de radio r si r 0 y 1 en caso contrario, utilizando la estructura if-else.

Ejercicio 1.18Crea una funcin que reciba un valor x y devuelva, utilizando la estructura if-else, el valor y de la o funcin denida a trozos: o x + 1 x < 1 y= 1 x2 x 1

1.6.

Funcin que llama a otra funcin o o

Una vez que con una funcin hemos resuelto un determinado problema y/o hemos agrupado o una serie de tareas, esa funcin es muy cmodo verla como una caja negra que recibe unos o o argumentos de entrada y devuelve unos argumentos de salida (de momento uno slo de salida). o Vista de ese modo, es natural que sea llamada por otra funcin que la necesita como parte o de la misma. La sintaxis de ello no ofrece ningn problema invocndose de modo anlogo a u a a como se invoca desde la l nea de comandos. En el siguiente ejemplo codicamos una funcin o denida a trozos, similar a la del ejemplo 1.4, en la que el valor de uno de los trozos de la funcin se obtiene llamando a una funcin creada previamente, la ud1_f1.m. o o% ud1_ftrozos2 % primera funcion q llama a otra funcion % ud1_ftrozos2(x). Devuelve el valor de la funcin: o % f(x)=x si x=1 function y=ud1_ftrozos2(x) if x> >> >> >> ud1_ftrozos2(2.3) ud1_ftrozos2(1.1) ud1_ftrozos2(0) ud1_ftrozos2(0.9)

Son correctos los resultados? Qu errores o problemas da? e

Ejercicio 1.20Utilizando la funcin del rea del rectngulo (ud1_farea), crea una funcin que reciba los dos o a a o lados de la base y la altura de una pirmide de base rectangular y devuelva su volumen (el volumen a de la pirmide es 1/3 del rea de la base por la altura). a a

Ejercicio 1.21Usando las funciones de los ejercicios 1.9 y 1.10, crea una funcin que reciba los tres coecientes de o un polinomio de segundo grado de ra ces reales y devuelva el producto de las mismas (se elegirn a los coecientes para que as sean). Prueba con varios polinomios (el producto de las dos ra ces ha de ser c/a).

Ejercicio 1.22(Para los valientes). Crea una funcin que que reciba los tres coecientes de un polinomio de grado o 2, llame a la funcin del apartado anterior para calcular el producto de sus ra y que cuando las o ces ra sean nmeros complejos o cuando sea una ra doble, devuelva 0 en lugar del producto de las ces u z ra ces. Para ver si las ra con complejas o reales, puedes ver el signo del discriminante, b2 4ac. ces

1.7.

Condicionales anidados.

Las estructuras de control pueden contener dentro de sus bloques de instrucciones internos otras estructuras de control. Es habitual que dentro de un bucle hay condicionales, o que dentro del bloque de un condicional haya un bucle y tambin es habitual que dentro del bloque e de un condicional haya otro condicional. Esto lo reejamos en el siguiente esquema. function y=nombrefuncion(arg1,arg2,....) .... .... if cond bloque10 if cond1 bloque11 end bloque12 else bloque2 end .... .... Para mostrar el funcionamiento, planteamos un ejemplo muy interesante, devolver el signo de una variable entera n. Si n es estrictamente negativa el signo se toma como -1, si n es 0, el signo ser 0, y si n es estrictamente positiva, el signo ser 1. Por tanto, hay que gestionar a a tres posibilidades excluyentes, lo que abordaremos primero eliminando una de ellas frente a las otras dos y despus las otras dos entre si. e Pg. 44 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

% ud1_fsigno % funcin que devuelve el signo de un nmero entero n o u % -1 si es negativo, 0 si es 0, 1 si es positivo. % primeros condicionales anidados. function signo=ud1_fsigno(n) if nmayor mayor=c; end end

Ejercicio 1.38Qu devuelve la siguiente funcin? e o

Pg. 48 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

function y=ud1_prueba2(a,b,c) y=a+b+c; if a>b | c>b y=y-b; if a>c y=y-c; else y=y-a; end else y=b; end Trata de obtenerlo sin usar el ordenador y despus comprubalo con algunos ejemplos. e e

Ejercicio 1.39Usando la funcin ud1 fmayor, construye una funcin que devuelva el mximo de cuatro valores. o o a

Ejercicio 1.40(Para valientes) Idem con seis valores. Trata de hacerlo con un unico if else y utilizando dos veces la funcin del apartado 1.36. o

Ejercicio 1.41(Para valientes) Idem con siete valores. Trata de hacerlo con el menor nmero posible de if else u (ninguno).

Ejercicio 1.42(Para valientes) Qu errores hay en el siguiente programa? Se supone que la funcin deber devolver e o a la potencia del segmento denido por tres abscisas a, b, c, es decir, el producto de las longitudes de los dos segmentos que determinan. No se sabe cul es la relacin de orden entre los valores pero si a o fuesen crecientes, la potencia ser (b a) (c b). afunction pot=ud1_fpotencia(a,b,c) if a>b & a>c if b>c pot=(a-b)*(b-c) else pot=(a-c)*(c-b) end end if b>a & b>c if a>c pot=(b-a)*(a-c) else pot=(b-c)*(c-a) end else if a>b pot=(c-a)*(a-b) else pot=(c-b)*(b-a) end end

Trata de hacerlo primero en papel para encontrar algunos errores y luego prueba con el ordenador. Prueba con (1, 2, 3), (3, 2, 1), (2, 1, 3), etc y con (1, 1, 2), (1, 2, 1), (2, 1, 1) y (1, 1, 1) (en estos cuatro ultimos casos deber dar 0). a

Pg. 49 a

Lenguajes de Programacin: Gu ECTS o a

1.10.

Operadores de comparacin: son iguales? o

La operacin de comparar si dos valores enteros son iguales tiene una sintaxis espec o ca en MATLAB, colocando el s mbolo = de modo duplicado, ==. Cuando se trate de valores correspondientes a nmeros reales, esta operacin es ms delicada y hablaremos de ella ms u o a a adelante. En el siguiente ejemplo se muestra su uso para construir una funcin que indica si o dos valores son iguales o no.% ud1_figuales % operador de comparacion para numeros enteros function chivato=ud1_figuales(m,n) if m==n chivato=1; else chivato=0; end

La negacin lgica se escribe en MATLAB anteponiendo al operador correspondiente el s o o mbolo , el cual se obtiene pulsando las teclas AltGr y 4. Por tanto, el operador para comprobar si dos valores son distintos ser =. En los siguientes ejercicios veremos algn ejemplo de a u utilizacin de este operador. o Ejercicio 1.43Edita manualmente la funcin ud1_figuales, gurdala en tu carpeta de trabajo y prubala, desde o a e la ventana de comandos de MATLAB.

Ejercicio 1.44Construye una funcin que reciba tres nmeros enteros a, b y c y devuelva 1 si son iguales entre si, o u y 0 en caso contrario.

Ejercicio 1.45Construye una funcin que reciba tres nmeros enteros a, b y c y devuelva 1 si a = b, 2 si a = b y o u b = c y 3 si los tres valores son iguales.

Ejercicio 1.46Construye una funcin que reciba tres nmeros enteros a, b y c y devuelva 2 si los tres son iguales o u entre si, 1 si dos de ellos son iguales entre si pero el tercero es diferente, y 0 si los tres son distintos.

Ejercicio 1.47Repetir el ejercicio 1.46 sin utilizar ni else, ni elseif.

1.11.

Igualdad entre nmeros reales: precisin y valor abu o soluto

Entender cmo el ordenador almacena y trabaja con nmeros con cifras decimales escapa o u al contenido de este libro. Sin embargo, dado que la memoria RAM es nita, en nmeros u racionales peridicos o en nmeros irracionales, es fcil entender que ser imposible almacenar o u a a las innitas cifras que hay a la derecha del punto decimal. Adems de estas dicultades de ala macenamiento, est la dicultad conceptual relativa a la idea de igualdad entre nmeros reales. a u Pg. 50 a

UNIDAD DIDACTICA 1. FUNCIONES Y CONDICIONALES

La mejor respuesta es pensar que dos nmeros reales (y en general dos objetos cualesquiera en u la vida profesional) son iguales cuando las diferencias entre ellos sean tan pequeas como lo n requiera una determinada tarea. As dos sillas del mismo modelo son objetivamente distintas , si las vemos con mucho cuidado, pero si no tienen ningn defecto, sern a todos los efectos u a iguales. Lo mismo sucede con los nmeros reales. Diremos que dos nmeros reales son iguales u u cuando el valor absoluto de su diferencia sea menor que un umbral de precisin determinado o que depender del signicado y utilidad de dichas cantidades. a En el siguiente ejemplo observamos cmo se dene ese umbral para comprobar si un tringulo o a es equiltero, issceles, etc., y como se comprueba la igualdad de los lados recurriendo a la a o funcin valor absoluto, abs en MATLAB. o% ud1_ftriangulos % recibe a, b y c, los lados de un tringulo a % devuelve 3 si son los lados de un tringulo equiltero a a % devuelve 2 si son de un tringulo issceles a o % devuelve 1 si son los lados de un tringulo escaleno a % idea: cuando dos numeros reales son iguales, para % comprobarlo hay q definir una precisn-umbral. o function tipo=ud1_ftriangulos(a,b,c) % Precisin con la que trabajamos. Todo nmero menor que o u % esa cantidad ser cero para nosotros a prec=(a+b+c)*1e-5; if abs(a-b)0 suma=suma+b; end if c>0 suma=suma+c; end if d>0 suma=suma+d; end Los ejercicios correspondientes a este ejemplo son los siguientes: Ejercicio 1.59 Prueba la funcin ud1_fsumapos o Ejercicio 1.60 Construye una funcin que reciba 5 nmeros a, b, c, d, y e y cuente cuntos son estrictamente o u a positivos. Ejercicio 1.61 Construye una funcin que reciba 5 nmeros x, y, z, t, y s y dos nmeros a y b y devuelva la suma o u u de aquellos nmeros de entre esos 5 que son mayores e iguales que a y menores o iguales que b. u Ejercicio 1.62 Construye una funcin que reciba 5 nmeros a, b, c, d, y e y un nmero adicional positivo ref y o u u devuelva la suma de aquellos valores que sean negativos pero que su valor absoluto sea mayor que ref . Por ejemplo, si los nmeros son, -7, 12, 4, -3, -6 y ref vale 3.7, la suma ser -7-5-=-13. u a

Pg. 53 a

Lenguajes de Programacin: Gu ECTS o a

1.14.

Funcin parte entera o

Hay una funcin propia de MATLAB que se usa en muchos cdigos y que conviene citar. Es la funcin o o o que extrae la parte entera, redondeando hacia , de un nmero. As la parte entera de 3.45 es 3, u , y la de -4.32 es -5. En el siguiente ejemplo se usa este operador, oor, para comprobar si un nmero u es o no entero. %% ud1_fesentero %% comprueba si un numero x es entero %% funcion parte entera function chivato=ud1_fesentero(x) parte_entera=floor(x); if x==parte_entera chivato=1; else chivato=0; end Los ejercicios correspondientes a este ejemplo son los siguientes: Ejercicio 1.63 Prueba la funcin ud1_fesentero. o Ejercicio 1.64 Construye una funcin que reciba 4 nmeros a, b, c, d y devuelva la suma de los que entre ellos son o u enteros. Ejercicio 1.65 Construye una funcin que reciba un nmero natural n y devuelva 0 si n es par y 1 si n es impar. o u Ejercicio 1.66 (Para valientes) Construye una funcin que reciba 4 nmeros a, b, c, d y un nmero entero n y o u u devuelva la suma de los que entre ellos son enteros y adems mltiplos de n. a u

Pg. 54 a

Unidad Didctica 2 a Bucles2.1. General

Como ya se indic al comienzo de la unidad 1, esta segunda unidad contiene junto con la primera la o mayor de las herramientas que un alumno va a tener que utilizar a lo largo del curso. a La unidad se centra en la estructura de control ms importante, la que permite realizar repeticiones: a los bucles. El bucle junto con los condicionales representan la base de la programacin estructurada. o

2.2.

Bucles

En muchos problemas de matemticas se requiere repetir o iterar un mismo procedimiento. Es por a ello que todos los lenguajes de programacin contienen la posibilidad de crear bucles. Un bucle en o programacin es una sentencia que se realiza repetidas veces. Un bucle se utiliza para hacer un accin o o repetida sin tener que repetir varias veces el mismo cdigo, lo que ahorra tiempo, deja el cdigo ms o o a claro y facilita su modicacin en el futuro. o La variable entera que cuenta el nmero de veces que regula la evolucin del bucle se conoce como u o ndice del bucle. Durante este curso un bucle lo relacionaremos con el uso del comando WHILE. La gran ventaja de los bucles escritos mediante el uso de la sintaxis WHILE frente a otras formas de escribir un bucle radica en que el ndice del bucle es una variable ms del programa y su valor es a controlado en todo momento por el programador. Con este tipo de bucles, el n de la iteratividad viene determinado por una condicin sobre una variable del programa que aparece a continuacin o o del comando WHILE. El primer ejemplo ilustra uno de los usos ms t a picos de los bucles que sin lugar a dudas es la suma de un conjunto de elementos. El conjunto de elementos que se quieren sumar en este caso son los naturales de 1 a n. El ndice i se inicializa por tanto a 1 y n es un argumento de la funcin. La o condicin de corte del proceso iterativo que requiere la estructura WHILE se ejecutar cuando el o a ndice i sea mayor que n, en cualquier otro caso i se ir incrementando en una unidad y la variable suma a se ver incrementada en el valor del propio a ndice i. De esta forma cuando el bucle se interrumpa la variable suma contendr el valor resultante de la suma de los n primeros nmeros naturales. a u %ud2_fsuma % Suma de todos los naturales entre 1 y n % primer bucle function suma=ud2_fsuma(n) suma=0; i=1;

Pg. 55 a

Lenguajes de Programacin: Gu ECTS o awhile i