Está en la página 1de 66

Practicas de Analisis Matricial con MATLAB

Ion Zaballa

Indice general
1. Lo Bsico a 1.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 1.2. Comienzo y Fin de una sesin de MATLAB . . . . . . . . . . . . . . . . . . . . . o 1.3. Sistema de Ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Edicin en la L o nea de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Matrices y Vectores 2.1. Generacin de matrices expl o citamente . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Elementos de Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2. Formatos de Salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Manipulacin de vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . . o 2.3. Matrices a partir de funciones predenidas 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 bsqueda (SEARCH PATH) de MATLAB . . . . . . . . . . . . . . u 3.3. Manipulacin de cheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3.3.1. Ejecucin de Programas Externos o . . . . . . . . . . . . . . . . . . . . . . 4 4 5 6 7 9 9 11 12 14 20 22 24 24 25 26 26 27 29 30

3 4. Programacin en MATLAB o 4.1. Empezando a programar en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Operadores relacionales y lgicos . . . . . . . . . . . . . . . . . . . . . . . o 4.1.2. Bifurcaciones y Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3. Presentacin de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . o 4.2. Scripts y Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. N meros complejos y polinomio u 5.1. Nmeros Complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . u 5.2. Clculo con Polinomios a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 actan sobre escalares . . . . . . . . . . . . . . . . . . . . . . . . . u A.2. Funciones que actan sobre vectores . . . . . . . . . . . . . . . . . . . . . . . . . u A.3. Funciones que actan sobre matrices . . . . . . . . . . . . . . . . . . . . . . . . . u B. Consejos para el uso de Matlab en picasso C. Env de cheros o C.1. Preparativos en picasso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C.2. Transferencia de cheros a picasso . . . . . . . . . . . . . . . . . . . . . . . . . . C.3. Env de los cheros por correo electrnico o o . . . . . . . . . . . . . . . . . . . . .

Cap tulo 1

Lo Bsico a

1.1.

Introduccin o

Este documento pretende ser una gu bsica para introducirse de forma personal en el uso de a a MATLAB y en relacin con la asignatura Anlisis Matricial Aplicado. Por lo tanto, aqu slo se o a o cubrirn aquellos aspectos de MATLAB que tienen relacin con la materia discutida en dicha a o asignatura. En otros documentos, que se entregarn en clase, se plantearn ejercicios en base al a a contenido de esta gu y que deben ser resueltos personalmente. Si se quiere disponer de una a buena y completa gu de MATLAB, mi recomendacin es el libro MATLAB Guide de D. J. a o Higham y N. J. Higham, edita do por SIAM. Aunque el origen de MATLAB estuvo ntimamente ligado a la manipulacin y computacin de o o y con matrices, durante los ultimos aos ha evolucionado de forma que hoy se puede considerar n como un software de propsito general para todas las ramas de la matemtica y la ingenier o a a desde el punto de vista numrico y computacional. Tambin es posible el clculo simblico con e e a o MATLAB siempre que se disponga del toolbox apropiado; en este caso el Symbolic toolbox. Existen muchos otros toolboxes que, sobre la base del ncleo de MATLAB, proporcionan funciones u espec cas para el clculo numrico de ciertas partes concretas de la matemtica, la ingenier a e a a y otras ciencias. Si se quiere informacin sobre los productos relacionados con MATLAB puede o visitarse la pgina web de la empresa que lo desarrolla: www.mathworks.com. a Trabajando con MATLAB se debe tener muy claro que las unidades bsicas son matrices (un a escalar es, por lo tanto, una matriz 1 1), y que por lo tanto todas las operaciones se reeren a matrices. Se puede ejecutar MATLAB sobre cualquier sistema operativo. Se presupone que las prcticas se a realizarn en la sala de informtica del Departamento de Matemtica Aplicada y EIO o en una a a a 4

Lo Bsico a

de las aulas de ordenadores de la Facultad de Ciencias. En el primer caso, la sala est compuesta a de una serie de terminales grcos conectados a un servidor de SUN Microsystems dotado del a sistema operativo UNIX Solaris y cuyo nombre en internet es picasso.lc.ehu.es. En lo sucesivo hablaremos de picasso para referirnos a l. En el segundo caso se trata de un aula de ordenadores e personales con sistema operativo MSWindows (en alguna de sus versiones, posiblemente XP). A partir de la versin 6 los interfaces grcos para los sistemas basados en MSWindows y UNIX o a son muy parecidos, as que hay muy pocas diferencias en el entorno de trabajo de MATLAB para ambos sistemas operativos. Adems, la ultima versin de MATLAB (Realease 14MATLAB 7) a o corrige algunas deciencias de edicin con el teclado en castellano (como la ubicacin del s o o mbolo [ o el acento circunejo ^) que ten las versiones anteriores para los sistemas UNIX. Esto an signica que las explicaciones que damos en estas notas son, en su mayor de aplicacin para a, o MATLAB bajo ambos sistemas.

1.2.

Comienzo y Fin de una sesin de MATLAB o

Una sesin de MATLAB se comienza de forma diferente segn la plataforma sobre la que lo o u ejecutemos. En un PC o Mac basta hacer doble click con el botn izquierdo del ratn sobre o o el icono de MATLAB. En picasso podemos ejecutar MATLAB en modo consola o utilizando un interfaz grco. En cualquier caso, se debe abrir primero una sesin X: a o Escribir el username y password. Abrir una ventana de comandos command tool. Para ejecutar MATLAB en modo consola se debe abrir una xterminal y en ella escribir matlab -nodesktop. Para utilizar MATLAB en modo grco, que es ms sencillo, se debe escribir a a matlab y pulsar la tecla de entrada. Trabajando en picasso en modo grco, MATLAB puede consumir muchos recursos del sistema; a principalmente si hay muchos usuarios conectados y dependiendo de la calidad de los terminales grcos. Si este fuera el caso (que se nota por una excesiva ralentizacin del sistema) es recoa o mendable trabajar en modo consola. En este modo hay una serie de reglas que se recomienda utilizar y que se exponen en el Apndice B. e Trabajando en modo grco, bien sea bajo UNIX o MSWindows, una vez ejecutadas las acciones a mencionadas, aparecer el logotipo de MATLAB y a continuacin una ventana como la que se a o muestra en la Figura 1.1 (si se trabaja con versin 7. La ventana es parecida en versiones o anteriores, pero hay algunas diferencias; por ejemplo, en el men principal). Si es la primera vez u que se ejecuta MATLAB, la ventana principal puede estar compuesta de otras varias, por ejemplo Launch Pad, Command History y Command Window. De momento slo nos interesa la ultima o de ellas que es la ventana de comandos de MATLAB. Por ello, aunque no es estrictamente necesario, cerramos las dems con un click del ratn en el s a o mbolo de cada ventana. En realidad hay otras ventanas ocultas que se pueden ir cerrando sucesivamente hasta que no quede ms que la ventana Command Window. Todas estas ventanas tienen, de momento, un inters a e

Lo Bsico a

Figura 1.1: Ventana inicial de MATLAB. secundario y siempre se pueden volver a abrir seleccionndolas con el ratn en el men view de a o u la ventana principal. En la ventana de comandos de MATLAB aparece el s mbolo >> (ste es el prompt de e MATLAB) y el cursor parpadeando. El programa est preparado para recibir rdenes. a o Para nalizar la sesin en cualquier sistema basta escribir el comando quit. Alternativamente o se puede elegir Exit MATLAB en el men File del men principal. u u Cuando hablamos de usar un comando (por ejemplo quit), nos referimos a escribir detrs del a prompt de MATLAB la palabra correspondiente (en este caso quit) y pulsar la tecla de entrada.

1.3.

Sistema de Ayuda

El sistema de ayuda de MATLAB es muy completo. Hay varios niveles de ayuda: desde demos hasta ayuda especializada para saber lo que hace una determinada funcin o comando. Empeo zando por lo ultimo, si se quiere saber, por ejemplo, lo que es y hace el comando lu se teclea en la ventana de comandos help lu o helpwin lu. MATLAB responde, en la propia ventana de comandos (en el primer caso) y en una ventana aparte en formato ms bonito (en el segundo), a explicando todo lo relativo a dicho comando. Lo anterior implica que se sabe lo que se busca. Hay niveles ms generales de ayuda. Por ejemplo, a tecleando helpwin aparece una relacin de las carpetas de MATLAB que contienen ayuda y una o breve descripcin del contenido de cada carpeta. Pinchando en cada una de ellas se obtiene un o listado con los comandos o funciones que hay en dicha carpeta. Al pinchar, de nuevo, en cada uno de ellos se obtiene una ayuda exhaustiva de lo que hace cada funcin. o Los dos niveles de ayuda anteriores (help funcin y helpwin) estn disponibles tanto en modo o a grco como en modo consola. Si se trabaja en modo grco hay, adems, una tercera posibilidad a a a de ayuda ms general. Pinchando en Help en el menu principal de MATLAB y seleccionando a MATLAB Help aparecer una nueva ventana como la de la Figura 1.2 con toda la ayuda a

Lo Bsico a

de MATLAB. En la parte izquierda aparece un men que se puede desplegar pinchando en el u

Figura 1.2: La ventana de ayuda de MATLAB. 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.

1.4.

Edicin en la L o nea de Comandos

Si se comete algn error cuando se est introduciendo un comando de MATLAB, no es necesario u a volver a reescribir todo de nuevo. Las teclas de echas o la combinacin de la tecla ctrl y otra o 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 carcter hacia atrs a a Mueve el cursor un carcter hacia adelante a 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 nal de la l nea Borra la l nea Borra el carcter sobre el cursor a Borra el carcter que est delante del cursor a a Borra todo desde el cursor hasta el n de la l nea

No es necesario poner el cursor al nal de la l nea de comandos para que MATLAB reconozca la l nea entera, se puede dar entrada estando el cursor en cualquier punto de dicha l nea. Esto suele suceder cuando se ha observado un error al escribir y se mueve el cursor hacia atrs para a corregir el fallo. Si se va a volver a utilizar un comando ya usado anteriormente (o parte de l), basta teclear e unos pocos caracteres de dicho comando y entonces usar la tecla . MATLAB recordar el ultimo a

Lo Bsico a

comando que comenzaba con esos caracteres. Sucesivas pulsaciones de producen la aparicin o de los anteriores comandos que empiezan por las letras o s mbolos escritos. Tambin se puede utilizar el clsico sistema de copiar y pegar para producir rdenes en la l e a o nea de comandos.

Cap tulo 2

Matrices y Vectores

Vectores y matrices son para MATLAB la misma cosa. Se pueden introducir matrices en MATLAB de varias formas: Introduciendo una lista expl cita de elementos. Generando matrices con funciones predenidas en MATLAB. Cargando matrices desde un chero de datos externo. Creando matrices con funciones denidas por el usuario/a a travs de cheros M. e En este cap tulo analizaremos cada una de estas formas de generar matrices y vectores.

2.1.

Generacin de matrices expl o citamente

La forma ms sencilla de introducir matrices es escribiendo expl a citamente los elementos de la matriz. Las otras formas de generar matrices las iremos viendo posteriormente. Para obtener una matriz escribiendo sus elementos slo hay que tener en cuenta unas pocas reglas: o Los elementos de la matriz hay que introducirlos la a la. Los elementos de cada la deben estar separados por comas o espacios en blanco. Para indicar el nal de una la se debe escribir ;. La lista de todos los elementos debe estar encerrada entre corchetes, [ ]. 9

Matrices y Vectores

10

Debe observarse que el nmero de elementos en cada la debe ser el mismo; en caso contrario, u MATLAB producir un mensaje de error. Por ejemplo para introduir la matriz a 16 3 2 13 5 10 11 8 A= 9 6 7 12 4 15 14 1 escribir amos: >> A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] La respuesta de MATLAB, una vez pulsada la tecla de retorno, ser a: A = 16 3 2 5 10 11 9 6 7 4 15 14 13 8 12 1

