Guia Matlab

´ cticas de Ana ´ lisis Pra Matricial con MATLAB

Ion Zaballa

´ Indice general
1. Lo B´ asico 1.1. Introducci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Comienzo y Fin de una sesi´ on de MATLAB . . . . . . . . . . . . . . . . . . . . . 1.3. Sistema de Ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Edici´ on en la L´ ınea de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Matrices y Vectores 2.1. Generaci´ on de matrices expl´ ıcitamente . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Elementos de Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2. Formatos de Salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Manipulaci´ on de vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Matrices a partir de funciones predefinidas en MATLAB . . . . . . . . . . . . . . 2.4. Otras formas de generar matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. El Entorno de Trabajo de MATLAB 3.1. El Espacio de Trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Comandos save y load . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2. El Comando diary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3. L´ ıneas de comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. El Camino de b´ usqueda (SEARCH PATH) de MATLAB . . . . . . . . . . . . . . 3.3. Manipulaci´ on de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1. Ejecuci´ on de Programas Externos . . . . . . . . . . . . . . . . . . . . . . 4 4 5 6 7 9 9 11 12 14 20 22 24 24 25 26 26 27 29 30

2

3 4. Programaci´ on en MATLAB 4.1. Empezando a programar en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Operadores relacionales y l´ ogicos . . . . . . . . . . . . . . . . . . . . . . . 4.1.2. Bifurcaciones y Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3. Presentaci´ on de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Scripts y Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. N´ umeros complejos y polinomio 5.1. N´ umeros Complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. C´ alculo con Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 33 38 41 42 50 50 51 54 55 57 57 61 63 63 64 65

A. Funciones incorporadas en MATLAB A.1. Funciones que act´ uan sobre escalares . . . . . . . . . . . . . . . . . . . . . . . . . A.2. Funciones que act´ uan sobre vectores . . . . . . . . . . . . . . . . . . . . . . . . . A.3. Funciones que act´ uan sobre matrices . . . . . . . . . . . . . . . . . . . . . . . . . B. Consejos para el uso de Matlab en picasso C. Env´ ıo de ficheros C.1. Preparativos en picasso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C.2. Transferencia de ficheros a picasso . . . . . . . . . . . . . . . . . . . . . . . . . . C.3. Env´ ıo de los ficheros por correo electr´ onico . . . . . . . . . . . . . . . . . . . . .

proporcionan funciones espec´ ıficas para el c´ alculo num´ erico de ciertas partes concretas de la matem´ atica.1. y que por lo tanto todas las operaciones se refieren a matrices. Existen muchos otros toolboxes que. J.mathworks. Por lo tanto. durante los u ´ltimos a˜ nos ha evolucionado de forma que hoy se puede considerar como un software de prop´ osito general para todas las ramas de la matem´ atica y la ingenier´ ıa desde el punto de vista num´ erico y computacional. Tambi´ en es posible el c´ alculo simb´ olico con MATLAB siempre que se disponga del toolbox apropiado.com. edita do por SIAM. Trabajando con MATLAB se debe tener muy claro que las unidades b´ asicas son matrices (un escalar es. Si se quiere disponer de una buena y completa gu´ ıa de MATLAB. Higham y N. aqu´ ı s´ olo se cubrir´ an aquellos aspectos de MATLAB que tienen relaci´ on con la materia discutida en dicha asignatura. Se puede ejecutar MATLAB sobre cualquier sistema operativo. por lo tanto. que se entregar´ an en clase. se plantear´ an ejercicios en base al contenido de esta gu´ ıa y que deben ser resueltos personalmente. una matriz 1 × 1).Cap´ ıtulo 1 Lo B´ asico 1. la ingenier´ ıa y otras ciencias. sobre la base del n´ ucleo de MATLAB. J. mi recomendaci´ on es el libro MATLAB Guide de D. en este caso el Symbolic toolbox. Aunque el origen de MATLAB estuvo ´ ıntimamente ligado a la manipulaci´ on y computaci´ on de y con matrices. Si se quiere informaci´ on sobre los productos relacionados con MATLAB puede visitarse la p´ agina web de la empresa que lo desarrolla: www. Higham. Introducci´ on Este documento pretende ser una gu´ ıa b´ asica para introducirse de forma personal en el uso de MATLAB y en relaci´ on con la asignatura An´ alisis Matricial Aplicado. En otros documentos. Se presupone que las pr´ acticas se realizar´ an en la sala de inform´ atica del Departamento de Matem´ atica Aplicada y EIO o en una 4 .