A veces el nmero de elementos en cada la es muy grande y es preferible introducir una la en u cada l nea, lo unico que hay que hacer es terminar la l nea con tres puntos: . . . y teclear retorno. Por ejemplo >> A=[16 5 9 4 3 2 13; ... 10 11 8;... 6 7 12;... 15 14 1 ]

produce la misma matriz. De cualquiera de las formas la matriz introducida queda asignada a la variable A. Debe observarse que con MATLAB no hay que declarar las variables. Se podr haber introducido la matriz sin a asignrsela de forma espec a ca a una variable. Por ejemplo, si escribimos >> [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] MATLAB responde: ans = 16 3 2 5 10 11 9 6 7 4 15 14

13 8 12 1

Matrices y Vectores

11

Aunque nosotros no hemos asignado la matriz a ninguna variable, MATLAB se la asigna a la variable ans, que es una variable predenida en el sistema. Esta variable es como las dems. a Dado que A y ans son dos variables a las que les hemos asignado el mismo valor, 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 maysculas y minsculas de forma que a y A son dos variables distintas. u u Para saber las variables que tienes denidas puedes usar el comand who. Estas tambin aparecen e en la ventana workspace. En el siguiente cap tulo se explica cmo acceder a esta ventana y lo o que signica.

2.1.1.

Elementos de Matrices

En el ejemplo anterior los elementos de la matriz eran nmeros enteros, pero en realidad los u elementos de una matriz pueden ser cualquier expersin vlida de MATLAB. Por ejemplo o a >> x=[ -1.3 produce x = -1.3000 1.7321 4.8000 sqrt(3) (1+2+3)*4/5]

MATLAB dispone de un gran nmero de funciones elementales matemticas, incluyendo valor u a absoluto abs, ra cuadrada sqrt, exponencial exp, seno sin, etc. Todas ellas se usan ms o z a menos igual. As para calcular 3 escribir , amos sqrt(3). MATLAB no produce un error si se le pide la ra cuadrada o el logaritmo de un nmero negativo, sino que devuelve el corresponz u diente nmero complejo. Tambin proporciona muchas funciones matemticas avanzadas como u e a las funciones de Bessel o la funcin Gamma. Una lista de todas las funciones elementales con su o uso se puede obtener utilizando la ayuda interactiva:

Matrices y Vectores >> helpwin

12

y haciendo doble click en /matlab/elfun y /matlab/specfun. En el Apndice A se resumen algunas e de la funciones ms importantes de MATLAB. a Tambin hay una serie de constantes predenidas: e pi i j eps realmin realmax inf nan 3.14159265. . . la unidad imaginaria, 1. lo mismo que i. precisin relativa de los nmeros en coma otante, 252 = 2,204e 16. Es decir distancia o u de 1.0 al siguiente nmero ms prximo en coma otante. u a o nmero en coma otante ms pequeo, 21022 . u a n nmero en coma otante ms grande, (2 eps)21023 . u a innito. Se produce al dividir un nmero distinto de cero por cero. u Not-A-Number. Se produce al evaluar expresiones como 0/0 o inf-inf.

2.1.2.

Formatos de Salida

En el ejemplo de ms arriba hemos podido observar que aparentemente MATLAB siempre a responde redondeando los resultados de las operaciones correspondientes a cuatro cifras decimales. En realidad, los resultados puede presentarlos de diversas formas. Para ello se dispone del comando format. 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 ja con 4 decimales(formato por defecto) coma ja con 15 decimales cifras hexadecimales nmeros con dos cifras decimales u notacin cient o ca con 4 decimales notacin cient o ca o decimal, dependiendo del valor notacin cient o ca 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 nmeros a cocientes de enteros; i.e. nmeros u u racionales

format compact format rat

MATLAB aplica un factor de escala general a las matrices cuando los elementos ms grandes o a ms pequeos son superiores o inferiores, respectivamente, a una determinada cantidad (103 y a n 103 ).

Matrices y Vectores

13

Las expresiones se pueden construir con nmeros (reales o complejos) y utilizando los operadores u aritmticos y las reglas de precedencia habituales (en caso de duda siempre se pueden utilizar e parntesis): e + / \ adicin o sustraccin o multiplicacin o divisin por la derecha o divisin por la izquierda o potenciacin o transposicin o

Estos mismos operadores se utilizan con matrices, por eso se incluye la transposicin y la divisin o o por la izquierda. Si A y B son matrices y A es invertible entonces A\B = A1 B y B/A = BA1 . Ambas producen lo mismo cuando son aplicadas a nmeros. As 1/4 y 1 \ 4 producen el mismo u valor numrico: 0,25. De la misma forma A es la transpuesta de A y si a es un nmero a = a. e u 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 De la misma forma B/A es una matriz C tal que C A es a). aproximadamente B. En otras palabras A \ B y B/A son soluciones (nicas si A es invertible) u de las ecuaciones AX = B y XA = B, respectivamente. Hay otras operaciones especiales para matrices: . ./ .\ . multiplicacin trmino a trmino o e e divisin a la derecha o trmino a trmino e e divisin a la izquierda o trmino a trmino e e potenciacin trmino a trmino o e e

Dadas dos matrices A y B no es lo mismo A*B que A.*B, ni A/B que A./B. Los primeros son el producto y la divisin (en el sentido de ms arriba) habituales. Cuando estos operadores o a estn precedidos por un punto, la operacin se realiza elemento a elemento. As a o >> [1 2; 3 4]*[0 1; 2 3] ans = 4 7 8 15 >> [1 2; 3 4].*[0 1; 2 3] ans = 0 2 6 12 Cuando la operacin se hace entre una matriz y un escalar el resultado es el mismo: o

Matrices y Vectores >> 2\[1 2; 3 4] ans = 0.5000 1.0000 1.5000 2.0000 >> 2.\[1 2; 3 4] ans = 0.5000 1.5000 1.0000 2.0000

14

Qu responder MATLAB a la siguiente orden? e a >> 2/[1 2; 3 4] Para una matriz A tampoco es lo mismo A^3 que A.^3. Lo primero es el resultado de multiplicar A por s misma tres veces; slo es aplicable a matrices cuadradas. Lo segundo es la matriz o cuyos elementos son los cubos de los elementos de A; es aplicable a cualquier matriz. En algunos sistemas UNIX puede haber problemas para escribir el signo de potenciacin en MATLAB. o Para evitar el uso de este s mbolo tenemos la siguiente alternativa: A.^3=power(A,3) A^3=mpower(A,3)

2.2.

Manipulacin de vectores y matrices o

Puesto que las unidades bsicas de MATLAB son las matrices, dispone de varias formas de crear a vectores y matrices de forma casi automtica, y de manipular los elementos de una matriz. a El operador dos puntos, : , es uno de los ms importantes. Sirve para generar vectores y a matrices cuyos elementos estn igualmente espaciados. As a >> 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

Matrices y Vectores y = 0 0.7854 1.5708 2.3562 3.1416

15

Tambin son posibles incrementos negativos: e >> z=6:-.5:3 z = 6.0000

5.5000

5.0000

4.5000

4.0000

3.5000

3.0000

El comando linspace se puede utilizar para generar un vector en el que se especica las componentes primera y ultima y el nmero de ellas: u >> k=linspace(-sqrt(3),pi,5) k = -1.7321 -0.5136 0.7048

1.9232

3.1416

El nmero de componentes por defecto es 100. Esto signica que una sentencia del tipo u >> k=linspace(-sqrt(3),pi); asignar a la variable k un vector de 100 componentes igualmente espaciadas entre 3 y a (hemos escrito ; al nal del comando para que el resultado no sea mostrado). Por otra parte, dada una matriz A, el elemento de la la i y la columna j, se denota por A(i,j). As con la matriz A de ms arriba (que utilizaremos a lo largo de esta seccin): , a o >>A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 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 posicin (2, 4) es 8. Si escribimos o >> A(2,4) MATLAB nos devuelve: ans = 8 Se puede modicar el elemento de cualquier posicin sin ms que cambiar su valor. La respuesta o a de MATLAB es toda la matriz con el nuevo valor en dicha posicin. Para seguir manteniendo, o para los siguientes ejemplos, la misma matriz A, primero almacenamos en c el elemento que vamos a cambiar y a continuacin recuperamos la matriz original:: o

Matrices y Vectores >> c=A(2,4),A(2,4)= 3*sqrt(A(1,4))-1/log10(A(3,4)) c = 8 A = 16.0000 3.0000 2.0000 13.0000 5.0000 10.0000 11.0000 9.8900 9.0000 6.0000 7.0000 12.0000 4.0000 15.0000 14.0000 1.0000 >> A(2,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 rdenes: c=A(2,4),A(2,4)= 3*sqrt(A(1,4)) o -1/log10(A(3,4)). Tal y como se ha mencionado ms arriba escribir ; despus de una orden a e produce el efecto de que el resultado no se escribe en la pantalla. En cada l nea de comandos podemos poner cuantas rdenes queramos separadas bien sea por comas (en cuyo caso los reo sultados correspondientes aparecern sucesivamente en la pantalla) o bien por ; para que los a resultados no aparezcan en la pantalla. (Ms abajo hay un ejemplo). a Por otra parte, si pedimos el valor del elemento en la posicin (4, 5), MATLAB nos devuelve un o mensaje de error porque el tamao de A es 4 4: n >> A(4,5) ??? Index exceeds matrix dimensions. Desde la versin 5 de MATLAB se puede usar end para indicar el ultimo elemento de una matriz, o respecto de una dimensin dada. As o : >> a=4:10 a = 4 5 >> a(end) ans = 10 >> A(end,end) ans = 1 >> A(2,end) ans = 15 >> A(end,2) ans = 8

10

Matrices y Vectores

17

No slo se puede extraer cada elemento de una matriz sino cualquier submatriz. Para ello basta o expresar la submatriz deseada en notacin vectorial. As para obtener el subvector de a o , formado por los ultimos 5 primeros elementos escribir amos: >> a(1:5) ans = 4

y el formado por los ultimos 4: >> a(end-3:end) ans = 7 8

10

Para obtener la submatriz formada por los elementos que ocupan las posiciones donde se interceptan las las 1 y 3 y las columnas 3 y 4 escribir amos: >> C=A([1 3],[3 4]) C = 2 13 7 12 Si queremos la submatriz formada por las dos primeras las podemos utilizar el comando dos puntos: >> A([1 2],:) ans = 16 3 5 10

2 11

13 8

O, utilizando el comando end: >> A(end-2:end, end-1:end) ans = 11 8 7 12 14 1 Podemos hacer uso de esta tcnica para generar submatrices correspondientes a las o columnas e igualmente espaciadas. Por ejemplo, si A fuera una matriz 1015, el comando A(2:2:10,1:3:15) nos devolver la submatriz formada por las las pares y las columnas 1,4,7,10 y 13. a Si a una matriz le especicamos un solo sub ndice, MATLAB cuenta los elementos por columnas y nos devuelve el elemento correspondiente:

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 notacin vectorial para los sub o ndices de una matriz puede utilizarse para permutar las o columnas de una matriz. As para obtener una matriz B con las las primera y segunda, y las columnas segunda y cuarta de A permutadas, har amos lo siguiente: >> B=A([2 1 3 4],[1 4 3 2]) B = 5 8 11 10 16 13 2 3 9 12 7 6 4 1 14 15 Y si slo queremos permutar las dos primeras las: o >> B=A([2 1 3 4],:) B =

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 aadirle las y columnas sin ms que especicar el vector con los n a elementos que se quiere aadir. Por ejemplo, si a nuestra matriz A le queremos aadir la la n n [1 3 5 7] har amos lo siguiente: >> 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 tambin podr e amos denir primero el vector la que vamos a aadir y luego aadirlo: n n >> r=1:2:7; C=[A;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 aadir una columna actuar n amos por transposicin (recordemos que r es o 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 ms pequeas nos permite ir creando matrices a n sobre la marcha empezando desde una matriz vac En efecto, la orden >> B=[] nos devuelve a. una matriz sin elementos a la que podemos ir aadindole las o columnas como hemos hecho n e ms arriba: a >> B=[]

Matrices y Vectores B = [] >> c1=1:3:7; c2=2:3:8; c3=3:3:9; B1=[B c1 c2 c3], B2=[B;c1;c2;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 las y/o columnas con ayuda de la matriz vac a. Simplemente igualamos a [] la submatriz que queramos eliminar: >> B2(:,2)=[] B2 = 1 7 2 8 3 9 nos devuelve la submatriz de B2 que se obtiene al suprimir la segunda columna.

2.3.

Matrices a partir de funciones predenidas en MATLAB

Hay un buen nmero de funciones de matrices predenidas en MATLAB. Una relacin de todas u o ellas con la descripcin de su uso la puedes encontar escribiendo helpwin y en la ventana que o aparece haciendo doble click en matlab/elmat. Describimos aqu las funciones para generar las matrices ms elementales: a zeros(m,n) ones(m,n) rand(m,n) randn(m,n) eye(m,n) diag(v,k) Crea una matriz de tamao m n cuyos elementos son todos 0. n Crea una matriz de tamao m n cuyos elementos son todos 1. n Crea una matriz de tamao m n con elementos aleatorios distribu n dos uniformemente entre 0 y 1 Crea una matriz de tamao m n con elementos aleatorios elegidos n con una distribucin normal de media 0 y varianza y desviacin standrad 1 o o Crea una matriz de tamao m n con 1s en la diagonal principal n El argumento v es un vector y el argumento k es opcional pero si se da, debe ser un nmero entero. MATLAB crea una matriz cuadrada de tamao u n n + |k|, con todos lo elementos cero excepto los de la k-sima diagonal e que son los elementos del vector v. 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. Si k > 0 el vector v aparece en la k-sima e

Matrices y Vectores

21

diag(A,k)

supradiagonal y si k < 0 en la k-sima subdiagonal. e El argumento A es una matriz y el agumento k es opcional pero si se da, debe ser un nmero entero. MATLAB produce un vector: la k-esima diagonal u de la matriz A.

Algunos ejemplos: >> Z=zeros(2,4) Z = 0 0 0 0

0 0

0 0

>> F=5*ones(3,3) F = 5 5 5 5 5 5 5 5 5 >> N=10*rand(2,5) N = 9.5013 6.0684 8.9130 4.5647 8.2141 2.3114 4.8598 7.6210 0.1850 4.4470 >> I=2*eye(2,4) I = 2 0 0 0 0 2 0 0 >> G=diag(-3:3) + diag(ones(6,1),1) + diag(-1*ones(6,1),-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),diag(G,1),diag(G,-1) ans = -3 -2 -1 0 1 2

Matrices y Vectores 3 ans = 1 1 1 1 1 1 ans = -1 -1 -1 -1 -1 -1

22

2.4.

Otras formas de generar matrices

Hay otras formas de producir matrices. Comentamos a continuacin cmo generar matrices a o o partir de cheros externos. Estos son cheros almacenados en el disco duro y que han sido producidos bien por MATLAB o bien por nosotros mismos. En cualquier caso, conviene tener un directorio espec co donde almacenar estos y otros posibles cheros. Hablaremos ms exa tensamente sobre este tema y otros relacionados cuando estudiemos el entorno de trabajo de MATLAB. Ahora comentamos slo lo necesario para crear matrices a partir de cheros externos. o Me referir a matlabdir como el directorio donde se guardarn todos los cheros de MATLAB e a creados por nosotros mismos. El nombre real de este directorio para cada cul puede ser diferente. a En primer lugar se debe crear. Para ello conviene comprobar primero en qu directorio del e sistema de archivos nos encontramos. 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 rdenes correspondientes al sistema operativo que se o vern ms adelante. Tambin se pueden consultar con el sistema de ayuda: helpwin y entonces a a e matlab/general. Lo siguiente que tenemos que hacer es posibilitar que MATLAB reconozca el directorio matlabdir. Es decir, que sepa de su existencia para que pueda encontrar los cheros all depositados. Para ello debemos aadirlo al path de MATLAB con el comando addpath. Por ejemplo: addpath n nea deber aparecer la a /ruta completa/matlabdir. Si ahora tecleamos path, en la primera l ruta completa hasta nuestro directorio matlabdir. Analizamos ahora la forma de generar matrices desde cheros externos: Con el comando load. Este comando puede leer cheros externos binarios, producidos por sesiones anteriores de MATLAB, o de texto. Para obtener matrices de cheros de texto externos stos deben estar organizados como una tabla rectangular de nmeros, separados e u

Matrices y Vectores

23

por espacios en blanco, con una la por l nea y con igual nmero de elementos en cada u la. Por ejemplo, con un editor de texto (textedit en picasso o notepad en MSWindows) podemos crear un chero de texto que contenga estas cuatro l neas: 16,0 3,0 2,0 13,0 5,0 10,0 11,0 8,0 9,0 6,0 7,0 12,0 4,0 15,0 14,0 1,0 Guardamos este chero bajo el nombre de magico.dat en el directorio matlabdir. El comando >> load magico.dat lee el chero y asigna a la variable magico la matriz contenida en el chero. >> magico magico = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

Creando un chero M con el contenido de una o ms matrices. Los cheros M son parte a fundamental de MATLAB y los analizaremos posteriormente. Por ahora slo necesitamos o saber que si con nuestro editor creamos un chero de texto que contenga las siguientes 5 las: A = [... 16,0 3,0 2,0 13,0 5,0 10,0 11,0 8,0 9,0 6,0 7,0 12,0 4,0 15,0 14,0 1,0 ]; y salvamos este chero como magico.m, entonces el comando magico en MATLAB lee el chero y crea la variable A que contiene la matriz del chero. Por supuesto, el chero debe estar en el directorio matalbdir.

Cap tulo 3

El Entorno de Trabajo de MATLAB

3.1.

El Espacio de Trabajo

El espacio de trabajo (workspace en ingls) es el rea de memoria accesible desde la l e a nea de comandos de MATLAB. Si estamos trabajando en modo grco hay dos formas de acceder a l: a e 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, adems, el tamao y alguna a n informacin adicional sobre almacenamiento de las variables que se han utilizado. He aqu un o 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 Desktop (versin 7) o View (versiones anteriores a la 7), que est en el u o a 24

El Entorno de Trabajo de MATLAB

25

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

Figura 3.1: Ventana del Espacio de Trabajo. Esta informacin puede ser interesante cuando se estn consumiendo grandes recursos para saber o a 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 n de no sobreescribir alguna que pueda ser importante. Para cerrar la ventana del espacio de trabajo basta seleccionar, de nuevo, Workspace en el men Desktop (o View para versiones anteriores a la 7) o pinchar en el s u 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 ms tarde en el mismo punto en el que se dej (con las mismas variables denidas, a o con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del programa todo el contenido de la memoria se borra automticamente. Tambin en este caso tenemos dos a e 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 File. Esta segunda forma u de hacerlo es muy intuitiva y no requiere comentarios. Los comandos save y load apenas los usaremos en estas prcticas y se puede encontrar todo lo relativo a ellos usando helpwin a

El Entorno de Trabajo de MATLAB matlab/general

26

3.1.2.

El Comando diary

Los comandos save y load crean cheros binarios o ASCII con el estado de la sesin, pero o 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 chero 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 chero filename.txt todo lo que aparece, l nea tras l nea, en la ventana de comandos de MATLAB con posterioridad a la utilizacin del comando. o Esto signica 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 sesin. Ojo! si se o quieren salvar distintas sesiones se deben guardar en archivos con nombres diferentes. Salvo que se especique el path completo en el que se quiere guardar el chero, ste se salva (en Windows) e en el subdirectorio work del directorio principal de MATLAB (es decir, en la subcarpeta work de la carpeta de instalacin de MATLAB) y en un sistema UNIX en el directorio home de cada o 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 chero lename.txt con un editor de texto es necesario que diary est en off porque si no MATLAB e mantiene abierto el chero y no es accesible desde el exterior. No obstante, en la ventana Command History que se puede abrir desde el men Desktop se u guardan las sesiones anteriores (hasta cierto punto) especicadas por el d y la hora en que se a comenzaron.

3.1.3.

L neas de comentarios

Para MATLAB el carcter tanto por ciento ( %) indica comienzo de comentario. Cuando aparece a en una l nea de comandos, el programa supone que todo lo que va desde ese carcter hasta el a n 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 utiles cuando se escriben programas (cheros M) tal y como veremos ms adelante. a

El Entorno de Trabajo de MATLAB

27

3.2.

El Camino de b squeda (SEARCH PATH) de MATLAB u

El search path de MATLAB es una lista de directorios que se puede ver y modicar a partir de la l nea de comandos. El comando path hace que se escriba el search path de MATLAB (el resultado depende de en qu directorio est instalado MATLAB): e a >> 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 cmo MATLAB utiliza el search path supngase que se utiliza la palabra nombre1 o o en un comando. El proceso que sigue MATLAB para tratar de conocer qu es nombre1 es el e siguiente: 1. Comprueba si nombre1 es una variable previamente denida por el usuario. 2. Comprueba si nombre1 es una funcin del usuario (hablaremos ms adelante de las funo a ciones en MATLAB). 3. Comprueba si nombre1 es una funcin interna o intr o nseca de MATLAB. 4. Comprueba si hay un chero llamado nombre1.mex o nombre1.m en el directorio actual (de los cheros M hablaremos ms adelante, los cheros .mex tienen un signicado especial a para MATLAB del que no hablaremos aqu ). 5. Comprueba si hay cheros llamados nombre1.mex o nombre1.m en los directorios incluidos en el search path de MATLAB. Estos pasos se realizan en el orden indicado. En cuanto se encuentra lo que se est buscando se a detiene la bsqueda y se utiliza el chero que se ha encontrado. Si no se encuentra en todo el u proceso MATLAB produce un error: >> nombre1 ??? Undefined function or variable nombre1.

El Entorno de Trabajo de MATLAB

28

El Path Browser es el programa que ayuda a denir la lista de directorios donde MATLAB debe buscar los cheros de comandos y las funciones, tanto del sistema como de usuario. Para abrir el Path Browser se elige Set Path en el men File. Una vez seleccionado se abre otra nueva u ventana en la que se muestra la lista de directorios en la que MATLAB buscar (MATLAB a search path) (ver Figura 3.2. Seleccionando Add Folder se pueden aadir nuevos directorios. n

Figura 3.2: Ventana con el path de MATLAB. Se puede especicar, adems que se incorporen al search path todos los subdirectorios del a directorio seleccionado. Tambin se pueden quitar directorios con la opcin Remove (es mejor e o que ni lo intentes salvo que ests seguro/a de lo que haces). El nuevo directorio se puede aadir al e n comienzo o nal de la lista. Tal y como hemos mencionado, el orden de la lista es muy importante porque reeja el orden de la bsqueda: si una funcin est en dos directorios, se utilizar la que u o a a primero se encuentre. Las operaciones realizadas se pueden salvar utilizando Save. En MATLAB bajo Windows el listado de directorios salvado se hace permanente, de forma que la prxima vez o que se empieza una sesin de MATLAB las carpetas aadidas aparecern en el path browser. o n a Este no es el caso en sistemas UNIX porque la posibilidad de escribir de forma permanente en el directorio donde est instalado MATLAB es exclusiva del administrador del sistema. Para a aadir permanentemente unos directorios al search path en UNIX hay que hacerlo a travs n e del chero startup.m del que hablaremos enseguida. Tambin se puede incluir un directorio de bsqueda desde la l e u nea de comandos de MATLAB. La forma de hacerlo depende del sistema operativo sobre el que est instalado MATLAB. Lo e mejor es utilizar el comando helpwin y consultar en matlab/general lo relativo a los comandos path, addpath y rmpath. El chero responsable de los parmetros con los que se inicia cada sesin de MATLAB es matlaa o brc.m que se encuentra en el subdirectorio toolbox/local de la instalacin de MATLAB (en o sistemas UNIX). En sistemas multiusuario, como picasso, slo puede modicarlo el administrao dor. En Windows puede hacerlo cualquiera, pero es altamente recomendable que no lo hagas. Ahora bien, cada usuario puede escribir un chero para que cada vez que se empiece una sesin o de MATLAB, ste se inicie con los parmetros que cada cual desee. Este chero se debe llamar e a startup.m y debe estar, en sistemas UNIX, en el subdirectorio home/izaballa/matlab del correspondiente ususario. Bajo Windows este chero se debe colocar en la subcarpeta work de la carpeta donde est instalado MATLAB (posiblemente C:\matlabr14 o algo as Por ejemplo, a ). un chero startup.m que contenga las siguientes l neas:

El Entorno de Trabajo de MATLAB cd \$HOME/matlab format compact addpath /usr/alu/julen/matlab/practicas -end !texedit disp(Kaixo)

29

har lo siguiente cuando el usuario correspondiente (en este caso posiblemente Julen) empiece a una sesin de MATLAB en picasso: o Cambiar al directorio matlab, donde posiblemente se encuentren los trabajos de MATLAB a de Julen. Utilizar el formato compact para exponer las salidas producidas por MATLAB (este a formato, como ya se dijo en el Cap tulo 2, suprime algunos saltos de l nea y presenta las salidas ms compactas). a Aadir el directorio /usr/alu/julen/matlab al nal del search path. n a Abrir el editor de openxt y a Escibir Kaixo como primera l a nea en la ventana de comandos de MATLAB. Bajo Windows el chero que producir algo parecido ser a a cd c:\matlabr14\programas format compact addpath c:\matlabr14\programas -end edit disp(Kaixo) De forma anloga, al abandonar la ejecucin de MATLAB con el comando quit se ejecuta a o automticamente el chero finish.m, siempre que se encuentre en alguno de los directorios del a search path. Este chero se puede utilizar por ejemplo para guardar el espacio de trabajo de MATLAB (recuerda el comando save).

3.3.

Manipulacin de cheros o

Los comandos dir, type, delete y cd implementan un conjunto de comandos del sistema operativo que corre por debajo de MATLAB. 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

El Entorno de Trabajo de MATLAB

30

Como en todos los sistemas operativos se pueden utilizar los caracteres comod pathnames y n, nombres de los discos o directorios en la forma habitual. As los comandos >> cd c:\matlab >> delete *.dos producir an, bajo MS-DOS o Windows, un cambio al directorio matlab que se encuentra en el disco C (en caso de que tal directorio exista; si no, produce un mensaje de error). Y a continuacin se borrar todos los cheros cuya extensin es dos en dicho directorio. o an o En un sistema UNIX los discos habitualmente no se designan con las letras a, c, etc..., sino que todos los directorios cuelgan del directorio ra /. Por lo tanto, para cambiar al directiorio z: /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 directorio nos encontramos trabajando. e

3.3.1.

Ejecucin de Programas Externos o

El cierre de exclamacin, !, indica que el resto de la l o nea es un comando del sistema operativo. Esto puede ser util 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 ejemplo, en UNIX de Solaris (que es el sistema operativo de picasso) >> !textedit parabola.m &

es una orden para abrir el editor de cheros Text Editor que trae por defecto el sistema Open windows de Solaris y cargar en l el chero parabola.m. El s e mbolo & le pide al sistema operativo que lo ejecute en background; es decir, que deje la ventana de comandos de MATLAB libre para seguir tecleando nuevas rdenes. o

Cap tulo 4

Programacin en MATLAB o

4.1.

Empezando a programar en MATLAB

Lo interesante de MATLAB no es que realiza operaciones individuales sobre matrices y vectores, sino que es un verdadero lenguaje de programacin con cantidad de funciones primitivas que o facilitan mucho la tarea de programar. Un ejemplo muy simple es el siguiente: supongamos que queremos dibujar la parbola x = t2 a en el intervalo [2, 2]. El comando para dibujar curvas en el plano es plot. Este comando admite muchos argumentos incluyendo la posibilidad de dibujar varias curvas al mismo tiempo. Nosotros slo lo usaremos de la forma ms sencilla, pero si quieres saber todo lo que puede o a hacer, puedes usar el comando helpwin graph2d plot. Por ahora la unica informacin o pertinente es que plot(t,x) dibuja el vector t versus el vector x. Esto quiere decir que si el vector t es t = [t1 t2 t3 . . .] y x = [x1 x2 x3 . . .] entonces plot(t,x) dibuja una poligonal que une los puntos (t1 , x1 ), (t2 , x2 ), t3 , x3 ), etc. Si estos puntos estn sucientemente prximos el a o efecto visual es una curva. As pues, para dibujar la curva x = t2 tenemos que dar tres pasos: denir el vector t, denir el vector x = t2 , y ordenar a MATLAB que dibuje; i.e. teclear plot(t,x). En este caso tan simple, se pueden dar las tres rdenes en la misma l o nea de comando (recuerda las dicultades que hay para usar en picasso y que este operador se puede sustituir por power): 31

Programacin en MATLAB o >> t=-2:0.1:2; x=t.^2; plot(t,x) o preferiblemente >> t=linspace(-2,2);x=t.^2; plot(t,x)

32

Recuerda tambin que linspace(a,b) forma un vector de 100 componentes igualmente espae ciadas entre a y b. Si estos puntos no estn muy alejados entre s cada componente del vector a , est muy prxima a la siguiente. a o Otra posibilidad es escribir cada orden en una l nea: >> t=linspace(-2,2); >> x=t.^2; >> plot(t,x) Y hay una tercera posibilidad que es la ms interesante: escribir el conjunto de rdenes en un a o chero, mediante un editor. Ya se ha dicho ms arriba cmo hacerlo tanto en picasso (mediante a o !texedit) como en Windows (con edit) (ver Figura4.1 Esto es lo que se llama un script, un

Figura 4.1: Ventanas de comando y de edicin para escribir programas de MATLAB o programa (en este caso pequeo) con cdigo ejecutable por MATLAB. La traduccin de script n o o en castellano es algo as como guin pero seguiremos utilizando el original en ingls. o e Una vez escrito, se salvar con el nombre que se desee, por ejemplo parabola.m (la extensin a o .m es obligatoria, es la forma en que MATLAB sabe que es un chero con cdigo ejecutable). o Para ejecutar las rdenes contenidas en este chero basta escribir su nombre en la ventana de o comandos; en este caso parabola: >> parabola El resultado es una nueva ventana, como la de la gura 4.2, que contiene la grca de la parbola. a a Si a = (a1 , . . . , an ) es un vector de n componentes plot(a) dibuja una poligonal uniendo los

Programacin en MATLAB o

33

Figura 4.2: Ventana grca con la parbola producida por el script parabola.m a a puntos (1, a1 ), (2, a2 ), . . . . Si lo que se quiere es sealar con el s n mbolo los puntos (x1 , y1 ), (x2 , y2 ),. . . , (xn , yn ) pero sin unirlos a travs de una poligonal basta crear los vectores x e y y e usar el comando plot(x,y,*).

4.1.1.

Operadores relacionales y lgicos o

Para programar en MATLAB se pueden usar bucles de la forma for . . . end, o bifurcaciones de la forma while . . . end, if. . . end y switch . . . case Su sintaxis es como en cualquier otro lenguaje de programacin. La idea es que cierta accin se realice dependiendo de si una condicin o o o es verdadera o no. La verdad o falsedad de estas condiciones se suele evaluar comparando dos expresiones. Para ello existen operadores relacionales y lgicos. MATLAB dispone de los o 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 eso hace que tengan un signicado especial. Por ejemplo, dada una matriz A la comparacin abs(A)<eps o genera una matriz de 0s y 1s con el mismo tamao de A. El elemento (i, j) de dicha matriz es n 1 si |Aij | < eps, siendo eps el epsilon de la mquina (=2.204e-16). a >> A=[-1 2 0; 0 -1 -3; 1 -1 0] A = -1 2 0 0 -1 -3 1 -1 0

Programacin en MATLAB o >> 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 0s y 1s; 0 si la correspondiente columna es cero y 1 en caso contrario. Es decir, any responde true si algn elemento no es cero y false si u todos son cero. >> any(B) ans = 1

Y la sentencia any(any(abs(A)<eps)) produce un 0 (i.e. false) si todos los elementos de any(B) son cero y 1 (true) en caso contrario. >> any(any(B)) ans = 1 As pues, la sentencia any(any(abs(A)<eps)) se puede utilizar como una condicin. Ser ver o a dadera si y slo si algn elemento de A es, en mdulo, ms pequeo que eps. En caso contrario o u o a n es falsa. Hay un operador lgico similar: all. Responde true si todos los elementos del vector son distintos o de cero; en caso contrario, responde false. Con la matriz A de ms arriba: a >> all(A) ans = 0

En efecto, la unica columna de A con todos sus elementos distintos de cero es la segunda. 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 programacin, si una comparacin o o se cumple el resultado es 1 (true), mientras que si no se cumple es 0 (false). Rec procamente, cualquier valor distinto de cero es considerado como true y el cero equivale a false. Cuando los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamao, n la comparacin se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del o mismo tamao, que recoge el resultado de cada comparacin entre elementos. Por ejemplo: n o

Programacin en MATLAB o >> A=[1 2;0 3]; B=[4 2;1 5]; >> 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, se puede usar la expresin isequal(A,B) o >> isequal(A,B) ans = 0

35

La expresin isequal(A,B) es equivalente a all(all(A==B)). Por otra parte, isequal es una de o las muchas funciones lgicas que empiezan por is. He aqu una seleccin de ellas. Para obtener o o 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 nitos de un vector verdadero si el vector es de elementos en coma otante detecta los elementos innitos de un vector verdadero si el vector es de nmeros enteros u detecta los elementos que son NaN en un vector veradero si el vector es de nmeros (no de caracteres) u detecta los nmeros primos en un vector u verdadero si todos los nmeros del vector son reales u verdadero si se trata de un vector

Algunos ejemplos adicionales con la matriz A de ms arriba a >> A A = 1 2 0 3 >> isfinite(A)

Programacin en MATLAB o ans = 1 1 1 1 >> isnumeric(A) ans = 1 >> isreal(A) ans = 1 >> isvector(A) ans = 0

36

Adems una condicin puede constar de una o ms operaciones relacionales. Estas normalmente a o a estn concatenadas con expresiones lgicas cuya verdad o falsedad sigue las leyes de la lgica a o o formal. Los operadores lgicos de MATLAB son los siguientes: o & | ~ xor any all Algunos ejemplos >> x=[-1 1 1]; y=[ 1 2 -3]; >> x>0, 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,y>0) ans = 1 0 1 >> any(x>0) ans = 1 >> all(x>0) y o negacin lgica o o 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

Programacin en MATLAB o ans = 0 >>

37

Para terminar con los operadores lgicos estudiamos otro comando muy util: find. Este comando o devuelve los ndices (los lugares que ocupan) los elementos no nulos de un vector. Por ejemplo >> x=[-3 1 0 -inf 0] x = -3 1 0 -Inf >> f=find(x) f = 1 2 4

Una primera aplicacin es extraer de x los elementos no nulos: o >> x(f) ans = -3

-Inf

Podemos extraer los elementos nitos > 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

Cuando find se aplica a una matriz se hace mirndola como un vector; es decir al vector A(:) a que se obtiene -recordemos- poniendo las columnas de A una debajo de otra. Por ejemplo >> A=[ 4 2 16; 12 4 3], B=[12 3 1; 10 -1 7] A = 4 2 16 12 4 3 B = 12 3 1 10 -1 7 >> C=A<B

Programacin en MATLAB o 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,j]=find(A) que devuelve vectores i y j con los ndices de las las y columnas de A distintos de cero, respectivamente. As >> [i,j]=find(A<B) i = 1 1 2 j = 1 2 3 nos dice que en las posiciones (1, 1), (1, 2) y (2, 3) estn los elementos de A que son menores que a los de B.

4.1.2.

Bifurcaciones y Bucles

Tal y como hemos dicho ms arriba las bifurcaciones de MATLAB son while . . . end, if. . . end a y switch . . . case. Este ultimo tipo de bifurcaciones no lo vamos a comentar; se puede consultar la ayuda de MATLAB para saber como funciona. Tambin se dispone de bucles for . . . end. e La forma ms simple de una bifurcacin del tipo if. . . end es la siguiente a o if condicion sentencias end

Programacin en MATLAB o

39

Existe tambin la bifurcacin mltiple, en la que pueden concatenarse tantas condiciones como e o u se desee, y que tiene la forma: if condicion1 bloque1 elseif condicion2 bloque2 elseif condicion3 bloque3 else % opcin por defecto para cuando no se cumplan las condiciones 1,2,3 o bloque4 end donde la opcin por defecto else puede ser omitida: si no est presente no se hace nada en caso o a de que no se cumpla ninguna de las condiciones que se han chequeado. Exponemos un ejemplo a continuacin. Recordemos que los operadores lgicos se pueden como o binar con los relacionales para poder comprobar el cumplimiento de condiciones mltiples. u Ejemplo 4.1.1 .- El siguiente programa comprueba si un nmero es positivo, si no lo es produce u un mensaje de error con el comando disp que sirve para escribir mensajes en la pantalla (ms a adelante se explica con detalle la accin de este comando). A continuacin comprueba si, siendo o o positivo, es par . La orden rem(p,q) calcula el resto de la divisin eucl o dea de p por q. Si el nmero es positivo lo divide por 2 y en caso contrario, le suma 1 y el resultado lo divide por 2. u if n<0 | n==0 disp(Introduce un nmero positivo); u elseif rem(n,2)==0 a=n/2; else a=(n+1)/2 end Naturalmente la condicin n<0 | n==0 podr sustituirse por la ms compacta n<=0. Se ha o a a escrito de la forma expuesta para hacer uso de una condicin con dos relaciones y un operador o lgico. o

SENTENCIA WHILE.- La estructura del bucle while es muy similar a la de cualquier otro
lenguaje de programacin. Su sintaxis es la siguiente: o while condicion sentencias end

Programacin en MATLAB o

40

donde condicin puede ser una expresin vectorial o matricial. Las sentencias se siguen ejecuo o tando mientras haya elementos distintos de cero en condicion; es decir, mientras haya algn u o algunos elementos true. El bucle se termina cuando todos los elementos de condicion son false (es decir, cero). Ejemplo 4.1.2 .- En el siguiente ejemplo se ejecutan una serie de operaciones sobre un cierto nmero n mientras ste se mantenga mayor que 1. Concretamente, si n es par se divide por 2 y u e si es impar se multiplica por 3 y se le suma 1: while n>1 if rem(n,2)==0 n=n/2 else n=3*n+1 end; end; Crees que este proceso tiene n cualquiera que sea el valor de n? (Conjetura de Collatz, misterio de Siracusa, problema de Kakutani, algoritmo de Hasse o problema de Ulam). Finalmente, los bucles del tipo for . . . end tienen la siguiente sintaxis: for variable= expresin o sentencias end Habitualmente la expresin es un vector de la forma i:s:j y las sentencias se ejecutan sucesio vamente con la variable igual a cada elemento de la expresin. Por ejemplo, para sumar los 25 o 1 primeros trminos de la serie n : e >> n=0; >> for i=1:25 n=n+1/i; end >> n n = 3.8160 Otra forma de denir una expresin es usando notacin vectorial: o o >> for x=[pi/6 pi/4 pi/3] disp([x, sin(x)]) end 0.5236 0.5000 0.7854 0.7071 1.0472 0.8660

Programacin en MATLAB o

41

Y por supuesto, se pueden encajar mltiples bucles for. . . end unos dentro de otros. El siguiente u i cdigo proporciona una matriz simtrica 5 5 con el elemento j en la posicin (i, j) para i j: o e o >> n=5; A=eye(n); >> for j=2:n for i=1:j-1 A(i,j)=i/j; A(j,i)=i/j; end end >> A A = 1.0000 0.5000 0.5000 1.0000 0.3333 0.6667 0.2500 0.5000 0.2000 0.4000

0.3333 0.6667 1.0000 0.7500 0.6000

0.2500 0.5000 0.7500 1.0000 0.8000

0.2000 0.4000 0.6000 0.8000 1.0000

4.1.3.

Presentacin de los resultados o

Si en MATLAB hacemos >> v=1:5 la respuesta es la exposicin del resultado o v = 1 2 3 4 5

A veces, sin embargo se quiere disponer de un formato de salida un poco ms estructurado. Por a ejemplo se quiere mostrar una tabla de los valores de sen(2t) para 10 valores de t igualmente espaciados en el intervalo [0,1].Con el comando disp lo podemos hacer fcilmente. Escribimos a un chero con el siguiente contenido t=linspace(0,1,10); y=sin(2*pi*t); disp( t sen(2*pi*t) ) disp(--------------------------) disp([t y]) Lo salvamos con el nombre, por ejemplo, seno2pit.m en nuestro directorio de trabajo de MATLAB, y lo ejecutamos en la ventana de comandos:

Programacin en MATLAB o >> seno2pit t sen(2*pi*t) -------------------------0 0 0.1111 0.6428 0.2222 0.9848 0.3333 0.8660 0.4444 0.3420 0.5556 -0.3420 0.6667 -0.8660 0.7778 -0.9848 0.8889 -0.6428 1.0000 -0.0000

42

El comando disp lo que hace es mostrar en pantalla el contenido de un vector (o matriz). Lo que sucede es que hay vectores de nmeros como u >> v=[1 2 3] v = 1 2

y hay vectores de letras o caracteres o strings como >> v=ke kosa v = ke kosa As una frase entre acentos es un vector de caracteres. Por eso en el programa de ms arriba , a 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 ms especiales se puede usar el comando sprintf. Su uso en a MATLAB es muy parecido al del comando homnimo en lenguaje C. o

4.2.

Scripts y Funciones

El nombre que se utiliza para los programas en MATLAB es el de M-les o cheros M. Hay dos tipos de cheros M: los scripts y las funciones. Son el equivalente a programas, funciones, subrutinas o procedimientos de otros lenguajes de programacin como FORTRAN, C, Pascal o o Java. Los cheros M son, por lo tanto, secuencias de comandos de MATLAB que se almacenan en cheros y que tienen algn propsito concreto. Un chero M puede hacer referencia a otros u o cheros M e incluso a s mismos (es decir, est permitida la autorecursividad). Los cheros M a son especialmente apropiados para

Programacin en MATLAB o

43

experimentar con algoritmos escribindoles en un chero sobre el que poder hacer correce ciones en vez de reescribir cada vez que se quiere experimentar una larga lista de comandos, guardar el resultado de un experimento numrico, como una lista de comandos y variables e que producen un determinado resultado numrico o grco, e a construir programas que pueden ser utilizados con posterioridad varias veces, o, simplemente, intercambiar con algn amigo o colega cheros de mutuo inters. u e En la pgina web de Mathworks mencionada en la Introduccin pueden encontrarse numerosos a o cheros M escritos con distintos propsitos, desde puramente computacionales a didcticos o o a por puro placer. Hay dos tipos de cheros M: Sripts o cheros de comandos. Por lo general no tienen argumentos de entrada ni de salida y operan con las variables del espacio de trabajo. Es decir, recogen variables ya existentes e interactan con ellas para producir resultados numricos o grcos y quiz nuevas variables. u e a a Funciones. Deben contener una primera l nea en la que aparece la palabra function. Se diferencian de los scripts en que aceptan entradas y devuelven salidas. Las variables internas son locales a la funcin (salvo que sean declaradas como global) o Ya hemos visto en la seccin anterior cmo hacer cheros M de tipo script. Simplemente son o o cheros que ejecutan sucesivamente varios comandos de MATLAB con un objetivo espec co y siempre que se ejecutan producen el mismo resultado. Volveremos sobre ellos ms adelante a para recalcar su diferencia con el otro tipo de cheros M, y que son los ms importantes: a las funciones. Las funciones en MATLAB guardan una gran similitud con las funciones en lenguaje C o Pascal. Lo que exponemos a continuacin est inspirado en el primer cap o a tulo del libro Introduction to Scientic Computation de Charles F. van Loan. Sabemos de clculo elemental que la serie de Taylor a
n

Tn (x) =
k=0

xk k!

aproxima la funcin exponencial, ex , cerca de x = 0. Nuestro objetivo es estudiar esta aproximao cin. Es decir, cun cerca est Tn (x) de ex para los diversos valores de n? Tericamente cuanto o a a o mayor es n ms cerca est Tn (x) de ex . Para qu valores de n nuestro ordenador no distingue a a e entre Tn (x) y ex ?. Para ello damos por bueno el clculo que hace MATLAB de la exponencial y a creamos una funcin de MATLAB que nos devuelva el valor de Tn (x) en funcin de x y n. Esta o o funcin ser la siguiente: o a function y= miexp1(x,n) % %Precondiciones: acepta dos valores x=nmero real y u

Programacin en MATLAB o % n=entero positivo. % %Postcondiciones: devuelve en y la aproximacion de % orden n de la serie de Taylor de exp(x). y=1; t=1; for k=1:n t=x*t/k; y=y+t; end

44

Al igual que con los scripts debemos escribir estas l neas en un chero de texto y salvarlo con el nombre miexp1.m en un directorio (o carpeta) que est en el path de MATLAB; por ejemplo, e en nuestro directorio de trabajo. Debe observarse que ahora el nombre del chero slo puede ser o el que hemos dado a la funcin. Debemos tener cuidado, adems, con que el nombre de la funcin o a o no coincida con un nombre ya existente en el path de MATLAB. Como las distribuciones de MATLAB incorporan innidad de funciones debemos elegir nombres signicativos para nosotros pero no demasiado standard; por ejemplo, podemos empezar los nombres de nuestras funciones con el prejo mi. . . o escoger un nombre en euskera, etc. Al escribir una funcin en MATLAB debes seguir unas pocas, simples e importantes reglas: o El chero debe empezar con la palabra function y tiene la siguiente estructura function variables de salida= Nombre de la funcin(variables de entrada) o % % Comentarios que denen completamente las variables que deben pasarse a la funcin o % (variables de entrada) y el resultado que produce la funcin (variables de salida) o % cuerpo de la funcin: comanos de MATLAB o En algn sitio del cuerpo de la funcin se debe pasar a la variable de salida el valor deseado. u o Los comentarios que denen completamente la funcin deben hacerse inmediatamente o despus de la denicin de la funcin. Esto es importante porque cuando en la ventana e o o de comandos se escriba help nombredelafuncion, MATLAB responder escribiendo los a comentarios que ah se escriban. Opcionalmente, y es recomendable hacerlo, se pueden escribir comentarios en otros lugares del cuerpo de la funcin para claricar el objetivo de o uno o varios de los comandos que se utilizan. Estos comentarios deben ir siempre precedidos del s mbolo %. Las variables de entrada y salida son parmetros formales (es decir, letras). Cuando se a llama a la funcin para que realice la accin que se desea, deben ser sustitu o o dos por parmetros reales (es decir, nmeros, vectores, matrices,...). Por ejemplo, la funcin miexp1 a u o debe ser llamada con dos nmeros concretos. x=miexp1(0.1,3) devolver en la variable x u a el valor de la aproximacin de Taylor de tercer orden en 0,1. o

Programacin en MATLAB o

45

Las variables que se denan en el interior de la funcin (en nuestro caso t y k) son variables o locales. Puede haber otras con el mismo nombre en el espacio de trabajo de MATLAB sin ningn problema. u El chero que contiene la funcin debe estar en el path de MATLAB. o Lo importante de las funciones de MATLAB, sean nativas o creadas por nosotros mismos, es que pueden ser llamadas por cualquier otro programa de MATLAB, bien sea un script u otra funcin. Por ejemplo, si queremos las grcas para cuatro valores de n = 4, 8, 16, 20 del error o a x por T (x) en el intervalo [-1,1], podemos crear un script relativo que se comete al aproximar e n como el que sigue m=100; x=linspace(-1,1,m); y=[]; exacto=exp(x); k=0; for n=[4 8 16 20] for i=1:m y(i)=miexp1(x(i),n); end errorrel=abs(exacto-y)./exacto; k=k+1; subplot(2,2,k) plot(x,errorrel) title(sprintf(n=%2.0f,n)) end Si escribimos estas l neas en un chero .m (por ejemplo, smiexp1.m) tenemos un script que al ejecutarlo en MATLAB >> smiexp1 nos produce cuatro grcas (gura 4.3), cada una correspondiente a un valor de n, con el a error relativo de la aproximacin. Obsrvese el efecto del comando subplot(n,m,p). Crea una o e matriz de nm guras y asigna a la p-sima el siguiente comando plot. As p=1 corresponde a e la gura en al posicin (1, 1), p=2 a la gura en la posicin (1, 2), etc. Todos los dems comandos o o a en el script ya son conocidos. En el script hemos creado el vector x=linspace(-1,1,100) de 100 componentes y se lo hemos pasado a la funcin exponencial obteniendo otro vector de 100 componentes que hemos llamado o exacto. Sin embargo, para calcular Tn (x) hemos tenido que hacerlo componente a componente. Ello es debido a que la funcin miexp1 slo acepta escalares y devuelve escalares. MATLAB o o est pensado para trabajar con vectores, y como veremos enseguida lo hace ms rpido. Conviene a a a que modiquemos nuestra funcin para que admita vectores y produzca vectores. La modicacin o o es muy sencilla: hay que redenir y y t para que sean vectores del mismo tamao que x y cuyas n componentes sean todas igual a 1. Adems hay que usar el producto componente a componente a entre x y t.

Programacin en MATLAB o
n= 4 0.02 7 6 0.015 5 4 0.01 3 0.005 2 1 0 1 0.5 0 0.5 1 0 1 0.5 0 0.5 1
6

46
n= 8

x 10

x 10

15

n=16 7 6

x 10

16

n=20

5 4

4 3 2 2 1 0 1 0.5 0 0.5 1 0 1 0.5 0 0.5 1

Figura 4.3: Error relativo al aproximar por Tn (x) function y= miexp2(x,n) % %Precondiciones: acepta dos valores x=vector de nmeros reales y u % n=entero positivo. % %Postcondiciones: devuelve en el vector y la aproximacion de % orden n de la serie de Taylor de exp(x). y=ones(size(x)); t=ones(size(x)); for k=1:n t=x.*t/k; y=y+t; end Esto simplica mucho el correspondiente script para hallar el error relativo: x=linspace(-1,1,100); exacto=exp(x); errorrel=abs(exacto-miexp2(x,n))./exacto El resto del script ser igual que en el caso anterior. a As pues las variables de entrada y de salida pueden ser cualquier tipo de variable soportada por MATLAB. No slo eso, pueden aparecer mezcladas. Por ejemplo las variables de entrada de la o funcin miexp2 son un vector y un nmero. Tambin las variables de salida pueden ser varias o u e

Programacin en MATLAB o

47

y de distintos tipos. Por ejemplo, la siguiente funcin calcula el tiempo que tarda MATLAB en o crear (no escribir en pantalla, sino poner en la memoria del ordenador) m matrices aleatorias de tamao n n y nos proporciona la ultima matriz creada. Es un ejemplo un poco articial pero n sirve para ilustrar las ideas que estamos comentando: la salida es un vector formado por dos variables, la primera es un nmero y la segunda una matriz. u function [t,A]=tgmaf(n,m) % Precond: dos enteros positivos n y m, % Postcond: el tiempo,t, que tarda MATLAB en generar % m matrices aleatorias nxn y la ltima matriz generada, A u %ponemos en marcha el reloj t0=clock; for j=1:m-1 rand(n); end A=rand(n); %Paramos el reloj t1=clock; % etime cuenta el tiempo transcurrido t=etime(t1,t0); Utilizamos aqu dos nuevos comandos (en realidad como todos los comandos de MATLAB, se trata de funciones del propio sistema, bien sean precompiladas o denidas a partir de cheros 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. 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. 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 tamao con componentes n en el intervalo [-1,1]: disp(length(x) miexp1(x) miexp2(x)) disp( tiempo tiempo ) disp(------------------------------------------------) for k=1000:1000:10000 x=linspace(-1,1,k); ti=clock; y=[]; for i=1:k y(i)=miexp1(x(i),17); end tf=clock; t1=etime(tf,ti); ti=clock;

Programacin en MATLAB o y=miexp2(x,17); tf=clock; t2=etime(tf,ti); disp(sprintf(%6.0f %16.2f %16.4f ,k ,t1 ,t2)) end

48

El resultado de este script depende de cada ordenador porque la rapidez con la que MATLAB realiza las operaciones no slo depende del cdigo que se emplee sino, sobre todo, de las caraco o ter sticas del propio ordenador (procesador, memoria, bus,. . . ). La salida debe parecerse a una tabla con la siguiente forma length(x) miexp1(x) miexp2(x) tiempo tiempo -----------------------------------------------1000 0.11 0.0006 2000 0.20 0.0007 3000 0.25 0.0010 4000 0.35 0.0013 5000 0.43 0.0016 6000 0.52 0.0020 7000 0.61 0.0023 8000 0.71 0.0025 9000 0.81 0.0029 10000 0.93 0.0033 Una ultima observacin. Se podr querer tener tablas comparativas para diversos valores de n o a y de la longitud de x. Para conseguirlo bastar convertir el script anterior en una funcin: a o function fetmiexp(k,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 aproximacin de exp(x) mediante o % la aproximacin de orden n de la serie de Taylor o % para un vector x de k componentes. 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,1,j); ti=clock;

Programacin en MATLAB o y=[]; for i=1:j y(i)=miexp1(x(i),17); end tf=clock; t1=etime(tf,ti); ti=clock; y=miexp2(x,17); tf=clock; t2=etime(tf,ti); disp(sprintf(%6.0f %16.2f %16.4f ,j ,t1 ,t2)) end

49

Si en MATLAB hacemos >> fetmiexp(1000:1000:10000,17) obtenemos la misma tabla de ms arriba. La ventaja es que ahora podemos probar con diversos a valores de k y n sin tener que modicar el script cada vez. Debe notarse que no hay variable de salida. Esta funcin produce un resultado: una tabla con o la comparativa de tiempos pero no almacena esta salida en ninguna variable. El rec proco, que una funcin tenga variables de salida pero no de entrada, tambin es posible pero muy poco o e frecuente.

Cap tulo 5

Nmeros complejos y polinomio u

MATLAB trabaja indistintamente con nmeros reales o complejos, pero hay algunas propieu dades espec cas de estos ultimos que hay que tener en cuenta. Polinomios son vectores cuyas componentes son los coecientes del polinomio. Sumar polinomios es como sumar vectores, pero tambin se puede multiplicar y dividir polinomios. MATLAB tiene una serie de funciones que e ayudan a trabajar con polinomios cmodamente. o

5.1.

N meros Complejos u

El comando abs(a) devuelve el valor absoluto o el mdulo del nmero a segn que ste sea real o u u e o complejo. De la misma forma abs(A) devuelve una matriz cuyos elementos son los mdulos o o los valores absolutos de los elementos de A segn que stos sean nmeros complejos o reales. u e u Adems, como ya se dijo en el Cap a tulo 2, MATLAB no produce un error si se le pide la ra z cuadrada o el logaritmo de un nmero negativo sino que devuelve el correspondiente nmero u u complejo. La unidad imaginaria es una constante predenida en MATLAB. Las letras que la designan son bien i, bien j. Hay que tener cuidado con la trasposicin. Si A es una matriz de nmeros complejos entonces o u A es la transpuesta conjugada de A (lo que nosotros solemos designar como A ). Si queremos la transpuesta de A debemos usar A. . Por ejemplo >> A=[1-i 2+i; 3+i i] A = 1.0000 - 1.0000i 2.0000 + 1.0000i 50

Nmeros complejos y polinomio u 3.0000 + 1.0000i >> Atc=A Atc = 1.0000 + 1.0000i 2.0000 - 1.0000i >> At=A. At = 1.0000 - 1.0000i 2.0000 + 1.0000i 3.0000 + 1.0000i 0 + 1.0000i 3.0000 - 1.0000i 0 - 1.0000i 0 + 1.0000i

51

Finalmente, el comando plot cuando se emplea con nmeros complejos tiene un signicau do especial: Si y es un vector de nmeros complejos la sentencia plot(y) es equivalente a u plot(real(y),imag(y)).

5.2.

Clculo con Polinomios a

Tal y como hemos dicho Para MATLAB un polinomio es el vector de sus coecientes. Por ejemplo, el polinomio: p(x) = x4 8x2 + 6x 10 se puede representar mediante el vector >>[1, 0, -8, 6, -10]. MATLAB puede realizar diversas operaciones sobre l, como por ejemplo evaluarlo para un e determinado valor de x (funcin polyval()) y calcular las ra o ces (funcin roots()): o >> pol=[1 0 -8 6 -10] pol = 1 0 -8 6 -10

>> roots(pol) ans = -3.2800 >> polyval(pol,1) 2.6748 0.3026 + 1.0238i 0.3026 - 1.0238i

Nmeros complejos y polinomio u ans = -11

52

Hay una funcin similar a polyval pero para matrices: la funcin plyvalm. Dada una matriz o o A y polinomio p() = pol, la funcin polyvalm(pol,A) devuelve la matriz p(A). As con el o polinomio pol=[1 0 -8 6 -10] denido ms arriba: a >> A=ceil(rand(3,3)*5-7) A = -2 -5 -3 -4 -2 -3 -4 -6 -2

>> polyvalm(pol,A) ans = 3130 3818 2568 2896 3526 2370 3688 4476 2998

Para calcular el producto de polinomios MATLAB utiliza una funcin llamada conv() (de o producto de convolucin). En el siguiente ejemplo se va a ver cmo se multiplica un polinomio o o de segundo grado por otro de tercer grado: >> pol1=[1 -2 4] pol1 = 1

-2

>> pol2=[1 0 3 -4] pol2 = 1

-4

>> pol3=conv(pol1,pol2) pol3 = 1

-2

-10

20

-16

Para dividir polinomios existe otra funcin llamada deconv(). Las funciones orientadas al clculo o a con polinomios son las siguientes: poly(A) polinomio caracter stico de la matriz A

Nmeros complejos y polinomio u poly(v) roots(pol) polyval(pol,x) polyvalm(pol,A) conv(p1,p2) [c,r]=deconv(p,q) residue(p1,p2) polyder(pol) polyder(p1,p2) polyfit(x,y,n) polinomio cuyas ra ces son los elementos de v ra ces del polinomio pol evaluacin del polinomio pol para el valor de x. Si x es un o vector, pol se evala para cada elemento de x u evaluacin del polinomio pol de la matriz A o producto de convolucin de dos polinomios p1 y p2 o divisin del polinomio p por el polinomio q. En c se devuelve o el cociente y en r el resto de la divisin o 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 coecientes de un polinomio p(x) de grado n que se ajusta a los datos (xi , yi ), en el sentido de los m nimos cuadrados.

53

Existen tambin algunas funciones orientadas a la interpolacin polinomial que no vamos a e o considerar aqu Si quieres saber algo sobre ellas utiliza la ayuda. .

Apndice A e

Funciones incorporadas en MATLAB


En este apndice se relacionan algunas (muchas) funciones nativas de MATLAB. Algunas de e ellas estn incorporadas al ncleo de MATLAB y otras son cheros M. Nosotros no vamos a u a distinguir entre ambos tipos de funciones. Las hemos clasicado de acuerdo a su propsito o general pero algunas de ellas podr estar en varios grupos. an 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 ms de las que se relacionan. a Es decir, se explica su objetivo principal pero pueden hacer ms cosas de las que se mencionan. a Por ejemplo, si v = [1 2 3 4] entonces >> v=[1 2 3 4]; >> diag(v) ans = 1 0 0 2 0 0 0 0

0 0 3 0

0 0 0 4

Es decir, diag(v) devuelve la matriz diagonal cuya diagonal es el vector v. Pero >> diag(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. Tanto para una explicacin ms detallada de cada una de las funciones como de toda su poteno a cialidad se recomienda utilizar el sistema de ayuda. Conociendo el nombre de la funcin lo ms o a 54

Funciones incorporadas en MATLAB rpido es utilizar el comando help funcin. a o

55

A.1.

Funciones que act an sobre escalares u

Hay funciones matemticas elementales que operan de modo escalar. Estas funciones, que coma prenden las funciones matemticas trascendentales y otras funciones bsicas, actan sobre cada a a u elemento de la matriz como si se tratase de un escalar. Se aplican de la misma forma a escalares, vectores y matrices. Algunas de las funciones de este grupo son las que se relacionan a continuacin. Se debe entender que si el argumento o argumentos sobre los que acta la funcin o u o son matrices o vectores entonces dicha funcin acta trmino a trmino. As si x es una matriz, o u e e , sin(x) devuelve una matriz cuyos elementos son los senos de los elementos de la matriz x. TRIGONOMETRICAS sin(x) cos(x) tan(x) cot(x) sec(x) csc(x) asin(x) acos(x) atan(x) atan2(x,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 ngulo entre /2 y +/2) a arco tangente (devuelve un ngulo entre y +); se le a pasan 2 argumentos, proporcionales al seno y al coseno arco cotangente arco secante arco cosecante seno hiperblico o coseno hiperblico o tangente hiperblica o cotangente hiperblica o secante hiperblica o cosecante hiperblica o arco seno hiperblico o arco coseno hiperblico o arco tangente hiperblica o arco cotangente hiperblica o arco secante hiperblica o arco cosecante hiperblica o

Funciones incorporadas en MATLAB EXPONENCIALES exp(x) log(x) log10(x) log2(x) sqrt(x) realpow(x) reallog(x) realsqrt(x) funcin exponencial o logaritmo natural (neperiano) logaritmo decimal logaritmo en base 2 ra cuadrada z potencia que da error si x no es real logaritmo neperiano de nmeros reales u ra cuadrada de nmeros mayores o iguales a cero z u

56

COMPLEJAS abs(x) angle(x) complex(x,y) conj(x) real(x) imag(x) isreal(x) valor absoluto o mdulo si x es un nmero complejo o u argumento del nmero complejo x u devuelve el nmero complejo x + iy u 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, 0 si x = 0 y 1 si x > 0. Aplicada a un nmero complejo, devuelve un vector unitario en la misma u direccin que x o resto de la divisin de x entre y. Los argumentos son nmeros o u reales (no necesariamente enteros) similar a rem (Ver diferencias con el sistema de ayuda) redondeo hacia el entero ms prximo a o redondea hacia el entero ms prximo a 0 a o valor entero ms prximo hacia a o valor entero ms prximo hacia + a o mximo comn divisor a u m nimo comn mltiplo u u

rem(x,y) mod(x,y) round(x) fix(x) floor(x) ceil(x) gcd(x,y) lcm(x,y)

Funciones incorporadas en MATLAB

57

Hay otras funciones escalares que pueden ser consultadas a travs de la ayuda en el apartado e matlab/specfun.

A.2.

Funciones que act an sobre vectores u

Las siguientes funciones actan sobre vectores. Aqu se presentan slo algunas funciones. Una u o relacin completa de todas las funciones soportadas por MATLAB se puede obtener consultando o la ayuda: matlab/datafun. length(x) [vM,pM]=max(x) [vm, pm]=min(x) sum(x) cumsum(x) devuelve la longitud del vector x mximo elemento de un vector. Devuelve el valor mximo a a vM y la posicin que ocupa pM en el vector o m nimo elemento de un vector. Devuelve el valor m nimo y la posicin que ocupa o suma de los elementos de un vector devuelve el vector suma acumulativa de los elementos 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, el tercero es la suma de los tres primeros vectores de x, y as sucesivamente valor medio de los elementos de un vector desviacin t o 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) ordenacin de menor a mayor de los elementos de un vector o x. Devuelve el vector ordenado y, 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,i]=sort(x)

En realidad estas funciones se pueden aplicar tambin a matrices , pero en ese caso se aplican e por separado a cada columna de la matriz, dando como valor de retorno un vector resultado de aplicar la funcin a cada columna de la matriz considerada como vector. Si estas funciones se o quieren aplicar a las las de la matriz basta aplicar dichas funciones a la matriz traspuesta.

A.3.

Funciones que act an sobre matrices u

Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen algunas de las funciones ms utiles y potentes de MATLAB. No estn todas las que soporta a a MATLAB. La relacin completa se puede consultar a travs de la ayuda: matlab/elmat y o e matlab/matfun principalmente. Se clasicarn en varios subgrupos: a

Funciones incorporadas en MATLAB FUNCIONES MATRICIALES ELEMENTALES A A. calcula la traspuesta (conjugada) de la matriz A calcula la traspuesta (sin conjugar) de la matriz A. Si la matriz A es de nmeros reales A. y A producen el mismo u resultado. devuelve la traza de la matriz cuadrada A devuelve el nmero de las m y de columnas n de una matriz u rectangular A devuelve el nmero de elementos de la matriz A. u

58

trace(A) [m,n] = size(A) numel(A)

FUNCIONES MATRICIALES ESPECIALES power(A,b) power(b,A) exp(A) sprt(A) log(A) mpower(A,n) expm(A) sqrtm(A) logm(A) Si A = [aij ] devuelve la matriz cuyos elementos son ab . ij devuelve la matriz cuyos elementos son baij . devuelve una matriz cuyos elementos son exp(aij ) = eaij . devuelve una matriz cuyos elementos son aij . devuelve una matriz cuyos elementos son ln(aij ). devuelve la matriz A . . . A n veces, si n es un entero. devuelve exponencial de A; i.e. eA . la devuelve A; i.e. una matriz que multiplicada por s misma da A. devuelve la matriz ln(A); i.e. una matriz B tal que eB = A.

Los comandos A.^n y A^ n son equivalentes a las funciones power(A,n) y powerm(A,n) respectivamente. FUNCIONES PARA MANIPULAR MATRICES cat(Dim,A,B) concatena las matrices A y B, i.e. las pone una junto a la otra. Si Dim=1 B debajo de A y si Dim=2 pone B detrs de a A cambia el tamao de A a una matriz m n 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 ultima pasa a ser la primera, la anteltima pasa a ser la segunda, etc.. u

reshape(A,m,n) diag blkdiag(A,B) tril(A) triu(A) fliplr(A)

Funciones incorporadas en MATLAB flipud(A) rot90(A) [I,J,V]= find(A) lo mismo que fliplr pero por las rota A 90 grados encuentra las las y columnas donde estn los elementos no a nulos de A y los almacena en I y J, respectivamente. En V pone el vector de elementos no nulos. devuelve el ultimo 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, si el argumento es una matriz.Hay variantes para otras normas estimacin de la norma 2 de la matriz A. Se usa cuando el o tamao de A es muy grande y se consume mucho tiempo en n calcular norm(A) rango de la matriz A determinante de A traza de A las columnas de N forman una base del ncleo de A u las columnas de Q forman una base ortonormal del espacio imagen de A ngulo entre los subespacios generados por las columnas de a AyB

r=rank(A) d=det(A) t=trace(A) N=null(A) Q=orth(A) subspace1(A,B)

FUNCIONES DE FACTORIZACION DE MATRICES Y DE SISTEMAS LINEALES DE RESOLUCION /y\ B = inv(A) c = cond(A) U = chol(A) [L,U] = lu(A) solucin de sistemas lineales (ver la ayuda help slash) o inversa de A nmero de condicin de A en la norma 2 . Hay una variante u o para otras normas descomposicin de Cholesky de una matriz denida positiva o descomposicin LU (con pivotamiento) de la matriz A. Es o decir, P A = LU , P una matriz de permutacin, L triangular o inferior con 1s en la diagonal y U una matriz triangular superior. descomposicin QR de A o Determinante de la matriz cuadrada A reduccin a forma de escalera por las de una matriz reco tangular A descomposicin de Cholesky de una matriz denida positiva o

[Q,R]=qr(A) d = det(A) E = rref(A) U = chol(A)

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,S,V]=svd(A) P=poly(X) devuelve el vector E con los valores propios de A descomposicin de A en valores singulares: A = U SV o si X es una matriz cuadrada, P es un vector cuyas componentes son los coecientes del polinomio caracter stico de X. Si X es un vector, 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. La forma de Scur compleja es la habitual: una matriz triangular superior con los valores propios (posiblemente complejos) en la diagonal. La forma real de Schur se reere 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. el rec proco del anterior. Convierte la forma diagonal compleja de Schur de una matriz real a la forma real.

H=hess(A) [U,S]=schur(A) [U,S]=rsf2csf(U,R)

[U,S]=cdf2rdf(U,R)

Apndice B e

Consejos para el uso de Matlab en picasso


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

Consejos para el uso de Matlab en picasso

62

Aparecern entonces una o ms las como las siguientes (quiz ms las y con ms informacin): a a a a a o 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 quin es el dueo del proceso. Slo debes preocuparte por los e n o procesos que estn a tu nombre; sobre los dems, afortunadamente, no puedes hacer nada. a a La ultima columna es el nombre del proceso. Siempre te aparecer el proceso fgrep matlab. Si a slo aparece ste (bajo tu nombre), puedes salir de la sesin tranquilamente, no dejas ningn o e o u proceso de matlab corriendo. Si aparecen ms debes jarte en la tercera columna: aparece un a nmero. Es el nmero de identicacin del proceso. Debes escribir entonces u u o kill nmero_identificacin_proceso u o donde nmero_identificacin_proceso es el nmero de identicacin del proceso (en el ejemu o u o plo de ms arriba 3361). Debes hacerlo con todos los procesos salvo con fgrep matlab. Una vez a hecho, conviene que vuelvas escribir ps -ef|fgrep matlab para comprobar que, en efecto, ya no hay procesos de Matlab bajo tu nombre.

Apndice C e

Env de cheros o
En este apndicese explica cmo enviar cheros desde la sala de ordenadores de la Facultad a e o una cuenta de picasso. Tambin se informa sobre un modo de enviar los cheros de prcticas e a por correo electrnico a la cuenta del profesor. o Las operaciones de conexin y transferencia de cheros a picasso se har SIEMPRE mediante o a una shell segura por razones, como su nombre indica, de seguridad. No se debe usar ni telnet, ni ftp. En el aula de ordenadores se dispone de una shell segura de libre distribucin llamada SSH. o

C.1.

Preparativos en picasso

Lo que viene a continuacin debes hacerlo en tu cuenta de picasso. Lo puedes hacer directamente o en picasso o desde la sala de ordenadores en la que se hacen las prcticas. En el primer caso a debes entrar en tu cuenta y seguir los pasos que se indican ms abajo. Para hacerlo desde la sala a de ordenadores, primero te debes conectar a picasso. Para ello pincha sobre el icono de SSH que aparece en el escritorio

Pincha en Quick Connect. Escribe la direccin IP de picasso: 158.227.5.31 y tu nombre de o cuenta. En el puerto (port) aparecer 22, si no es as lo escribes. A continuacin puede pedira o te conrmacin; simplemente pincha en YES. Finalmente te pide tu password: escr o belo y da entrada. Ya ests en picasso. Sigue las siguientes instrucciones (si no lo has hecho ya): a 1. Crea un subdirectorio llamado matlab en el directorio home de picasso. Tu directorio home es algo as como /home/alu/tu nombre de cuenta/. El comando UNIX para crear 63

Env de cheros o directorios es mkdir.

64

2. Crea un subdirectorio llamado practicas( no se admiten las tildes) en el directorio matlab. 3. Abre el Text Editor (con el comando textedit) y crea un chero startup.m que contenga, por lo menos, 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. Una vez hecho esto sal de SSH.

C.2.

Transferencia de cheros a picasso

Para transferir cheros a picasso desde el aula de ordenadores sigue las siguientes instrucciones: 1. Pincha en el icono de SSH File Transfer:

2. Pincha en Quick Connect y escribe la direccin de picasso: 158.227.5.31, tu nombre de o cuenta y el puerto 22, si fuera necesario. 3. Conrma la conexin si as te lo pide. o 4. Escribe tu password, cuando te lo pida. 5. Una vez conectado a picasso, pincha en matlab para cambiar a este directorio y luego en practicas. 6. En el men Actions elige Upload. Te saldr una ventana con las carpetas del ordenador. u a Elige los cheros que quieres enviar a picasso pinchando en ellos. Una vez terminada la transferencia, sal de SSH File Transfer.

Env de cheros o

65

C.3.

Env de los cheros por correo electrnico o o

De nuevo esto se puede hacer desde picasso utilizando Netscape, por ejemplo, u otro cliente de correo electrnico al que cada cual pueda estar acostumbrado. Explicar aqu como hacerlo con o e el cliente de correo pine y en modo consola. Esto signica que si no estamos f sicamente delante de una terminal de picasso o, si estando delante de picasso, no tenemos habilitado el uso del ratn en pine (que ser lo normal), el ratn no sirve para nada; lo tenemos que hacer todo con o a o el teclado. Se supone que ya tenemos abierta una sesin en picasso, bien directamente o bien a travs o e de SSH desde el aula de ordenadores. Para ello sigue las instrucciones del apartado relativo a preparativos. Una vez conectados a picasso se debe hacer lo siguiente: 1. En una ventana de comandos o en la ventana de SSH escribe pine. Si es la primera vez que lo haces aparecer una pantalla de bienvenida. Sal de ella tecleando E. TODAS a LAS POSIBLES ACCIONES QUE SE PUEDEN HACER DESDE CADA PANTALLA APARECEN, CON LA CORRESPONDIENTE TECLA A PULSAR, EN LA PARTE INFERIOR DE LA VENTANA DE PINE. 2. Salvo por la posible pantalla de bienvenida, la primera pantalla de pine es siempre el men principal. Explicar slo cmo enviar cheros. El resto de las posibilidades que las u e o o explore cada cual, si quiere. 3. Con la tecla C elige componer un mensaje. Aparecer una pantalla parecida a la siguiente a (quiz con otro color de fondo): a

4. En To: escribe izaballa@picasso.lc.ehu.es y pulsa entrada o muvete con las teclas e del cursor hacia abajo hasta Attchmnt:. 5. Con la tecla de control apretada pulsa la tecla J. En la parte inferior de la ventana aparecer File to attach:. Si conoces el camino completo hasta el chero que quieres a enviar, escr belo ahora. Si no, observa que ms abajo hay un men. Con la tecla de control a u apretada pulsa la tecla T. Esto te llevar a una nueva pantalla con el contenido de tu a directorio home.

Env de cheros o

66

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

También podría gustarte