Por ello. en el men´ u principal). De momento s´ olo nos interesa la u ´ltima de ellas que es la ventana de comandos de MATLAB. A partir de la versi´ on 6 los interfaces gr´ aficos para los sistemas basados en MSWindows y UNIX son muy parecidos. la sala est´ a compuesta de una serie de terminales gr´ aficos conectados a un servidor de SUN Microsystems dotado del sistema operativo UNIX Solaris y cuyo nombre en internet es picasso.Lo B´ asico 5 de las aulas de ordenadores de la Facultad de Ciencias. se debe abrir primero una sesi´ on X: Escribir el username y password.2.lc. En este modo hay una serie de reglas que se recomienda utilizar y que se exponen en el Ap´ endice B. principalmente si hay muchos usuarios conectados y dependiendo de la calidad de los terminales gr´ aficos. Command History y Command Window. Para ejecutar MATLAB en modo consola se debe abrir una xterminal y en ella escribir matlab -nodesktop. en su mayor´ ıa.es. Todas estas ventanas tienen. Esto significa que las explicaciones que damos en estas notas son. cerramos las dem´ as con un click del rat´ on en el s´ ımbolo de cada ventana. la u ´ltima versi´ on de MATLAB (Realease 14–MATLAB 7) corrige algunas deficiencias de edici´ on con el teclado en castellano (como la ubicaci´ on del s´ ımbolo [ o el acento circunflejo ^) que ten´ ıan las versiones anteriores para los sistemas UNIX. En el segundo caso se trata de un aula de ordenadores personales con sistema operativo MSWindows (en alguna de sus versiones. se debe escribir matlab y pulsar la tecla de entrada. por ejemplo Launch Pad. posiblemente XP). En el primer caso. as´ ı que hay muy pocas diferencias en el entorno de trabajo de MATLAB para ambos sistemas operativos.1 (si se trabaja con versi´ on 7. de momento. aunque no es estrictamente necesario. En realidad hay otras ventanas ocultas que se pueden ir cerrando sucesivamente hasta que no quede m´ as que la ventana Command Window. una vez ejecutadas las acciones mencionadas. La ventana es parecida en versiones anteriores. un inter´ es . En picasso podemos ejecutar MATLAB en modo consola o utilizando un interfaz gr´ afico. pero hay algunas diferencias. por ejemplo. bien sea bajo UNIX o MSWindows. la ventana principal puede estar compuesta de otras varias.ehu. En un PC o Mac basta hacer doble “click” con el bot´ on izquierdo del rat´ on sobre el icono de MATLAB. MATLAB puede consumir muchos recursos del sistema. aparecer´ a el logotipo de MATLAB y a continuaci´ on una ventana como la que se muestra en la Figura 1. 1. que es m´ as sencillo. En cualquier caso. Trabajando en modo gr´ afico. Trabajando en picasso en modo gr´ afico. Abrir una ventana de comandos command tool. Para utilizar MATLAB en modo gr´ afico. Si es la primera vez que se ejecuta MATLAB. Adem´ as. Si este fuera el caso (que se nota por una excesiva ralentizaci´ on del sistema) es recomendable trabajar en modo consola. En lo sucesivo hablaremos de picasso para referirnos a ´ el. Comienzo y Fin de una sesi´ on de MATLAB Una sesi´ on de MATLAB se comienza de forma diferente seg´ un la plataforma sobre la que lo ejecutemos. de aplicaci´ on para MATLAB bajo ambos sistemas.

secundario y siempre se pueden volver a abrir seleccion´ andolas con el rat´ on en el men´ u view de la ventana principal. Lo anterior implica que se sabe lo que se busca. Sistema de Ayuda El sistema de ayuda de MATLAB es muy completo. por ejemplo. Los dos niveles de ayuda anteriores (help funci´ on y helpwin) est´ an disponibles tanto en modo gr´ afico como en modo consola. en la propia ventana de comandos (en el primer caso) y en una ventana aparte en formato m´ as bonito (en el segundo).1: Ventana inicial de MATLAB. en cada uno de ellos se obtiene una ayuda exhaustiva de lo que hace cada funci´ on. MATLAB responde. Hay varios niveles de ayuda: desde “demos” hasta ayuda especializada para saber lo que hace una determinada funci´ on o comando. Cuando hablamos de usar un comando (por ejemplo quit). de nuevo. una tercera posibilidad de ayuda m´ as general. Empezando por lo u ´ltimo. Pinchando en cada una de ellas se obtiene un listado con los comandos o funciones que hay en dicha carpeta. lo que es y hace el comando lu se teclea en la ventana de comandos help lu o helpwin lu. Por ejemplo. adem´ as. En la ventana de comandos de MATLAB aparece el s´ ımbolo >> (´ este es el “prompt” de MATLAB) y el cursor parpadeando.Lo B´ asico 6 Figura 1. nos referimos a escribir detr´ as del “prompt” de MATLAB la palabra correspondiente (en este caso quit) y pulsar la tecla de entrada.2 con toda la ayuda . explicando todo lo relativo a dicho comando. Hay niveles m´ as generales de ayuda. Para finalizar la sesi´ on en cualquier sistema basta escribir el comando quit.3. tecleando helpwin aparece una relaci´ on de las carpetas de MATLAB que contienen ayuda y una breve descripci´ on del contenido de cada carpeta. Al pinchar. si se quiere saber. El programa est´ a preparado para recibir ´ ordenes. 1. Pinchando en Help en el menu principal de MATLAB y seleccionando MATLAB Help aparecer´ a una nueva ventana como la de la Figura 1. Alternativamente se puede elegir Exit MATLAB en el men´ u File del men´ u principal. Si se trabaja en modo gr´ afico hay.

s´ ımbolo . A partir de aqu´ ı se puede ir de un sitio a otro pinchando en el lugar apropiado como en un navegador de internet.4. no es necesario volver a reescribir todo de nuevo. MATLAB recordar´ a el u ´ltimo . Esto suele suceder cuando se ha observado un error al escribir y se mueve el cursor hacia atr´ as para corregir el fallo. se puede dar entrada estando el cursor en cualquier punto de dicha l´ ınea. En la parte izquierda aparece un men´ u que se puede desplegar pinchando en el Figura 1.Lo B´ asico 7 de MATLAB. 1. Si se va a volver a utilizar un comando ya usado anteriormente (o parte de ´ el). basta teclear unos pocos caracteres de dicho comando y entonces usar la tecla ↑. Las teclas de flechas o la combinaci´ on de la tecla ctrl y otra pueden ayudarte: ↑ ↓ ← → ctrl-→ ctrl-← Inicio Fin Esc Supr Backspace ctrl-p ctrl-n ctrl-b ctrl-f ctrl-r ctrl-l ctrl-a ctrl-e ctrl-u ctrl-d ctrl-h ctrl-k Reescribe la l´ ınea anterior Reescribe la l´ ınea siguiente Mueve el cursor un car´ acter hacia atr´ as Mueve el cursor un car´ acter hacia adelante Mueve el cursor una palabra a la derecha Mueve el cursor una palabra a la izquierda Mueve el cursor al comienzo de la l´ ınea Mueve el cursor al final de la l´ ınea Borra la l´ ınea Borra el car´ acter sobre el cursor Borra el car´ acter que est´ a delante del cursor Borra todo desde el cursor hasta el fin de la l´ ınea No es necesario poner el cursor al final de la l´ ınea de comandos para que MATLAB reconozca la l´ ınea entera. Edici´ on en la L´ ınea de Comandos Si se comete alg´ un error cuando se est´ a introduciendo un comando de MATLAB.2: La ventana de ayuda de MATLAB.

Sucesivas pulsaciones de ↑ producen la aparici´ on de los anteriores comandos que empiezan por las letras o s´ ımbolos escritos. .Lo B´ asico 8 comando que comenzaba con esos caracteres. Tambi´ en se puede utilizar el cl´ asico sistema de copiar y pegar para producir ´ ordenes en la l´ ınea de comandos.

Para indicar el final de una fila se debe escribir . Cargando matrices desde un fichero de datos externo. 9 .1. Generaci´ on de matrices expl´ ıcitamente La forma m´ as sencilla de introducir matrices es escribiendo expl´ ıcitamente los elementos de la matriz. Generando matrices con funciones predefinidas en MATLAB. Los elementos de cada fila deben estar separados por comas o espacios en blanco.Cap´ ıtulo 2 Matrices y Vectores Vectores y matrices son para MATLAB la misma cosa. Para obtener una matriz escribiendo sus elementos s´ olo hay que tener en cuenta unas pocas reglas: Los elementos de la matriz hay que introducirlos fila a fila. Creando matrices con funciones definidas por el usuario/a a trav´ es de ficheros M. En este cap´ ıtulo analizaremos cada una de estas formas de generar matrices y vectores. [ ]. Las otras formas de generar matrices las iremos viendo posteriormente.. Se pueden introducir matrices en MATLAB de varias formas: Introduciendo una lista expl´ ıcita de elementos. 2. La lista de todos los elementos debe estar encerrada entre corchetes.

5 10 11 8. Por ejemplo para introduir la matriz   16 3 2 13  5 10 11 8   A=  9 6 7 12  4 15 14 1 escribir´ ıamos: >> A=[16 3 2 13. 4 15 14 1] MATLAB responde: ans = 16 3 2 5 10 11 9 6 7 4 15 14 13 8 12 1 . Por ejemplo >> A=[16 5 9 4 3 2 13. lo u ´nico que hay que hacer es terminar la l´ ınea con tres puntos: ... 4 15 14 1] La respuesta de MATLAB.. De cualquiera de las formas la matriz introducida queda asignada a la variable A. ser´ ıa: A = 16 3 2 5 10 11 9 6 7 4 15 14 13 8 12 1 A veces el n´ umero de elementos en cada fila es muy grande y es preferible introducir una fila en cada l´ ınea. . 15 14 1 ] produce la misma matriz.. MATLAB producir´ ıa un mensaje de error. Debe observarse que con MATLAB no hay que declarar las variables. . 9 6 7 12. y teclear retorno. Se podr´ ıa haber introducido la matriz sin asign´ arsela de forma espec´ ıfica a una variable. en caso contrario.... si escribimos >> [16 3 2 13.. . 10 11 8. 6 7 12. una vez pulsada la tecla de retorno.Matrices y Vectores 10 Debe observarse que el n´ umero de elementos en cada fila debe ser el mismo. 9 6 7 12. 5 10 11 8. Por ejemplo.

seno sin . incluyendo valor absoluto abs. Esta variable es como las dem´ as. exponencial exp .3 produce x = -1.8000 sqrt(3) (1+2+3)*4/5] MATLAB dispone de un gran n´ umero de funciones elementales matem´ aticas.Matrices y Vectores 11 Aunque nosotros no hemos asignado la matriz a ninguna variable. ´ Para saber las variables que tienes definidas puedes usar el comand who. As´ ı.7321 4. que es una variable predefinida en el sistema. MATLAB se la asigna a la variable ans. Todas ellas se usan m´ as o √ menos igual. En el siguiente cap´ ıtulo se explica c´ omo acceder a esta ventana y lo que significa.1. para calcular 3 escribir´ ıamos sqrt(3). Dado que A y ans son dos variables a las que les hemos asignado el mismo valor. 2. ra´ ız cuadrada sqrt . etc. pero en realidad los elementos de una matriz pueden ser cualquier expersi´ on v´ alida de MATLAB. Elementos de Matrices En el ejemplo anterior los elementos de la matriz eran n´ umeros enteros. Por ejemplo >> x=[ -1.1.3000 1. Una lista de todas las funciones elementales con su uso se puede obtener utilizando la ayuda interactiva: . el resultado de multiplicar A por s´ ı misma debe ser el mismo que el de multiplicar ans por s´ ı misma: >> A*A ans = 341 261 285 269 285 301 309 261 261 309 301 285 269 285 261 341 >> ans*ans ans = 341 285 261 301 285 309 269 261 261 309 301 285 269 285 261 341 MATLAB distingue entre may´ usculas y min´ usculas de forma que a y A son dos variables distintas. Tambi´ en proporciona muchas funciones matem´ aticas avanzadas como las funciones de Bessel o la funci´ on Gamma. MATLAB no produce un error si se le pide la ra´ ız cuadrada o el logaritmo de un n´ umero negativo. Estas tambi´ en aparecen en la ventana workspace. sino que devuelve el correspondiente n´ umero complejo.

2.Matrices y Vectores >> helpwin 12 y haciendo doble click en /matlab/elfun y /matlab/specfun. Estos son los posible formatos format format format format format format format format short long hex bank short e short g long e loose coma fija con 4 decimales(formato por defecto) coma fija con 15 decimales cifras hexadecimales n´ umeros con dos cifras decimales notaci´ on cient´ ıfica con 4 decimales notaci´ on cient´ ıfica o decimal. 2−1022 . “Not-A-Number”. √ la unidad imaginaria. En realidad.2. 2−52 = 2. Formatos de Salida En el ejemplo de m´ as arriba hemos podido observar que aparentemente MATLAB siempre responde redondeando los resultados de las operaciones correspondientes a cuatro cifras decimales. Es decir distancia de 1. a una determinada cantidad (103 y 10−3 ). n´ umero en coma flotante m´ as peque˜ no. Se produce al dividir un n´ umero distinto de cero por cero. lo mismo que i. Para ello se dispone del comando format.0 al siguiente n´ umero m´ as pr´ oximo en coma flotante.1. (2 − eps)21023 . . respectivamente. dependiendo del valor notaci´ on cient´ ıfica con 15 decimales intercala algunas l´ ıneas en blanco en las salida para facilitar la lectura (por defecto) elimina las l´ ıneas en blanco del fomat loose aproxima los n´ umeros a cocientes de enteros.204e − 16. precisi´ on relativa de los n´ umeros en coma flotante.14159265. i. Tambi´ en hay una serie de constantes predefinidas: pi i j eps realmin realmax inf nan 3. los resultados puede presentarlos de diversas formas.e. −1. . En el Ap´ endice A se resumen algunas de la funciones m´ as importantes de MATLAB. . n´ umeros racionales format compact format rat MATLAB aplica un factor de escala general a las matrices cuando los elementos m´ as grandes o m´ as peque˜ nos son superiores o inferiores. n´ umero en coma flotante m´ as grande. Se produce al evaluar expresiones como 0/0 o inf-inf. infinito.

Ambas producen lo mismo cuando son aplicadas a n´ umeros. respectivamente.\ ./ . Si A y B son matrices y A es invertible entonces A \ B = A−1 B y B/A = BA−1 . 2 3] ans = 4 7 8 15 >> [1 2. ni A/B que A.*[0 1. En otras palabras A \ B y B/A son soluciones (´ unicas si A es invertible) de las ecuaciones AX = B y XA = B . As´ ı 1/4 y 1 \ 4 producen el mismo valor num´ erico: 0. Cuando estos operadores est´ an precedidos por un punto. 2 3] ans = 0 2 6 12 Cuando la operaci´ on se hace entre una matriz y un escalar el resultado es el mismo: . Los primeros son el producto y la “divisi´ on” (en el sentido de m´ as arriba) habituales./B.∗ .25. De la misma forma A es la transpuesta de A y si a es un n´ umero a = a.ˆ multiplicaci´ on t´ ermino a t´ ermino divisi´ on a la derecha t´ ermino a t´ ermino divisi´ on a la izquierda t´ ermino a t´ ermino potenciaci´ on t´ ermino a t´ ermino Dadas dos matrices A y B no es lo mismo A*B que A. 3 4]*[0 1. la operaci´ on se realiza elemento a elemento. De la misma forma B/A es una matriz C tal que C ∗ A es aproximadamente B . As´ ı >> [1 2. Hay otras operaciones especiales para matrices: . Si A no es invertible A \ B es una matriz C tal que A ∗ C es aproximadamente B (en cierto sentido que estudiaremos en teor´ ıa). por eso se incluye la transposici´ on y la divisi´ on por la izquierda. 3 4].*B.Matrices y Vectores 13 Las expresiones se pueden construir con n´ umeros (reales o complejos) y utilizando los operadores aritm´ eticos y las reglas de precedencia habituales (en caso de duda siempre se pueden utilizar par´ entesis): + − ∗ / \ ˆ ’ adici´ on sustracci´ on multiplicaci´ on divisi´ on por la derecha divisi´ on por la izquierda potenciaci´ on transposici´ on Estos mismos operadores se utilizan con matrices.

^3.2. Manipulaci´ on de vectores y matrices Puesto que las unidades b´ asicas de MATLAB son las matrices. 3 4] ans = 0.5000 1.5000 1. s´ olo es aplicable a matrices cuadradas. Sirve para generar vectores y matrices cuyos elementos est´ an igualmente espaciados. y de manipular los elementos de una matriz. es aplicable a cualquier matriz. Para evitar el uso de este s´ ımbolo tenemos la siguiente alternativa: A. : .^3=power(A.0000 14 ¿Qu´ e responder´ a MATLAB a la siguiente orden? >> 2/[1 2. En algunos sistemas UNIX puede haber problemas para escribir el signo de potenciaci´ on ˆ en MATLAB. 3 4] Para una matriz A tampoco es lo mismo A^3 que A. Lo primero es el resultado de multiplicar A por s´ ı misma tres veces. 3 4] ans = 0.0000 1. As´ ı >> x=1:5 produce un vector cuyas componentes van de 1 a 5 en incrementos de 1: x = 1 Mientras que >> y=0:pi/4:pi proporciona un vector entre 0 y π con incrementos de π/4: 2 3 4 5 . es uno de los m´ as importantes.5000 1.3) 2.5000 2. dispone de varias formas de crear vectores y matrices de forma casi autom´ atica.Matrices y Vectores >> 2\[1 2. Lo segundo es la matriz cuyos elementos son los cubos de los elementos de A.0000 >> 2. El operador dos puntos.3) A^3=mpower(A.0000 2.\[1 2.

5000 3.3562 3.Matrices y Vectores y = 0 0.pi). Si escribimos >> A(2.1416 15 Tambi´ en son posibles incrementos negativos: >> z=6:-.4) MATLAB nos devuelve: ans = 8 Se puede modificar el elemento de cualquier posici´ on sin m´ as que cambiar su valor. 9 6 7 12.0000 4.5) k = -1.pi.7321 -0. As´ ı. con la matriz A de m´ as arriba (que utilizaremos a lo largo de esta secci´ on): >>A=[16 3 2 13. para los siguientes ejemplos. la misma matriz A. √ asignar´ ıa a la variable k un vector de 100 componentes igualmente espaciadas entre − 3 y π (hemos escrito .1416 El n´ umero de componentes por defecto es 100. el elemento de la fila i y la columna j . 4 15 14 1] A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 el elemento en la posici´ on (2.5136 0.0000 3.5708 2.9232 3. al final del comando para que el resultado no sea mostrado).5000 5. dada una matriz A.j).0000 El comando linspace se puede utilizar para generar un vector en el que se especifica las componentes primera y u ´ltima y el n´ umero de ellas: >> k=linspace(-sqrt(3). primero almacenamos en c el elemento que vamos a cambiar y a continuaci´ on recuperamos la matriz original:: . Esto significa que una sentencia del tipo >> k=linspace(-sqrt(3).0000 5.5000 4.5:3 z = 6.7854 1.7048 1. 4) es 8. se denota por A(i. 5 10 11 8. Por otra parte. La respuesta de MATLAB es toda la matriz con el nuevo valor en dicha posici´ on. Para seguir manteniendo.

0000 10.A(2. despu´ es de una orden produce el efecto de que el resultado no se escribe en la pantalla. Tal y como se ha mencionado m´ as arriba escribir .5) ??? Index exceeds matrix dimensions.0000 4.8900 9. (M´ as abajo hay un ejemplo).end) ans = 1 >> A(2.4). para que los resultados no aparezcan en la pantalla.0000 14. Desde la versi´ on 5 de MATLAB se puede usar end para indicar el u ´ltimo elemento de una matriz. si pedimos el valor del elemento en la posici´ on (4. As´ ı: >> a=4:10 a = 4 5 >> a(end) ans = 10 >> A(end.4). MATLAB nos devuelve un mensaje de error porque el tama˜ no de A es 4 × 4: >> A(4.2) ans = 8 6 7 8 9 10 .0000 >> A(2.4)).Matrices y Vectores >> c=A(2.4)) -1/log10(A(3. respecto de una dimensi´ on dada.0000 1.4))-1/log10(A(3.4)=c A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 16 En la primera l´ ınea de comandos hemos puesto dos ´ ordenes: c=A(2. Por otra parte.0000 9.0000 3.0000 13.0000 2. En cada l´ ınea de comandos podemos poner cuantas ´ ordenes queramos separadas bien sea por comas (en cuyo caso los resultados correspondientes aparecer´ an sucesivamente en la pantalla) o bien por .0000 11.0000 5.4)= 3*sqrt(A(1.4)) c = 8 A = 16.0000 12.end) ans = 15 >> A(end.0000 15. 5).4)= 3*sqrt(A(1.A(2.0000 6.0000 7.

MATLAB cuenta los elementos por columnas y nos devuelve el elemento correspondiente: .[3 4]) C = 2 13 7 12 Si queremos la submatriz formada por las dos primeras filas podemos utilizar el comando dos puntos: >> A([1 2]. Si a una matriz le especificamos un solo sub´ ındice.7.:) ans = 16 3 5 10 2 11 13 8 O.10 y 13. el comando A(2:2:10. si A fuera una matriz 10×15. Para ello basta expresar la submatriz deseada en notaci´ on vectorial.4. utilizando el comando end: >> A(end-2:end.Matrices y Vectores 17 No s´ olo se puede extraer cada elemento de una matriz sino cualquier submatriz. para obtener el “subvector” de a formado por los u ´ltimos 5 primeros elementos escribir´ ıamos: >> a(1:5) ans = 4 5 6 7 8 y el formado por los u ´ltimos 4: >> a(end-3:end) ans = 7 8 9 10 Para obtener la submatriz formada por los elementos que ocupan las posiciones donde se interceptan las filas 1 y 3 y las columnas 3 y 4 escribir´ ıamos: >> C=A([1 3]. end-1:end) ans = 11 8 7 12 14 1 Podemos hacer uso de esta t´ ecnica para generar submatrices correspondientes a filas o columnas igualmente espaciadas.1:3:15) nos devolver´ ıa la submatriz formada por las filas pares y las columnas 1. Por ejemplo. As´ ı.

har´ ıamos lo siguiente: >> B=A([2 1 3 4].Matrices y Vectores >> A(7) ans = 6 >> A(12) ans = 14 18 Por el mismo motivo la orden A(:) nos devuelve el vector columna formado por los elementos de la matriz colocados columna tras columna: >> A(:) ans = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1 La notaci´ on vectorial para los sub´ ındices de una matriz puede utilizarse para permutar filas o columnas de una matriz.[1 4 3 2]) B = 5 8 11 10 16 13 2 3 9 12 7 6 4 1 14 15 Y si s´ olo queremos permutar las dos primeras filas: >> B=A([2 1 3 4].:) B = . y las columnas segunda y cuarta de A permutadas. As´ ı para obtener una matriz B con las filas primera y segunda.

En efecto. si a nuestra matriz A le queremos a˜ nadir la fila [1 3 5 7] har´ ıamos lo siguiente: >> C=[A.Matrices y Vectores 5 16 9 4 10 3 6 15 11 2 7 14 8 13 12 1 19 Dada una matriz A podemos a˜ nadirle filas y columnas sin m´ as que especificar el vector con los elementos que se quiere a˜ nadir. la orden >> B=[] nos devuelve una matriz sin elementos a la que podemos ir a˜ nadi´ endole filas o columnas como hemos hecho m´ as arriba: >> B=[] .r] C = 16 3 2 5 10 11 9 6 7 4 15 14 1 3 5 13 8 12 1 7 Si lo que queremos es a˜ nadir una columna actuar´ ıamos por transposici´ on (recordemos que r es la transpuesta de r): >> [A r’] ans = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1 1 3 5 7 Esta forma de crear matrices a partir de otras m´ as peque˜ nas nos permite ir creando matrices sobre la marcha empezando desde una “matriz vac´ ıa”. C=[A.[1 3 5 7]] C = 16 3 2 5 10 11 9 6 7 4 15 14 1 3 5 13 8 12 1 7 Claro que tambi´ en podr´ ıamos definir primero el vector fila que vamos a a˜ nadir y luego a˜ nadirlo: >> r=1:2:7. Por ejemplo.

Matrices a partir de funciones predefinidas en MATLAB Hay un buen n´ umero de funciones de matrices predefinidas en MATLAB. MATLAB crea una matriz cuadrada de tama˜ no n + |k |. Crea una matriz de tama˜ no m × n con elementos aleatorios distribu´ ıdos uniformemente entre 0 y 1 Crea una matriz de tama˜ no m × n con elementos aleatorios elegidos con una distribuci´ on normal de media 0 y varianza y desviaci´ on standrad 1 Crea una matriz de tama˜ no m × n con 1’s en la diagonal principal El argumento v es un vector y el argumento k es opcional pero si se da.n) ones(m. Una relaci´ on de todas ellas con la descripci´ on de su uso la puedes encontar escribiendo helpwin y en la ventana que aparece haciendo doble “click” en matlab/elmat.k) Crea una matriz de tama˜ no m × n cuyos elementos son todos 0. B1=[B c1’ c2’ c3’].n) randn(m. Poner k = 0 o no dar un valor expl´ ıcito produce el mismo resultado: una matriz diagonal con el vector v en la diagonal principal.2)=[] B2 = 1 7 2 8 3 9 nos devuelve la submatriz de B2 que se obtiene al suprimir la segunda columna. Simplemente igualamos a [] la submatriz que queramos eliminar: >> B2(:. Si k > 0 el vector v aparece en la k -´ esima .3. c2=2:3:8. con todos lo elementos cero excepto los de la k -´ esima diagonal que son los elementos del vector v.c3] B1 = 1 2 3 4 5 6 7 8 9 B2 = 1 4 7 2 5 8 3 6 9 20 Tambien podemos eliminar filas y/o columnas con ayuda de la “matriz vac´ ıa”. 2. Describimos aqu´ ı las funciones para generar las matrices m´ as elementales: zeros(m. c3=3:3:9.c1. B2=[B.n) rand(m.n) eye(m.Matrices y Vectores B = [] >> c1=1:3:7.n) diag(v. debe ser un n´ umero entero.c2. Crea una matriz de tama˜ no m × n cuyos elementos son todos 1.

Algunos ejemplos: >> Z=zeros(2.-1) G = -3 1 0 0 0 0 0 -1 -2 1 0 0 0 0 0 -1 -1 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 -1 1 1 0 0 0 0 0 -1 2 1 0 0 0 0 0 -1 3 >> diag(G).3) F = 5 5 5 5 5 5 5 5 5 >> N=10*rand(2.4) I = 2 0 0 0 0 2 0 0 >> G=diag(-3:3) + diag(ones(6.1850 4.1).-1) ans = -3 -2 -1 0 1 2 .Matrices y Vectores 21 diag(A.3114 4. debe ser un n´ umero entero.5) N = 9.1) + diag(-1*ones(6.1).5647 8.4470 >> I=2*eye(2.2141 2.4) Z = 0 0 0 0 0 0 0 0 >> F=5*ones(3.8598 7.diag(G. El argumento A es una matriz y el agumento k es opcional pero si se da.1).k) supradiagonal y si k < 0 en la k -´ esima subdiagonal.5013 6.0684 8.6210 0. MATLAB produce un vector: la k -esima diagonal de la matriz A.9130 4.diag(G.

separados . En primer lugar se debe crear. producidos por sesiones anteriores de MATLAB.Matrices y Vectores 3 ans = 1 1 1 1 1 1 ans = -1 -1 -1 -1 -1 -1 22 2.4. Tambi´ en se pueden consultar con el sistema de ayuda: helpwin y entonces matlab/general. Estos son ficheros almacenados en el disco duro y que han sido producidos bien por MATLAB o bien por nosotros mismos. Comentamos a continuaci´ on c´ omo generar matrices a partir de ficheros externos. Es decir. que sepa de su existencia para que pueda encontrar los ficheros all´ ı depositados. conviene tener un directorio espec´ ıfico donde almacenar estos y otros posibles ficheros. Otras formas de generar matrices Hay otras formas de producir matrices. El nombre real de este directorio para cada cu´ al puede ser diferente. Me referir´ e a matlabdir como el directorio donde se guardar´ an todos los ficheros de MATLAB creados por nosotros mismos. Por ejemplo: addpath ınea deber´ a aparecer la /ruta completa/matlabdir. Hablaremos m´ as extensamente sobre este tema y otros relacionados cuando estudiemos el entorno de trabajo de MATLAB. Para obtener matrices de ficheros de texto externos ´ estos deben estar organizados como una tabla rectangular de n´ umeros. Esto se hace con el comando pwd. Se puede cambiar al directorio que se desee con el comando cd y crear entonces el directorio matlabdir con la orden habitual: mkdir matlabdir. Hay otras ´ ordenes correspondientes al sistema operativo que se ver´ an m´ as adelante. En cualquier caso. Para ello debemos a˜ nadirlo al “path” de MATLAB con el comando addpath. Para ello conviene comprobar primero en qu´ e directorio del sistema de archivos nos encontramos. Analizamos ahora la forma de generar matrices desde ficheros externos: Con el comando load. Si ahora tecleamos path. Lo siguiente que tenemos que hacer es posibilitar que MATLAB reconozca el directorio matlabdir. Este comando puede leer ficheros externos binarios. Ahora comentamos s´ olo lo necesario para crear matrices a partir de ficheros externos. o de texto. en la primera l´ ruta completa hasta nuestro directorio matlabdir.

El comando >> load magico. Por ahora s´ olo necesitamos saber que si con nuestro editor creamos un fichero de texto que contenga las siguientes 5 filas: A = [.0 9.0 4.0 1.0 15.dat en el directorio matlabdir.0 10. 16.0 7.0 7.0 8. .0 11.0 6.0 13. con una fila por l´ ınea y con igual n´ umero de elementos en cada fila.0 8. Los ficheros M son parte fundamental de MATLAB y los analizaremos posteriormente.0 11.dat lee el fichero y asigna a la variable magico la matriz contenida en el fichero.0 ]. >> magico magico = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1 Creando un fichero M con el contenido de una o m´ as matrices.0 3.0 14.0 9.0 1.0 13..0 10. el fichero debe estar en el directorio matalbdir.0 4.0 Guardamos este fichero bajo el nombre de magico.0 12.Matrices y Vectores 23 por espacios en blanco.0 2. Por supuesto.m.0 6.0 5.0 5. entonces el comando magico en MATLAB lee el fichero y crea la variable A que contiene la matriz del fichero. con un editor de texto (textedit en picasso o notepad en MSWindows) podemos crear un fichero de texto que contenga estas cuatro l´ ıneas: 16.0 15.0 2.0 3.0 14. Por ejemplo.. y salvamos este fichero como magico.0 12.

Cap´ ıtulo 3

El Entorno de Trabajo de MATLAB

3.1.

El Espacio de Trabajo

El espacio de trabajo (workspace en ingl´ es) es el ´ area de memoria accesible desde la l´ ınea de comandos de MATLAB. Si estamos trabajando en modo gr´ afico hay dos formas de acceder a ´ el: abriendo la ventana correspondiente o mediante los comandos who y whos. Empezando por lo segundo, estos dos comandos muestran el contenido del espacio de trabajo en cada momento. El comando who proporciona una lista corta, mientras que whos da, adem´ as, el tama˜ no y alguna informaci´ on adicional sobre almacenamiento de las variables que se han utilizado. He aqu´ ı un ejemplo: >> who Your variables are: A a b >> whos Name Size A a b 3x4 1x7 1x100

Bytes 96 56 800

Class double array double array double array

Grand total is 119 elements using 952 bytes Para abrir la ventana correspondiente al espacio de trabajo procedemos de la siguiente manera: desplegamos el men´ u Desktop (versi´ on 7) o View (versiones anteriores a la 7), que est´ a en el 24

El Entorno de Trabajo de MATLAB

25

men´ u principal de MATLAB, y all´ ı seleccionamos workspace. Cualquier otra ventana de las disponibles en Desktop (View) se abre igual. Puede suceder que la ventana workspace, o cualquier otra que se desee abrir, ya est´ e abierta aunque no se vea. Ello es debido a que puede estar oculta por alguna otra ventana. Para saberlo hay que ir a Window en el men´ u principal y ver si est´ a all´ ı relacionada. Si no lo est´ a se abre como se ha mencionado m´ as arriba. Y si lo est´ ay no se ve es que est´ a abierta pero oculta. En este caso, basta pinchar en el nombre de la ventana que se quiere consultar (en nuestro caso workspace) para que pase a primer plano. Pegada a la ventana de comandos nos aparecer´ a la ventana del espacio de trabajo con la informaci´ on que proporciona el comando whos(ver la figura 3.1)

Figura 3.1: Ventana del Espacio de Trabajo. Esta informaci´ on puede ser interesante cuando se est´ an consumiendo grandes recursos para saber la cantidad de memoria que se utiliza o, sobre todo, cuando se quieren conocer los nombres de las variables que ya se han usado a fin de no sobreescribir alguna que pueda ser importante. Para cerrar la ventana del espacio de trabajo basta seleccionar, de nuevo, Workspace en el men´ u Desktop (o View para versiones anteriores a la 7) o pinchar en el s´ ımbolo . Para borrar todas las variables del espacio de trabajo se utiliza el comando clear.

3.1.1.

Comandos save y load

En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y poderlo recuperar m´ as tarde en el mismo punto en el que se dej´ o (con las mismas variables definidas, con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del programa todo el contenido de la memoria se borra autom´ aticamente. Tambi´ en en este caso tenemos dos formas de hacerlo: mediante los comandos save y load o eligiendo Save Workspace As ... (para salvar el trabajo) o Import Data (para recuperarlo) en el men´ u File. Esta segunda forma de hacerlo es muy intuitiva y no requiere comentarios. Los comandos save y load apenas los usaremos en estas pr´ acticas y se puede encontrar todo lo relativo a ellos usando helpwin →

El Entorno de Trabajo de MATLAB matlab/general

26

3.1.2.

El Comando diary

Los comandos save y load crean ficheros binarios o ASCII con el estado de la sesi´ on, pero no sirven para guardar todo lo que hemos ido tecleando y ha ido saliendo en la ventana de comandos. Existe una forma sencilla de almacenar todos estos datos en un fichero de texto. Esto se hace con el comando diary. El uso general es de la forma siguiente: >> diary filename.txt De esta forma se va escribiendo en el fichero filename.txt todo lo que aparece, l´ ınea tras l´ ınea, en la ventana de comandos de MATLAB con posterioridad a la utilizaci´ on del comando. Esto significa que si se quiere guardar todo lo que vaya apareciendo en la ventana de comandos desde el principio, se debe utilizar este comando en cuanto se empieza la sesi´ on. ¡Ojo! si se quieren salvar distintas sesiones se deben guardar en archivos con nombres diferentes. Salvo que se especifique el path completo en el que se quiere guardar el fichero, ´ este se salva (en Windows) en el subdirectorio work del directorio principal de MATLAB (es decir, en la subcarpeta work de la carpeta de instalaci´ on de MATLAB) y en un sistema UNIX en el directorio home de cada usuario. Si se quiere interrumpir el proceso basta escribir >> diary off y para reanudarlo de nuevo >> diary on El simple comando diary pasa de on a off y viceversa. Para poder acceder al fichero filename.txt con un editor de texto es necesario que diary est´ e en off porque si no MATLAB mantiene abierto el fichero y no es accesible desde el exterior. No obstante, en la ventana Command History que se puede abrir desde el men´ u Desktop se guardan las sesiones anteriores (hasta cierto punto) especificadas por el d´ ıa y la hora en que se comenzaron.

3.1.3.

L´ ıneas de comentarios

Para MATLAB el car´ acter tanto por ciento ( %) indica comienzo de comentario. Cuando aparece en una l´ ınea de comandos, el programa supone que todo lo que va desde ese car´ acter hasta el fin de la l´ ınea es un comentario y por lo tanto no lo lee. Raramente se usan en la ventana de comandos, pero son muy u ´tiles cuando se escriben programas (ficheros M) tal y como veremos m´ as adelante.

En cuanto se encuentra lo que se est´ a buscando se detiene la b´ usqueda y se utiliza el fichero que se ha encontrado. Estos pasos se realizan en el orden indicado. El comando path hace que se escriba el search path de MATLAB (el resultado depende de en qu´ e directorio est´ a instalado MATLAB): >> path MATLABPATH /home/Ion/matlab /home/Ion/matlab/prog /home/Ion/matlab/prog/clase/anal_matr /usr/local/share/matlab6/toolbox/matlab/general /usr/local/share/matlab6/toolbox/matlab/ops /usr/local/share/matlab6/toolbox/matlab/lang /usr/local/share/matlab6/toolbox/matlab/elmat /usr/local/share/matlab6/toolbox/matlab/elfun /usr/local/share/matlab6/toolbox/matlab/specfun /usr/local/share/matlab6/toolbox/matlab/matfun Para ver c´ omo MATLAB utiliza el search path sup´ ongase que se utiliza la palabra nombre1 en un comando. Comprueba si nombre1 es una funci´ on interna o intr´ ınseca de MATLAB.mex tienen un significado especial para MATLAB del que no hablaremos aqu´ ı). Comprueba si nombre1 es una funci´ on del usuario (hablaremos m´ as adelante de las funciones en MATLAB).El Entorno de Trabajo de MATLAB 27 3. los ficheros .m en los directorios incluidos en el search path de MATLAB. 5. Comprueba si hay un fichero llamado nombre1.m en el directorio actual (de los ficheros M hablaremos m´ as adelante.mex o nombre1. El Camino de b´ usqueda (SEARCH PATH) de MATLAB El search path de MATLAB es una lista de directorios que se puede ver y modificar a partir de la l´ ınea de comandos. Si no se encuentra en todo el proceso MATLAB produce un error: >> nombre1 ??? Undefined function or variable ’nombre1’.2. 3. Comprueba si hay ficheros llamados nombre1. 4.mex o nombre1. Comprueba si nombre1 es una variable previamente definida por el usuario. 2. . El proceso que sigue MATLAB para tratar de conocer qu´ e es nombre1 es el siguiente: 1.

2: Ventana con el path de MATLAB. pero es altamente recomendable que no lo hagas. En Windows puede hacerlo cualquiera. Tambi´ en se pueden quitar directorios con la opci´ on Remove (es mejor que ni lo intentes salvo que est´ es seguro/a de lo que haces). En sistemas multiusuario. Figura 3. Lo mejor es utilizar el comando helpwin y consultar en matlab/general lo relativo a los comandos path. cada usuario puede escribir un fichero para que cada vez que se empiece una sesi´ on de MATLAB.m que se encuentra en el subdirectorio toolbox/local de la instalaci´ on de MATLAB (en sistemas UNIX). El fichero responsable de los par´ ametros con los que se inicia cada sesi´ on de MATLAB es matlabrc.m y debe estar. Tal y como hemos mencionado. Ahora bien. Por ejemplo. como picasso.m que contenga las siguientes l´ ıneas: . en sistemas UNIX. s´ olo puede modificarlo el administrador. Las operaciones realizadas se pueden salvar utilizando Save. un fichero startup. Se puede especificar. Seleccionando Add Folder se pueden a˜ nadir nuevos directorios. Una vez seleccionado se abre otra nueva ventana en la que se muestra la lista de directorios en la que MATLAB buscar´ a (MATLAB search path) (ver Figura 3. addpath y rmpath. Este no es el caso en sistemas UNIX porque la posibilidad de escribir de forma permanente en el directorio donde est´ a instalado MATLAB es exclusiva del administrador del sistema. adem´ as que se incorporen al “search path” todos los subdirectorios del directorio seleccionado. se utilizar´ a la que primero se encuentre. Tambi´ en se puede incluir un directorio de b´ usqueda desde la l´ ınea de comandos de MATLAB. Para abrir el Path Browser se elige Set Path en el men´ u File. Para a˜ nadir permanentemente unos directorios al “search path” en UNIX hay que hacerlo a trav´ es del fichero startup. El nuevo directorio se puede a˜ nadir al comienzo o final de la lista. En MATLAB bajo Windows el listado de directorios salvado se hace permanente. Bajo Windows este fichero se debe colocar en la subcarpeta work de la carpeta donde est´ a instalado MATLAB (posiblemente C:\matlabr14 o algo as´ ı). tanto del sistema como de usuario. en el subdirectorio home/izaballa/matlab del correspondiente ususario.El Entorno de Trabajo de MATLAB 28 El Path Browser es el programa que ayuda a definir la lista de directorios donde MATLAB debe buscar los ficheros de comandos y las funciones. ´ este se inicie con los par´ ametros que cada cual desee.m del que hablaremos enseguida. La forma de hacerlo depende del sistema operativo sobre el que est´ e instalado MATLAB. Este fichero se debe llamar startup.2. el orden de la lista es muy importante porque refleja el orden de la b´ usqueda: si una funci´ on est´ a en dos directorios. de forma que la pr´ oxima vez que se empieza una sesi´ on de MATLAB las carpetas a˜ nadidas aparecer´ an en el path browser.

suprime algunos saltos de l´ ınea y presenta las salidas m´ as compactas). delete y cd implementan un conjunto de comandos del sistema operativo que corre por debajo de MATLAB.m. type. A˜ nadir´ a el directorio /usr/alu/julen/matlab al final del search path. Utilizar´ a el formato compact para exponer las salidas producidas por MATLAB (este formato. Este fichero se puede utilizar por ejemplo para guardar el espacio de trabajo de MATLAB (recuerda el comando save). 3. Bajo Windows el fichero que producir´ ıa algo parecido ser´ ıa cd c:\matlabr14\programas format compact addpath ’c:\matlabr14\programas’ -end edit disp(’Kaixo’) De forma an´ aloga. donde posiblemente se encuentren los trabajos de MATLAB de Julen.3. Los nombres con los que se corresponden en los sistemas operativos MS-DOS-Windows y Unix se muestran en la siguiente tabla MATLAB dir type delete cd pwd Windows dir type del o erase cd UNIX ls cat rm cd pwd . Manipulaci´ on de ficheros Los comandos dir.El Entorno de Trabajo de MATLAB cd \$HOME/matlab format compact addpath ’/usr/alu/julen/matlab/practicas’ -end !texedit disp(’Kaixo’) 29 har´ a lo siguiente cuando el usuario correspondiente (en este caso posiblemente Julen) empiece una sesi´ on de MATLAB en picasso: Cambiar´ a al directorio matlab. Abrir´ ıa el editor de openxt y Escibir´ a Kaixo como primera l´ ınea en la ventana de comandos de MATLAB. como ya se dijo en el Cap´ ıtulo 2. al abandonar la ejecuci´ on de MATLAB con el comando quit se ejecuta autom´ aticamente el fichero finish. siempre que se encuentre en alguno de los directorios del search path.

m & es una orden para abrir el editor de ficheros Text Editor que trae por defecto el sistema Open windows de Solaris y cargar en ´ el el fichero parabola.1.. El s´ ımbolo & le pide al sistema operativo que lo ejecute en background. indica que el resto de la l´ ınea es un comando del sistema operativo. . en UNIX de Solaris (que es el sistema operativo de picasso) >> !textedit parabola. 3.. que deje la ventana de comandos de MATLAB libre para seguir tecleando nuevas ´ ordenes. pathnames y nombres de los discos o directorios en la forma habitual. un cambio al directorio matlab que se encuentra en el disco C (en caso de que tal directorio exista.. bajo MS-DOS o Windows. Esto puede ser u ´til porque permite ejecutar programas o invocar utilidades del sistema operativo sin salir de MATLAB aunque rara vez se utiliza cuando el sistema operativo es Windows. Por lo tanto. etc. As´ ı los comandos >> cd c:\matlab >> delete *.3. es decir.dos producir´ ıan. sino que todos los directorios “cuelgan” del directorio ra´ ız: /. Ejecuci´ on de Programas Externos El cierre de exclamaci´ on. En un sistema UNIX los discos habitualmente no se designan con las letras a.m. Por ejemplo. Y a continuaci´ on se borrar´ ıan todos los ficheros cuya extensi´ on es dos en dicho directorio. si no. !. produce un mensaje de error). para cambiar al directiorio /usr/alu/Julen/matlab deberemos utilizar el comando: cd /usr/alu/Julen/matlab Desde la ventana de comandos de MATLAB siempre se puede utilizar el comando pwd (como en UNIX) para conocer en qu´ e directorio nos encontramos trabajando. c.El Entorno de Trabajo de MATLAB 30 Como en todos los sistemas operativos se pueden utilizar los caracteres comod´ ın.

para dibujar la curva x = t2 tenemos que dar tres pasos: definir el vector t. As´ ı pues. En este caso tan simple. Nosotros s´ olo lo usaremos de la forma m´ as sencilla.x) dibuja el vector t versus el vector x.] entonces plot(t. x3 ). 2]. x2 ). Empezando a programar en MATLAB Lo interesante de MATLAB no es que realiza operaciones individuales sobre matrices y vectores. Este comando admite muchos argumentos incluyendo la posibilidad de dibujar varias curvas al mismo tiempo.x) dibuja una poligonal que une los puntos (t1 . . y ordenar a MATLAB que dibuje. . Por ahora la u ´nica informaci´ on pertinente es que plot(t. t3 . definir el vector x = t2 . etc. sino que es un verdadero lenguaje de programaci´ on con cantidad de funciones primitivas que facilitan mucho la tarea de programar.] y x = [x1 x2 x3 .e. Esto quiere decir que si el vector t es t = [t1 t2 t3 . (t2 . teclear plot(t. pero si quieres saber todo lo que puede hacer. i.Cap´ ıtulo 4 Programaci´ on en MATLAB 4. puedes usar el comando helpwin → graph2d → plot. se pueden dar las tres ´ ordenes en la misma l´ ınea de comando (recuerda las dificultades que hay para usar ˆ en picasso y que este operador se puede sustituir por power): 31 . . Si estos puntos est´ an suficientemente pr´ oximos el efecto visual es una curva. El comando para dibujar curvas en el plano es plot. .x). Un ejemplo muy simple es el siguiente: supongamos que queremos dibujar la par´ abola x = t2 en el intervalo [−2.1. x1 ).

un Figura 4.1:2.2).^2. x=t.2). . cada componente del vector est´ a muy pr´ oxima a la siguiente. se salvar´ ıa con el nombre que se desee. Para ejecutar las ´ ordenes contenidas en este fichero basta escribir su nombre en la ventana de comandos. Ya se ha dicho m´ as arriba c´ omo hacerlo tanto en picasso (mediante !texedit) como en Windows (con edit) (ver Figura4. Si estos puntos no est´ an muy alejados entre s´ ı. Una vez escrito.x) 32 Recuerda tambi´ en que linspace(a. >> x=t. .b) forma un vector de 100 componentes igualmente espaciadas entre a y b.1: Ventanas de comando y de edici´ on para escribir programas de MATLAB programa (en este caso peque˜ no) con c´ odigo ejecutable por MATLAB. como la de la figura 4.m (la extensi´ on . an ) es un vector de n componentes plot(a) dibuja una poligonal uniendo los . Otra posibilidad es escribir cada orden en una l´ ınea: >> t=linspace(-2. mediante un editor. en este caso parabola: >> parabola El resultado es una nueva ventana. >> plot(t.Programaci´ on en MATLAB >> t=-2:0. por ejemplo parabola. plot(t.2.x) Y hay una tercera posibilidad que es la m´ as interesante: escribir el conjunto de ´ ordenes en un fichero. que contiene la gr´ afica de la par´ abola.^2.x=t.1 Esto es lo que se llama un “script”.^2.m es obligatoria. . plot(t.x) o preferiblemente >> t=linspace(-2. La traducci´ on de “script” en castellano es algo as´ ı como gui´ on pero seguiremos utilizando el original en ingl´ es. . Si a = (a1 . es la forma en que MATLAB sabe que es un fichero con c´ odigo ejecutable).

1 -1 0] A = -1 2 0 0 -1 -3 1 -1 0 . end. .Programaci´ on en MATLAB 33 Figura 4. a1 ). >> A=[-1 2 0. Si lo que se quiere es se˜ nalar con el s´ ımbolo ∗ los puntos (x1 . a2 ). . siendo eps el epsilon de la m´ aquina (=2. . . y eso hace que tengan un significado especial. (x2 . . .1. La idea es que cierta acci´ on se realice dependiendo de si una condici´ on es verdadera o no. (2.m puntos (1. El elemento (i. . end. Por ejemplo. y2 ). . o bifurcaciones de la forma while . 4. (xn . La verdad o falsedad de estas condiciones se suele evaluar comparando dos expresiones. yn ) pero sin unirlos a trav´ es de una poligonal basta crear los vectores x e y y usar el comando plot(x. case Su sintaxis es como en cualquier otro lenguaje de programaci´ on. y1 ). . Para ello existen operadores relacionales y l´ ogicos. Operadores relacionales y l´ ogicos Para programar en MATLAB se pueden usar bucles de la forma for . if. dada una matriz A la comparaci´ on abs(A)<eps genera una matriz de 0’s y 1’s con el mismo tama˜ no de A. end y switch . .204e-16)..2: Ventana gr´ afica con la par´ abola producida por el script parabola. j ) de dicha matriz es 1 si |Aij | < eps. . 0 -1 -3. . MATLAB dispone de los siguiente operadores relacionales: < > <= >= == ~= menor que mayor que menor o igual que mayor o igual que igual que distinto que En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices.y. . .’*’).1. .

any responde true si alg´ un elemento no es cero y false si todos son cero. m´ as peque˜ no que eps. Por ejemplo: . En caso contrario es falsa. Rec´ ıprocamente. Con la matriz A de m´ as arriba: >> all(A) ans = 0 1 0 En efecto. Pero como ninguna columna de A tiene todos sus elementos menores que eps: >> all(abs(A)<eps) ans = 0 0 0 Vemos en estos ejemplos que al igual que en otros lenguajes de programaci´ on. cualquier valor distinto de cero es considerado como true y el cero equivale a false.Programaci´ on en MATLAB >> B=(abs(A)<eps) B = 0 0 1 1 0 0 0 0 1 34 La sentencia any(abs(A)<eps) genera un vector de 0’s y 1’s. y el resultado es otra matriz de unos y ceros del mismo tama˜ no. Es decir. la sentencia any(any(abs(A)<eps)) se puede utilizar como una condici´ on. >> any(any(B)) ans = 1 As´ ı pues. responde false. la u ´nica columna de A con todos sus elementos distintos de cero es la segunda. Hay un operador l´ ogico similar: all. mientras que si no se cumple es 0 (false). 0 si la correspondiente columna es cero y 1 en caso contrario. si una comparaci´ on se cumple el resultado es 1 (true). Ser´ a verdadera si y s´ olo si alg´ un elemento de A es. >> any(B) ans = 1 0 1 Y la sentencia any(any(abs(A)<eps)) produce un 0 (i. la comparaci´ on se realiza elemento a elemento. Cuando los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tama˜ no. en m´ odulo. Responde true si todos los elementos del vector son distintos de cero. que recoge el resultado de cada comparaci´ on entre elementos. en caso contrario. false) si todos los elementos de any(B) son cero y 1 (true) en caso contrario.e.

B) ans = 0 35 La expresi´ on isequal(A. Por otra parte. isequal es una de las muchas funciones l´ ogicas que empiezan por is. He aqu´ ı una selecci´ on de ellas. B=[4 2. >> A==B ans = 0 1 0 0 >> A~=B ans = 1 0 1 1 >> A>2 ans = 0 0 0 1 Para saber si dos matrices son iguales.B) >> isequal(A. Para obtener un listado completo escribe doc is tras el prompt de MATLAB ischar isempty isequal isfinite isfloat isinf isinteger isnan isnumeric isprime is real isvector verdadero si la entrada es un vector de caracteres verdadero si la entrada es un vector vac´ ıo verdadero si los vectores son iguales detecta los elementos finitos de un vector verdadero si el vector es de elementos en coma flotante detecta los elementos infinitos de un vector verdadero si el vector es de n´ umeros enteros detecta los elementos que son NaN en un vector veradero si el vector es de n´ umeros (no de caracteres) detecta los n´ umeros primos en un vector verdadero si todos los n´ umeros del vector son reales verdadero si se trata de un vector Algunos ejemplos adicionales con la matriz A de m´ as arriba >> A A = 1 2 0 3 >> isfinite(A) .0 3].Programaci´ on en MATLAB >> A=[1 2. se puede usar la expresi´ on isequal(A.B) es equivalente a all(all(A==B)).1 5].

Estas normalmente est´ an concatenadas con expresiones l´ ogicas cuya verdad o falsedad sigue las leyes de la l´ ogica formal. y>0 ans = 0 1 1 ans = 1 1 0 >> x>0 & y>0 ans = 0 1 0 >> x>0 | y>0 ans = 1 1 1 >> xor(x>0.Programaci´ on en MATLAB ans = 1 1 1 1 >> isnumeric(A) ans = 1 >> isreal(A) ans = 1 >> isvector(A) ans = 0 36 ´ Adem´ as una condici´ on puede constar de una o m´ as operaciones relacionales. y=[ 1 2 -3]. >> x>0.y>0) ans = 1 0 1 >> any(x>0) ans = 1 >> all(x>0) y o negaci´ on l´ ogica o excluyente verdad si cualquiera de los elementos de un vector es no cero verdad si todos lo elemntos de un vector son no cero . Los operadores l´ ogicos de MATLAB son los siguientes: & | ~ xor any all Algunos ejemplos >> x=[-1 1 1].

12 4 3].poniendo las columnas de A una debajo de otra. Este comando devuelve los ´ ındices (los lugares que ocupan) los elementos no nulos de un vector. B=[12 3 1. Por ejemplo >> x=[-3 1 0 -inf 0] x = -3 1 0 -Inf >> f=find(x) f = 1 2 4 0 Una primera aplicaci´ on es extraer de x los elementos no nulos: >> x(f) ans = -3 1 -Inf Podemos extraer los elementos finitos > x(find(isfinite(x))) ans = -3 1 0 0 o reemplazar las componentes negativas por cero: >> x(find(x<0))=0 x = 0 1 0 0 0 Cuando find se aplica a una matriz se hace mir´ andola como un vector. es decir al vector A(:) que se obtiene -recordemos.Programaci´ on en MATLAB ans = 0 >> 37 Para terminar con los operadores l´ ogicos estudiamos otro comando muy u ´til: find. Por ejemplo >> A=[ 4 2 16. 10 -1 7] A = 4 2 16 12 4 3 B = 12 3 1 10 -1 7 >> C=A<B .

j]=find(A<B) i = 1 1 2 j = 1 2 3 nos dice que en las posiciones (1.j]=find(A) que devuelve vectores i y j con los ´ ındices de las filas y columnas de A distintos de cero. .1. La forma m´ as simple de una bifurcaci´ on del tipo if. . .Programaci´ on en MATLAB C = 1 1 0 0 >> C(:) ans = 1 0 1 0 0 1 >> find(A<B) ans = 1 3 6 0 1 38 Otro posible uso de find con matrices es [i. . end y switch . . Tambi´ en se dispone de bucles for . 3) est´ an los elementos de A que son menores que los de B . if. (1. respectivamente. end es la siguiente if condicion sentencias end .2. 4. case. Este u ´ltimo tipo de bifurcaciones no lo vamos a comentar. 2) y (2. As´ ı >> [i. Bifurcaciones y Bucles Tal y como hemos dicho m´ as arriba las bifurcaciones de MATLAB son while . end. . . . . . 1). end. se puede consultar la ayuda de MATLAB para saber como funciona.

3 bloque4 end donde la opci´ on por defecto else puede ser omitida: si no est´ a presente no se hace nada en caso de que no se cumpla ninguna de las condiciones que se han chequeado. siendo positivo. Exponemos un ejemplo a continuaci´ on. si no lo es produce un mensaje de error con el comando disp que sirve para escribir mensajes en la pantalla (m´ as adelante se explica con detalle la acci´ on de este comando). es par . Si el n´ umero es positivo lo divide por 2 y en caso contrario. La orden rem(p. Recordemos que los operadores l´ ogicos se pueden combinar con los relacionales para poder comprobar el cumplimiento de condiciones m´ ultiples. Ejemplo 4. y que tiene la forma: if condicion1 bloque1 elseif condicion2 bloque2 elseif condicion3 bloque3 else % opci´ on por defecto para cuando no se cumplan las condiciones 1.2)==0 a=n/2.2. Se ha escrito de la forma expuesta para hacer uso de una condici´ on con dos relaciones y un operador l´ ogico..Programaci´ on en MATLAB 39 Existe tambi´ en la bifurcaci´ on m´ ultiple. en la que pueden concatenarse tantas condiciones como se desee.1 .1.q) calcula el resto de la divisi´ on eucl´ ıdea de p por q . Su sintaxis es la siguiente: while condicion sentencias end . if n<0 | n==0 disp(’Introduce un n´ umero positivo’). SENTENCIA WHILE. else a=(n+1)/2 end Naturalmente la condici´ on n<0 | n==0 podr´ ıa sustituirse por la m´ as compacta n<=0. elseif rem(n. A continuaci´ on comprueba si. le suma 1 y el resultado lo divide por 2.El siguiente programa comprueba si un n´ umero es positivo.La estructura del bucle while es muy similar a la de cualquier otro lenguaje de programaci´ on..

problema de Kakutani. .5236 0..2 . ¿Crees que este proceso tiene fin cualquiera que sea el valor de n? (Conjetura de Collatz. end >> n n = 3.0472 0.5000 0. los bucles del tipo for .8660 . Concretamente. cero). sin(x)]) end 0.En el siguiente ejemplo se ejecutan una serie de operaciones sobre un cierto n´ umero n mientras ´ este se mantenga mayor que 1. es decir.2)==0 n=n/2 else n=3*n+1 end. . El bucle se termina cuando todos los elementos de condicion son false (es decir.7854 0. si n es par se divide por 2 y si es impar se multiplica por 3 y se le suma 1: while n>1 if rem(n.7071 1. Por ejemplo. mientras haya alg´ un o algunos elementos true. end tienen la siguiente sintaxis: for variable= expresi´ on sentencias end Habitualmente la expresi´ on es un vector de la forma i:s:j y las sentencias se ejecutan sucesivamente con la variable igual a cada elemento de la expresi´ on. Finalmente.8160 Otra forma de definir una expresi´ on es usando notaci´ on vectorial: >> for x=[pi/6 pi/4 pi/3] disp([x. >> for i=1:25 n=n+1/i.1. Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en condicion. algoritmo de Hasse o problema de Ulam).Programaci´ on en MATLAB 40 donde condici´ on puede ser una expresi´ on vectorial o matricial. Ejemplo 4. para sumar los 25 1 : primeros t´ erminos de la serie n >> n=0. misterio de Siracusa. end.

6667 0. por ejemplo.0000 0.6000 0.0000 0. y lo ejecutamos en la ventana de comandos: . seno2pit.Programaci´ on en MATLAB 41 Y por supuesto.m en nuestro directorio de trabajo de MATLAB.8000 1. end end >> A A = 1. Presentaci´ on de los resultados Si en MATLAB hacemos >> v=1:5 la respuesta es la exposici´ on del resultado v = 1 2 3 4 5 A veces. El siguiente i c´ odigo proporciona una matriz sim´ etrica 5 × 5 con el elemento j en la posici´ on (i.6667 1. A(j.7500 1.4000 0.5000 1. disp(’ t sen(2*pi*t) ’) disp(’--------------------------’) disp([t’ y’]) Lo salvamos con el nombre.i)=i/j.0000 0. end unos dentro de otros.1].6000 0. j ) para i ≥ j : >> n=5. Por ejemplo se quiere mostrar una tabla de los valores de sen(2πt) para 10 valores de t igualmente espaciados en el intervalo [0.3. A=eye(n).1.Con el comando disp lo podemos hacer f´ acilmente.10).5000 0. Escribimos un fichero con el siguiente contenido t=linspace(0.2000 0.8000 0.0000 0. >> for j=2:n for i=1:j-1 A(i. y=sin(2*pi*t).7500 0.2500 0.2500 0. se pueden encajar m´ ultiples bucles for.j)=i/j. . sin embargo se quiere disponer de un formato de salida un poco m´ as estructurado.4000 0.1.0000 4.3333 0. .5000 0.3333 0.5000 0.2000 0.

subrutinas o procedimientos de otros lenguajes de programaci´ on como FORTRAN. Por eso en el programa de m´ as arriba escribimos disp(’ t sen(2*pi*t) ’) para que en la pantalla aparezca exactamente la “frase” t sen(2*pi*t) . Si se quieren conseguir formatos m´ as especiales se puede usar el comando sprintf.0000 -0.7778 -0.8660 0. funciones. Pascal o Java.4444 0. una frase entre acentos es un vector de caracteres. Su uso en MATLAB es muy parecido al del comando hom´ onimo en lenguaje C.Programaci´ on en MATLAB >> seno2pit t sen(2*pi*t) -------------------------0 0 0. C. Los ficheros M son especialmente apropiados para .3420 0. Scripts y Funciones El nombre que se utiliza para los programas en MATLAB es el de M-files o ficheros M.3333 0. por lo tanto. 4. secuencias de comandos de MATLAB que se almacenan en ficheros y que tienen alg´ un prop´ osito concreto.8889 -0.6428 0.3420 0.2. Lo que sucede es que hay vectores de n´ umeros como >> v=[1 2 3] v = 1 2 3 y hay vectores de letras o caracteres o “strings” como >> v=’ke kosa’ v = ke kosa As´ ı.6667 -0.8660 0.1111 0. Los ficheros M son. Un fichero M puede hacer referencia a otros ficheros M e incluso a s´ ı mismos (es decir.9848 0. Hay dos tipos de ficheros M: los scripts y las funciones.0000 42 El comando disp lo que hace es mostrar en pantalla el contenido de un vector (o matriz).9848 0.6428 1. est´ a permitida la autorecursividad). Son el equivalente a programas.5556 -0.2222 0.

intercambiar con alg´ un amigo o colega ficheros de mutuo inter´ es. desde puramente computacionales a did´ acticos o por puro placer. Las variables internas son locales a la funci´ on (salvo que sean declaradas como global) Ya hemos visto en la secci´ on anterior c´ omo hacer ficheros M de tipo “script”. simplemente. recogen variables ya existentes e interact´ uan con ellas para producir resultados num´ ericos o gr´ aficos y quiz´ a nuevas variables. van Loan. Lo que exponemos a continuaci´ on est´ a inspirado en el primer cap´ ıtulo del libro Introduction to Scientific Computation de Charles F. Volveremos sobre ellos m´ as adelante para recalcar su diferencia con el otro tipo de ficheros M. guardar el resultado de un experimento num´ erico. cerca de x = 0. construir programas que pueden ser utilizados con posterioridad varias veces. Deben contener una primera l´ ınea en la que aparece la palabra function.n) % %Precondiciones: acepta dos valores x=n´ umero real y . Nuestro objetivo es estudiar esta aproximaci´ on. En la p´ agina web de Mathworks mencionada en la Introducci´ on pueden encontrarse numerosos ficheros M escritos con distintos prop´ ositos.Programaci´ on en MATLAB 43 experimentar con algoritmos escribi´ endoles en un fichero sobre el que poder hacer correcciones en vez de reescribir cada vez que se quiere experimentar una larga lista de comandos. ¿cu´ an cerca est´ a Tn (x) de ex para los diversos valores de n? Te´ oricamente cuanto mayor es n m´ as cerca est´ a Tn (x) de ex . Las funciones en MATLAB guardan una gran similitud con las funciones en lenguaje C o Pascal. Es decir. como una lista de comandos y variables que producen un determinado resultado num´ erico o gr´ afico. ¿Para qu´ e valores de n nuestro ordenador no distingue entre Tn (x) y ex ?. Hay dos tipos de ficheros M: Sripts o ficheros de comandos. ex . Esta funci´ on ser´ ıa la siguiente: function y= miexp1(x. Funciones. y que son los m´ as importantes: las funciones. Simplemente son ficheros que ejecutan sucesivamente varios comandos de MATLAB con un objetivo espec´ ıfico y siempre que se ejecutan producen el mismo resultado. Sabemos de c´ alculo elemental que la serie de Taylor n Tn (x) = k=0 xk k! aproxima la funci´ on exponencial. Para ello damos por bueno el c´ alculo que hace MATLAB de la exponencial y creamos una funci´ on de MATLAB que nos devuelva el valor de Tn (x) en funci´ on de x y n. Es decir. Por lo general no tienen argumentos de entrada ni de salida y operan con las variables del espacio de trabajo. Se diferencian de los scripts en que aceptan entradas y devuelven salidas. o.

por ejemplo.1. x=miexp1(0. % %Postcondiciones: devuelve en y la aproximacion de % orden n de la serie de Taylor de exp(x).). la funci´ on miexp1 debe ser llamada con dos n´ umeros concretos. Al escribir una funci´ on en MATLAB debes seguir unas pocas. . simples e importantes reglas: El fichero debe empezar con la palabra function y tiene la siguiente estructura function variables de salida= Nombre de la funci´ on(variables de entrada) % % Comentarios que definen completamente las variables que deben pasarse a la funci´ on % (variables de entrada) y el resultado que produce la funci´ on (variables de salida) % cuerpo de la funci´ on: comanos de MATLAB En alg´ un sitio del cuerpo de la funci´ on se debe pasar a la variable de salida el valor deseado.1. Debe observarse que ahora el nombre del fichero s´ olo puede ser el que hemos dado a la funci´ on. Por ejemplo.3) devolver´ a en la variable x el valor de la aproximaci´ on de Taylor de tercer orden en 0. vectores. Cuando se llama a la funci´ on para que realice la acci´ on que se desea. Como las distribuciones de MATLAB incorporan infinidad de funciones debemos elegir nombres significativos para nosotros pero no demasiado standard. y=1.m en un directorio (o carpeta) que est´ e en el path de MATLAB. Las variables de entrada y salida son par´ ametros formales (es decir. etc. end 44 Al igual que con los “scripts” debemos escribir estas l´ ıneas en un fichero de texto y salvarlo con el nombre miexp1. se pueden escribir comentarios en otros lugares del cuerpo de la funci´ on para clarificar el objetivo de uno o varios de los comandos que se utilizan. Opcionalmente. en nuestro directorio de trabajo. y es recomendable hacerlo. n´ umeros. y=y+t. Esto es importante porque cuando en la ventana de comandos se escriba help nombredelafuncion. con que el nombre de la funci´ on no coincida con un nombre ya existente en el path de MATLAB.. por ejemplo.Programaci´ on en MATLAB % n=entero positivo. MATLAB responder´ a escribiendo los comentarios que ah´ ı se escriban.. . letras). matrices.. Los comentarios que definen completamente la funci´ on deben hacerse inmediatamente despu´ es de la definici´ on de la funci´ on. adem´ as. t=1. o escoger un nombre en euskera. deben ser sustitu´ ıdos por par´ ametros reales (es decir. for k=1:n t=x*t/k. Debemos tener cuidado. Estos comentarios deben ir siempre precedidos del s´ ımbolo %. . podemos empezar los nombres de nuestras funciones con el prefijo mi.

/exacto. Conviene que modifiquemos nuestra funci´ on para que admita vectores y produzca vectores.1. cada una correspondiente a un valor de n. x=linspace(-1. bien sea un “script” u otra funci´ on. for n=[4 8 16 20] for i=1:m y(i)=miexp1(x(i). podemos crear un “script” como el que sigue m=100. exacto=exp(x). con el error relativo de la aproximaci´ on. Adem´ as hay que usar el producto componente a componente entre x y t. . 8.p).errorrel) title(sprintf(’n=%2.2. end errorrel=abs(exacto-y). 1). Por ejemplo. y=[].m (por ejemplo.n). La modificaci´ on es muy sencilla: hay que redefinir y y t para que sean vectores del mismo tama˜ no que x y cuyas componentes sean todas igual a 1. As´ ı p=1 corresponde a la figura en al posici´ on (1. Crea una “matriz” de n × m figuras y asigna a la p-´ esima el siguiente comando plot.m. 16.1].m) tenemos un “script” que al ejecutarlo en MATLAB >> smiexp1 nos produce cuatro gr´ aficas (figura 4.3). k=k+1. Ello es debido a que la funci´ on miexp1 s´ olo acepta escalares y devuelve escalares.0f’. Puede haber otras con el mismo nombre en el espacio de trabajo de MATLAB sin ning´ un problema. sean nativas o creadas por nosotros mismos.Programaci´ on en MATLAB 45 Las variables que se definan en el interior de la funci´ on (en nuestro caso t y k) son variables locales. y como veremos enseguida lo hace m´ as r´ apido. si queremos las gr´ aficas para cuatro valores de n = 4. smiexp1.k) plot(x. Lo importante de las funciones de MATLAB. etc. MATLAB est´ a pensado para trabajar con vectores. 2). es que pueden ser llamadas por cualquier otro programa de MATLAB. p=2 a la figura en la posici´ on (1. k=0.100) de 100 componentes y se lo hemos pasado a la funci´ on exponencial obteniendo otro vector de 100 componentes que hemos llamado exacto.n)) end Si escribimos estas l´ ıneas en un fichero .m). Obs´ ervese el efecto del comando subplot(n. En el “script” hemos creado el vector x=linspace(-1. Sin embargo. subplot(2. El fichero que contiene la funci´ on debe estar en el path de MATLAB. para calcular Tn (x) hemos tenido que hacerlo componente a componente.1. 20 del error x relativo que se comete al aproximar e por Tn (x) en el intervalo [-1. Todos los dem´ as comandos en el “script” ya son conocidos.

n)).5 0 0. for k=1:n t=x.5 1 0 −1 −0. As´ ı pues las variables de entrada y de salida pueden ser cualquier tipo de variable soportada por MATLAB.1.*t/k.5 0 0. exacto=exp(x).5 0 0.n) % %Precondiciones: acepta dos valores x=vector de n´ umeros reales y % n=entero positivo.3: Error relativo al aproximar por Tn (x) function y= miexp2(x. No s´ olo eso. Tambi´ en las variables de salida pueden ser varias .01 3 0. y=ones(size(x)). Por ejemplo las variables de entrada de la funci´ on miexp2 son un vector y un n´ umero.02 7 6 0.5 1 0 −1 −0. t=ones(size(x)).Programaci´ on en MATLAB n= 4 0.5 1 −6 46 n= 8 x 10 8 x 10 −15 n=16 7 6 x 10 −16 n=20 6 5 4 4 3 2 2 1 0 −1 −0.5 0 0.015 5 4 0. pueden aparecer mezcladas.005 2 1 0 −1 −0.100). % %Postcondiciones: devuelve en el vector y la aproximacion de % orden n de la serie de Taylor de exp(x).5 1 Figura 4./exacto El resto del “script” ser´ ıa igual que en el caso anterior. errorrel=abs(exacto-miexp2(x. end Esto simplifica mucho el correspondiente “script” para hallar el error relativo: x=linspace(-1. y=y+t.

se trata de funciones del propio sistema. Utilizamos aqu´ ı dos nuevos comandos (en realidad como todos los comandos de MATLAB. A %ponemos en marcha el reloj t0=clock. ti=clock. function [t. Podemos hacer uso de estas dos funciones para comprobar que MATLAB emplea menos tiempo cuando trabaja con vectores como un todo que cuando trabaja componente a componente.t0). la primera es un n´ umero y la segunda una matriz. end tf=clock. % etime cuenta el tiempo transcurrido t=etime(t1.t. end A=rand(n). que tarda MATLAB en generar % m matrices aleatorias nxn y la ´ ultima matriz generada. for j=1:m-1 rand(n).1]: disp(’length(x) miexp1(x) miexp2(x)’) disp(’ tiempo tiempo ’) disp(’------------------------------------------------’) for k=1000:1000:10000 x=linspace(-1. y=[]. . for i=1:k y(i)=miexp1(x(i).ti). t1=etime(tf. bien sean precompiladas o definidas a partir de ficheros M): clock asigna a la variable correspondiente la hora del sistema y etime cuenta el tiempo (en segundos) que ha pasado entre dos instantes obtenidos con clock. ti=clock. El siguiente script nos sirve para comprobar el tiempo que tarda MATLAB en calcular el valor de Tn (x) para un determinado valor de n y para vectores x de distinto tama˜ no con componentes en el intervalo [-1.k). sino poner en la memoria del ordenador) m matrices aleatorias de tama˜ no n × n y nos proporciona la u ´ltima matriz creada. %Paramos el reloj t1=clock. Es un ejemplo un poco artificial pero sirve para ilustrar las ideas que estamos comentando: la salida es un vector formado por dos variables. % Postcond: el tiempo.17).A]=tgmaf(n.Programaci´ on en MATLAB 47 y de distintos tipos.m) % Precond: dos enteros positivos n y m. la siguiente funci´ on calcula el tiempo que tarda MATLAB en crear (no escribir en pantalla. Por ejemplo.1.

ti=clock.71 0.0016 6000 0. memoria.17).25 0. Se podr´ ıa querer tener tablas comparativas para diversos valores de n y de la longitud de x.0033 Una u ´ltima observaci´ on..0020 7000 0. La salida debe parecerse a una tabla con la siguiente forma length(x) miexp1(x) miexp2(x) tiempo tiempo -----------------------------------------------1000 0. t2=etime(tf.0025 9000 0.61 0.k . . tf=clock. .t2)) end 48 El resultado de este “script” depende de cada ordenador porque la rapidez con la que MATLAB realiza las operaciones no s´ olo depende del c´ odigo que se emplee sino.0013 5000 0. disp(sprintf(’%6.n) % Precond: un vector de enteros k y un entero n % % Postcond: fetmiexp produce una tabla % que compara el tiempo que se tarda en % calcular la aproximaci´ on de exp(x) mediante % la aproximaci´ on de orden n de la serie de Taylor % para un vector x de k componentes.81 0.11 0. Para conseguirlo bastar´ ıa convertir el “script” anterior en una funci´ on: function fetmiexp(k.0023 8000 0.j).0007 3000 0. bus.0010 4000 0.93 0.43 0.35 0.t1 .20 0. .52 0.2f %16.4f ’.ti). Cada fila de % la tabla corresponde a cada componente de k. % disp(’length(x) miexp1(x) miexp2(x)’) disp(’ tiempo tiempo ’) disp(’------------------------------------------------’) for j=k x=linspace(-1. de las caracter´ ısticas del propio ordenador (procesador.0006 2000 0. ). sobre todo.0029 10000 0.1.Programaci´ on en MATLAB y=miexp2(x.0f %16.

Esta funci´ on produce un resultado: una tabla con la comparativa de tiempos pero no almacena esta salida en ninguna variable.j .t2)) end 49 Si en MATLAB hacemos >> fetmiexp(1000:1000:10000.17). y=miexp2(x.Programaci´ on en MATLAB y=[].t1 .2f %16. que una funci´ on tenga variables de salida pero no de entrada. tambi´ en es posible pero muy poco frecuente. t1=etime(tf. end tf=clock. disp(sprintf(’%6.ti). El rec´ ıproco. Debe notarse que no hay variable de salida.17).ti).4f ’. t2=etime(tf. ti=clock. tf=clock. .0f %16.17) obtenemos la misma tabla de m´ as arriba. La ventaja es que ahora podemos probar con diversos valores de k y n sin tener que modificar el “script” cada vez. for i=1:j y(i)=miexp1(x(i).

0000 + 1. 3+i i] A = 1.1. N´ umeros Complejos El comando abs(a) devuelve el valor absoluto o el m´ odulo del n´ umero a seg´ un que ´ este sea real o complejo. como ya se dijo en el Cap´ ıtulo 2. Si queremos la transpuesta de A debemos usar A. De la misma forma abs(A) devuelve una matriz cuyos elementos son los m´ odulos o los valores absolutos de los elementos de A seg´ un que ´ estos sean n´ umeros complejos o reales. MATLAB tiene una serie de funciones que ayudan a trabajar con polinomios c´ omodamente. Por ejemplo >> A=[1-i 2+i. pero hay algunas propiedades espec´ ıficas de estos u ´ltimos que hay que tener en cuenta. Hay que tener cuidado con la trasposici´ on. pero tambi´ en se puede multiplicar y dividir polinomios.1.0000i 50 . Las letras que la designan son bien i.0000i 2. Adem´ as. La unidad imaginaria es una constante predefinida en MATLAB. . Si A es una matriz de n´ umeros complejos entonces A es la transpuesta conjugada de A (lo que nosotros solemos designar como A∗ ). bien j. MATLAB no produce un error si se le pide la ra´ ız cuadrada o el logaritmo de un n´ umero negativo sino que devuelve el correspondiente n´ umero complejo. Polinomios son vectores cuyas componentes son los coeficientes del polinomio. 5.Cap´ ıtulo 5 N´ umeros complejos y polinomio MATLAB trabaja indistintamente con n´ umeros reales o complejos. Sumar polinomios es como sumar vectores.0000 .

MATLAB puede realizar diversas operaciones sobre ´ el.0000i 0 + 1.0000 + 1. C´ alculo con Polinomios Tal y como hemos dicho Para MATLAB un polinomio es el vector de sus coeficientes.1. el comando plot cuando se emplea con n´ umeros complejos tiene un significado especial: Si y es un vector de n´ umeros complejos la sentencia plot(y) es equivalente a plot(real(y).3026 + 1.1.1.6748 0.’ At = 1.3026 .0000 + 1. -8.2.0238i .1. Por ejemplo.0000 .0000i 3.0000 + 1.0000 + 1. 6. el polinomio: p(x) = x4 − 8x2 + 6x − 10 se puede representar mediante el vector >>[1. 5.0000i 0 + 1.imag(y)).0000i >> At=A.0000i 2.1.1) 2.0000i 0 .0000i 2.0000 .0000i 51 Finalmente. -10].0000i 3.2800 >> polyval(pol.N´ umeros complejos y polinomio 3.0000i >> Atc=A’ Atc = 1. 0.0000 . como por ejemplo evaluarlo para un determinado valor de x (funci´ on polyval()) y calcular las ra´ ıces (funci´ on roots()): >> pol=[1 0 -8 6 -10] pol = 1 0 -8 6 -10 >> roots(pol) ans = -3.0238i 0.

la funci´ on polyvalm(pol.A) devuelve la matriz p(A).3)*5-7) A = -2 -5 -3 -4 -2 -3 -4 -6 -2 >> polyvalm(pol. En el siguiente ejemplo se va a ver c´ omo se multiplica un polinomio de segundo grado por otro de tercer grado: >> pol1=[1 -2 4] pol1 = 1 -2 4 >> pol2=[1 0 3 -4] pol2 = 1 0 3 -4 >> pol3=conv(pol1. As´ ı con el polinomio pol=[1 0 -8 6 -10] definido m´ as arriba: >> A=ceil(rand(3. Las funciones orientadas al c´ alculo con polinomios son las siguientes: poly(A) polinomio caracter´ ıstico de la matriz A .N´ umeros complejos y polinomio ans = -11 52 Hay una funci´ on similar a polyval pero para matrices: la funci´ on plyvalm.A) ans = 3130 3818 2568 2896 3526 2370 3688 4476 2998 Para calcular el producto de polinomios MATLAB utiliza una funci´ on llamada conv() (de producto de convoluci´ on). Dada una matriz A y polinomio p(λ) = pol.pol2) pol3 = 1 -2 7 -10 20 -16 Para dividir polinomios existe otra funci´ on llamada deconv().

p2) [c. 53 Existen tambi´ en algunas funciones orientadas a la interpolaci´ on polinomial que no vamos a considerar aqu´ ı.q) residue(p1. Si x es un vector. en el sentido de los m´ ınimos cuadrados. .N´ umeros complejos y polinomio poly(v) roots(pol) polyval(pol. En c se devuelve el cociente y en r el resto de la divisi´ on descompone el cociente entre p1 y p2 en suma de fracciones simples (ver >> help residue) calcula la derivada de un polinomio calcula la derivada del producto de polinomios calcula los coeficientes de un polinomio p(x) de grado n que se ajusta a los datos (xi . pol se eval´ ua para cada elemento de x evaluaci´ on del polinomio pol de la matriz A producto de convoluci´ on de dos polinomios p1 y p2 divisi´ on del polinomio p por el polinomio q. Si quieres saber algo sobre ellas utiliza la ayuda.y.A) conv(p1.p2) polyder(pol) polyder(p1.x) polyvalm(pol.r]=deconv(p.p2) polyfit(x.n) polinomio cuyas ra´ ıces son los elementos de v ra´ ıces del polinomio pol evaluaci´ on del polinomio pol para el valor de x. yi ).

si v = [1 2 3 4] entonces >> v=[1 2 3 4]. Pero >> diag(v. Nosotros no vamos a distinguir entre ambos tipos de funciones. Conociendo el nombre de la funci´ on lo m´ as 54 . Es decir. Algunas de ellas est´ an incorporadas al n´ ucleo de MATLAB y otras son ficheros M. diag(v) devuelve la matriz diagonal cuya diagonal es el vector v.1) ans = 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 devuelve una matriz 5 × 5 cuya “superdiagonal” es v. >> diag(v) ans = 1 0 0 2 0 0 0 0 0 0 3 0 0 0 0 4 Es decir.Ap´ endice A Funciones incorporadas en MATLAB En este ap´ endice se relacionan algunas (muchas) funciones nativas de MATLAB. se explica su objetivo principal pero pueden hacer m´ as cosas de las que se mencionan. Por ejemplo. Las hemos clasificado de acuerdo a su prop´ osito general pero algunas de ellas podr´ ıan estar en varios grupos. Se describe brevemente lo que hacen y en muchos casos tanto las variables de entrada (los tipos de variables que aceptan) como las de salida (lo que producen) son m´ as de las que se relacionan. Tanto para una explicaci´ on m´ as detallada de cada una de las funciones como de toda su potencialidad se recomienda utilizar el sistema de ayuda.

que comprenden las funciones matem´ aticas trascendentales y otras funciones b´ asicas. proporcionales al seno y al coseno arco cotangente arco secante arco cosecante seno hiperb´ olico coseno hiperb´ olico tangente hiperb´ olica cotangente hiperb´ olica secante hiperb´ olica cosecante hiperb´ olica arco seno hiperb´ olico arco coseno hiperb´ olico arco tangente hiperb´ olica arco cotangente hiperb´ olica arco secante hiperb´ olica arco cosecante hiperb´ olica . si x es una matriz. Estas funciones. vectores y matrices.1. Funciones que act´ uan sobre escalares Hay funciones matem´ aticas elementales que operan de modo escalar.y) acot(x) asec(x) acsc(x) sinh(x) cosh(x) tanh(x) coth(x) sech(x) csch(x) asinh(x) acosh(x) atanh(x) acoth(x) asech(x) acsch(x) seno coseno tangente cotangent secante cosecante arco seno arco coseno arco tangente (devuelve un ´ angulo entre −π/2 y +π/2) arco tangente (devuelve un ´ angulo entre −π y +π ). Se debe entender que si el argumento o argumentos sobre los que act´ ua la funci´ on son matrices o vectores entonces dicha funci´ on act´ ua t´ ermino a t´ ermino. se le pasan 2 argumentos. sin(x) devuelve una matriz cuyos elementos son los senos de los elementos de la matriz x. Algunas de las funciones de este grupo son las que se relacionan a continuaci´ on. Se aplican de la misma forma a escalares. As´ ı.Funciones incorporadas en MATLAB r´ apido es utilizar el comando help funci´ on. act´ uan sobre cada elemento de la matriz como si se tratase de un escalar. ´ TRIGONOMETRICAS sin(x) cos(x) tan(x) cot(x) sec(x) csc(x) asin(x) acos(x) atan(x) atan2(x. 55 A.

y) conj(x) real(x) imag(x) isreal(x) valor absoluto o m´ odulo si x es un n´ umero complejo argumento del n´ umero complejo x devuelve el n´ umero complejo x + iy complejo conjugado parte real parte imaginaria devuelve 1 si x es real y 0 si x tiene parte imaginaria DE REDONDEO Y RESTO sign(x) devuelve -1 si x < 0.y) mod(x. devuelve un vector unitario en la misma direcci´ on que x resto de la divisi´ on de x entre y . 0 si x = 0 y 1 si x > 0.Funciones incorporadas en MATLAB EXPONENCIALES exp(x) log(x) log10(x) log2(x) sqrt(x) realpow(x) reallog(x) realsqrt(x) funci´ on exponencial logaritmo natural (neperiano) logaritmo decimal logaritmo en base 2 ra´ ız cuadrada potencia que da error si x no es real logaritmo neperiano de n´ umeros reales ra´ ız cuadrada de n´ umeros mayores o iguales a cero 56 COMPLEJAS abs(x) angle(x) complex(x. Los argumentos son n´ umeros reales (no necesariamente enteros) similar a rem (Ver diferencias con el sistema de ayuda) redondeo hacia el entero m´ as pr´ oximo redondea hacia el entero m´ as pr´ oximo a 0 valor entero m´ as pr´ oximo hacia −∞ valor entero m´ as pr´ oximo hacia +∞ m´ aximo com´ un divisor m´ ınimo com´ un m´ ultiplo rem(x. Aplicada a un n´ umero complejo.y) lcm(x.y) .y) round(x) fix(x) floor(x) ceil(x) gcd(x.

pM]=max(x) [vm. La relaci´ on completa se puede consultar a trav´ es de la ayuda: matlab/elmat y matlab/matfun principalmente. No est´ an todas las que soporta MATLAB. En este grupo aparecen algunas de las funciones m´ as u ´tiles y potentes de MATLAB. dando como valor de retorno un vector resultado de aplicar la funci´ on a cada columna de la matriz considerada como vector. Aqu´ ı se presentan s´ olo algunas funciones. Funciones que act´ uan sobre matrices Las siguientes funciones exigen que el/los argumento/s sean matrices. A. Una relaci´ on completa de todas las funciones soportadas por MATLAB se puede obtener consultando la ayuda: matlab/datafun. el tercero es la suma de los tres primeros vectores de x.i]=sort(x) En realidad estas funciones se pueden aplicar tambi´ en a matrices . pm]=min(x) sum(x) cumsum(x) devuelve la longitud del vector x m´ aximo elemento de un vector. Devuelve el valor m´ ınimo y la posici´ on que ocupa suma de los elementos de un vector devuelve el vector suma acumulativa de los elementos de un vector.3. y as´ ı sucesivamente valor medio de los elementos de un vector desviaci´ on t´ ıpica producto de los elementos de un vector devuelve el vector producto acumulativo de los elementos de un vector (como en cumsum pero respecto al producto) ordenaci´ on de menor a mayor de los elementos de un vector x. Devuelve el vector ordenado y .2. Devuelve el valor m´ aximo vM y la posici´ on que ocupa pM en el vector m´ ınimo elemento de un vector. Es decir. el primer elemento del nuevo vector es el mismo que el de x. el segundo es la suma de los dos primeros de x.Funciones incorporadas en MATLAB 57 Hay otras funciones escalares que pueden ser consultadas a trav´ es de la ayuda en el apartado matlab/specfun. Funciones que act´ uan sobre vectores Las siguientes funciones act´ uan sobre vectores. y un vector i con las posiciones iniciales en x de los elementos en el vector ordenado mean(x) std(x) prod(x) cumprod(x) [y. Se clasificar´ an en varios subgrupos: . Si estas funciones se quieren aplicar a las filas de la matriz basta aplicar dichas funciones a la matriz traspuesta. pero en ese caso se aplican por separado a cada columna de la matriz. length(x) [vM. A.

FUNCIONES PARA MANIPULAR MATRICES cat(Dim. √ devuelve una matriz cuyos elementos son aij . devuelve la traza de la matriz cuadrada A devuelve el n´ umero de filas m y de columnas n de una matriz rectangular A devuelve el n´ umero de elementos de la matriz A. · A n veces. Si la matriz A es de n´ umeros reales A. la ante´ ultima pasa a ser la segunda.e.’ calcula la traspuesta (conjugada) de la matriz A calcula la traspuesta (sin conjugar) de la matriz A.Funciones incorporadas en MATLAB FUNCIONES MATRICIALES ELEMENTALES A’ A. i. una matriz B tal que eB = A. i. .B) concatena las matrices A y B ..n) respectivamente.n) diag blkdiag(A. las pone una junto a la otra. i. reshape(A.e. devuelve una matriz cuyos elementos son ln(aij ).e. devuelve √ la exponencial de A.B) tril(A) triu(A) fliplr(A) .m.n) y powerm(A. eA . si n es un entero.^n y A^ n son equivalentes a las funciones power(A. Si Dim=1 B debajo de A y si Dim=2 pone B detr´ as de A cambia el tama˜ no de A a una matriz m × n dependiendo del argumento se emplea para construir una matriz diagonal o para extraer la diagonal de una matriz construye una matriz diagonal por bloques extrae la parte triangular inferior de A extrae la parte triangular superior de A permuta las columnas de A: la u ´ltima pasa a ser la primera. ı misma devuelve A. a ij devuelve la matriz cuyos elementos son b .b) power(b. devuelve una matriz cuyos elementos son exp(aij ) = eaij . .n] = size(A) numel(A) FUNCIONES MATRICIALES ESPECIALES power(A. i. una matriz que multiplicada por s´ da A.A. Los comandos A. etc. 58 trace(A) [m.’ y A’ producen el mismo resultado.A) exp(A) sprt(A) log(A) mpower(A. devuelve la matriz ln(A).e.n) expm(A) sqrtm(A) logm(A) Si A = [aij ] devuelve la matriz cuyos elementos son ab ij . devuelve la matriz A · .

Funciones incorporadas en MATLAB flipud(A) rot90(A) [I.R]=qr(A) d = det(A) E = rref(A) U = chol(A) .B) ´ DE MATRICES Y FUNCIONES DE FACTORIZACION ´ DE RESOLUCION DE SISTEMAS LINEALES /y\ B = inv(A) c = cond(A) U = chol(A) [L. descomposici´ on QR de A Determinante de la matriz cuadrada A reducci´ on a forma de escalera por filas de una matriz rectangular A descomposici´ on de Cholesky de una matriz definida positiva [Q.V]= find(A) lo mismo que fliplr pero por filas rota A 90 grados encuentra las filas y columnas donde est´ an los elementos no nulos de A y los almacena en I y J . P una matriz de permutaci´ on. P A = LU . respectivamente. Se usa cuando el tama˜ no de A es muy grande y se consume mucho tiempo en calcular norm(A) rango de la matriz A determinante de A traza de A las columnas de N forman una base del n´ ucleo de A las columnas de Q forman una base ortonormal del espacio imagen de A ´ angulo entre los subespacios generados por las columnas de AyB r=rank(A) d=det(A) t=trace(A) N=null(A) Q=orth(A) subspace1(A. devuelve el u ´ltimo ´ ındice de A 59 end(A) ´ FUNCIONES DE ANALISIS MATRICIAL n=norm(v) n=normest(A) norma 2 del vector v o de la matriz.Hay variantes para otras normas estimaci´ on de la norma 2 de la matriz A. En V pone el vector de elementos no nulos.U] = lu(A) soluci´ on de sistemas lineales (ver la ayuda “help slash”) inversa de A n´ umero de condici´ on de A en la norma 2 . si el argumento es una matriz.J. Hay una variante para otras normas descomposici´ on de Cholesky de una matriz definida positiva descomposici´ on LU (con pivotamiento) de la matriz A. Es decir. L triangular inferior con 1’s en la diagonal y U una matriz triangular superior.

Convierte la forma diagonal compleja de Schur de una matriz real a la forma real. P es un vector cuyas componentes son los coeficientes del polinomio caracter´ ıstico de X .S]=schur(A) [U. P es un polinomio cuyas ra´ ıces son las componentes de X forma Hessenberg de A forma de Schur de A. U es la matriz unitaria tal que A = U SU ∗ transforma la forma de Schur real en la compleja. H=hess(A) [U. La forma real de Schur se refiere a una matriz real cuyos valores propios complejos aparecen en pares conjugados. La matriz R de la forma de Schur es real y en ella aparecen bloques diagonales 2 × 2 asociados a los valores propios complejos conjugados. La forma de Scur compleja es la habitual: una matriz triangular superior con los valores propios (posiblemente complejos) en la diagonal.S]=cdf2rdf(U.S]=rsf2csf(U. Si X es un vector.S. el rec´ ıproco del anterior.V]=svd(A) P=poly(X) devuelve el vector E con los valores propios de A descomposici´ on de A en valores singulares: A = U SV ∗ si X es una matriz cuadrada.Funciones incorporadas en MATLAB P=pinv(A) pseudoinversa (o inversa de Moore-Penrose) de A 60 FUNCIONES PARA CALCULO DE VALORES PROPIOS Y SINGULARES E=eig(A) [U.R) [U.R) .

Desde la consola (command tool) abre una sesi´ on xwindow: openxt. Sal siempre tecleando quit en Matlab. hay 11 estrellitas y un 16 despu´ es de la cuarta) para abrir una xterminal con posibilidad de scrolling y con una fuente de caracteres suficientemente grandes. No obstante. Conviene. Escribiendo en Matlab (no olvides el signo de cierre de admiraci´ on) >>!textedit nos aperecer´ a. en ventana aparte. llamarlo de nuevo cada vez que vayamos a escribir un nuevo programa. y si todav´ ıa te parecen peque˜ nos. para prevenir errores fatales (como perder un programa ya terminado de escribir). MUY IMPORTANTE: No salgas NUNCA de Matlab cerrando la xterminal. pon uno mayor. Escribe : xterm -sb -fn “-misc-fixed-*-*-*-*-16-*-*-*-*-*-*-*”& (exactamente como aparece aqu´ ı con comillas y todo: S´ ı. el editor. Esto consume recursos del sistema y puede perjudicar a otros usuarios. No es necesario salirse de Matlab para poder utilizarlo. Para ello procede de la siguiente forma: Desde la command tool o desde la xterminal teclea ps -ef|fgrep matlab 61 . Si te parece que los caracteres son demasiado grandes escribe un n´ umero menor. Puedes cambiar 16 por cualquier n´ umero. En la nueva xterm escribe matlab. antes de abandonar la sesi´ on conviene que te asegures de que no has dejado ning´ un proceso de Matlab abierto. Parece que un editor simple que funciona bien es el Text Editor que trae el sistema open windows por defecto. puedes dejar un proceso de Matlab abierto.Ap´ endice B Consejos para el uso de Matlab en picasso Abre una sesi´ on en picasso con tu login y password.

Debes escribir entonces kill n´ umero_identificaci´ on_proceso donde n´ umero_identificaci´ on_proceso es el n´ umero de identificaci´ on del proceso (en el ejemplo de m´ as arriba 3361). Si s´ olo aparece ´ este (bajo tu nombre). Siempre te aparecer´ a el proceso fgrep matlab. La u ´ltima columna es el nombre del proceso. Una vez hecho. no dejas ning´ un proceso de matlab corriendo. Si aparecen m´ as debes fijarte en la tercera columna: aparece un n´ umero. ya no hay procesos de Matlab bajo tu nombre. . puedes salir de la sesi´ on tranquilamente. Debes hacerlo con todos los procesos salvo con fgrep matlab. no puedes hacer nada. afortunadamente.Consejos para el uso de Matlab en picasso 62 Aparecer´ an entonces una o m´ as filas como las siguientes (quiz´ a m´ as filas y con m´ as informaci´ on): izaballa 3804 3361 /bin/sol2/Medit izaballa 3896 3642 0 09:31 pts/0 0 09:35 pts/1 00:00:01 /usr/local/share/matlab5 00:00:00 fgrep matlab La primera columna nos dice qui´ en es el due˜ no del proceso. sobre los dem´ as. Es el n´ umero de identificaci´ on del proceso. en efecto. S´ olo debes preocuparte por los procesos que est´ an a tu nombre. conviene que vuelvas escribir ps -ef|fgrep matlab para comprobar que.

ni ftp. Sigue las siguientes instrucciones (si no lo has hecho ya): 1. A continuaci´ on puede pedirte confirmaci´ on. como su nombre indica. Tambi´ en se informa sobre un modo de enviar los ficheros de pr´ acticas por correo electr´ onico a la cuenta del profesor. En el puerto (port) aparecer´ a 22. Las operaciones de conexi´ on y transferencia de ficheros a picasso se har´ a SIEMPRE mediante una shell segura por razones. Lo puedes hacer directamente en picasso o desde la sala de ordenadores en la que se hacen las pr´ acticas. No se debe usar ni telnet. simplemente pincha en YES. Tu directorio home es algo as´ ı como /home/alu/tu nombre de cuenta/. Crea un subdirectorio llamado matlab en el directorio home de picasso. El comando UNIX para crear 63 . Preparativos en picasso Lo que viene a continuaci´ on debes hacerlo en tu cuenta de picasso. si no es as´ ı lo escribes. de seguridad.Ap´ endice C Env´ ıo de ficheros En este ap´ endicese explica c´ omo enviar ficheros desde la sala de ordenadores de la Facultad a una cuenta de picasso. Para ello pincha sobre el icono de SSH que aparece en el escritorio Pincha en Quick Connect. primero te debes conectar a picasso. Finalmente te pide tu password: escr´ ıbelo y da entrada.227. Para hacerlo desde la sala de ordenadores.31 y tu nombre de cuenta.5. En el aula de ordenadores se dispone de una shell segura de libre distribuci´ on llamada SSH. En el primer caso debes entrar en tu cuenta y seguir los pasos que se indican m´ as abajo. C. Escribe la direcci´ on IP de picasso: 158. Ya est´ as en picasso.1.

31. 6. Escribe tu password. 3. cuando te lo pida. Una vez hecho esto sal de SSH. C. 3. Una vez conectado a picasso. las siguientes instrucciones: cd /home/izaballa/matlab/practicas format compact addpath /home/alu/tu_nombre_de_cuenta/matlab/practicas Esto es imprescindible si alguna vez quieres trabajar con MATLAB en picasso. por lo menos.5. Pincha en Quick Connect y escribe la direcci´ on de picasso: 158. En el men´ u Actions elige Upload. Pincha en el icono de SSH File Transfer: 2. sal de SSH File Transfer. tu nombre de cuenta y el puerto 22. 4.227. Transferencia de ficheros a picasso Para transferir ficheros a picasso desde el aula de ordenadores sigue las siguientes instrucciones: 1. 64 2. Una vez terminada la transferencia. 5.m que contenga. Confirma la conexi´ on si as´ ı te lo pide. Crea un subdirectorio llamado practicas( no se admiten las tildes) en el directorio matlab. .2. Abre el Text Editor (con el comando textedit) y crea un fichero startup. Elige los ficheros que quieres enviar a picasso pinchando en ellos.Env´ ıo de ficheros directorios es mkdir. pincha en matlab para cambiar a este directorio y luego en practicas. Te saldr´ a una ventana con las carpetas del ordenador. si fuera necesario.

Una vez conectados a picasso se debe hacer lo siguiente: 1. Aparecer´ a una pantalla parecida a la siguiente (quiz´ a con otro color de fondo): 4. Con la tecla de control apretada pulsa la tecla T. El resto de las posibilidades que las explore cada cual. observa que m´ as abajo hay un men´ u. TODAS LAS POSIBLES ACCIONES QUE SE PUEDEN HACER DESDE CADA PANTALLA APARECEN. Con la tecla C elige componer un mensaje. no tenemos habilitado el uso del rat´ on en pine (que ser´ a lo normal). si quiere. . Si conoces el camino completo hasta el fichero que quieres enviar. por ejemplo. 2. Si es la primera vez que lo haces aparecer´ a una pantalla de bienvenida. Explicar´ e s´ olo c´ omo enviar ficheros. Con la tecla de control apretada pulsa la tecla J. En una ventana de comandos o en la ventana de SSH escribe pine. EN LA PARTE INFERIOR DE LA VENTANA DE PINE. Explicar´ e aqu´ ı como hacerlo con el cliente de correo pine y en modo consola. En To: escribe izaballa@picasso. 5. Para ello sigue las instrucciones del apartado relativo a preparativos. Sal de ella tecleando E. Si no.3. la primera pantalla de pine es siempre el men´ u principal. el rat´ on no sirve para nada. Env´ ıo de los ficheros por correo electr´ onico De nuevo esto se puede hacer desde picasso utilizando Netscape. Salvo por la posible pantalla de bienvenida. lo tenemos que hacer todo con el teclado. u otro cliente de correo electr´ onico al que cada cual pueda estar acostumbrado.Env´ ıo de ficheros 65 C.ehu. bien directamente o bien a trav´ es de SSH desde el aula de ordenadores. si estando delante de picasso.lc. 3. CON LA CORRESPONDIENTE TECLA A PULSAR. Se supone que ya tenemos abierta una sesi´ on en picasso.es y pulsa entrada o mu´ evete con las teclas del cursor hacia abajo hasta Attchmnt:. escr´ ıbelo ahora. En la parte inferior de la ventana aparecer´ a File to attach:. Esto te llevar´ a a una nueva pantalla con el contenido de tu directorio home. Esto significa que si no estamos f´ ısicamente delante de una terminal de picasso o.

Esto te devuelve a la pantalla de composici´ on de mensajes de pine donde se te permite incluir alg´ un comentario corto sobre el fichero. Una vez escrito el cuerpo del mensaje puedes enviarlo: manteniendo pulsada la tecla de control pulsa X.m al fichero correspondiente al ejercicio 31. Si est´ as en el aula de ordenadores no olvides salir de SSH. Ver´ as que en la l´ ınea de Attchmnt: aparece el fichero seleccionado. hasta colocar el cursor debajo de Message Text. con las teclas de cursor o pulsando entrada. No env´ ıes un mensaje por fichero. mu´ evete. Cuando hayas acabado de incorporar ficheros para enviar. Te pide confirmaci´ on. aunque yo prefiero un nombre del estilo ejer31. Una vez elegido pulsa entrada. 13. Para enviar otro fichero observa que el cursor sigue en Attchmnt:. Comprueba que se trata del fichero que quieres enviar. 7. Repite el paso anterior para seleccionar el directorio practicas.Env´ ıo de ficheros 66 6. Con las teclas de cursor (arriba y abajo) mu´ evete hasta encontrar el directorio matlab. En principio pulsa entrada.m) 12. Pulsa de nuevo control+J y repite el proceso hasta el nuevo fichero. 10. Te pide confirmaci´ on. 11. Puedes enviar tantos ficheros como quieras en el mismo mensaje. eso colapsar´ ıa mi cuenta de correo (o casi). 9. Ya puedes salir de pine: pulsa Q. 8. . Con las teclas de cursor selecciona el fichero que quieres enviar. Escribe aqu´ ı las aclaraciones que debas hacerme (como por ejemplo que has llamado jklmn. Una vez all´ ı pulsa entrada.

Sign up to vote on this title
UsefulNot useful