63
Pr ´ acticas de An ´ alisis Matricial Aplicado y Ampliaci ´ on de M ´ etodos Num ´ ericos con MATLAB Ion Zaballa

Guia para usar matlab

Embed Size (px)

DESCRIPTION

como usar matlab

Citation preview

Page 1: Guia para usar matlab

Practicas de AnalisisMatricial Aplicado y

Ampliacion de Metodos

Numericos con MATLAB

Ion Zaballa

Page 2: Guia para usar matlab

Indice general

1. Lo Basico 4

1.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2. Comienzo y Fin de una sesion de MATLAB . . . . . . . . . . . . . . . . . . . . . 5

1.3. Sistema de Ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.4. Edicion en la Lınea de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2. Matrices y Vectores 9

2.1. Generacion de matrices explıcitamente . . . . . . . . . . . . . . . . . . . . . . . . 9

2.1.1. Elementos de Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1.2. Formatos de Salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2. Manipulacion de vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.3. Matrices a partir de funciones predefinidas en MATLAB . . . . . . . . . . . . . . 20

2.4. Otras formas de generar matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3. El Entorno de Trabajo de MATLAB 24

3.1. El Espacio de Trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.1.1. Comandos save y load . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.1.2. El Comando diary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.1.3. Lıneas de comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.2. El Camino de busqueda (SEARCH PATH) de MATLAB . . . . . . . . . . . . . . 27

3.3. Manipulacion de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.3.1. Ejecucion de Programas Externos . . . . . . . . . . . . . . . . . . . . . . 30

2

Page 3: Guia para usar matlab

3

4. Programacion en MATLAB 31

4.1. Empezando a programar en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . 31

4.1.1. Operadores relacionales y logicos . . . . . . . . . . . . . . . . . . . . . . . 33

4.1.2. Bifurcaciones y Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.1.3. Presentacion de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.2. Scripts y Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

5. Numeros complejos y polinomio 50

5.1. Numeros Complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.2. Calculo con Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

A. Funciones incorporadas en MATLAB 54

A.1. Funciones que actuan sobre escalares . . . . . . . . . . . . . . . . . . . . . . . . . 55

A.2. Funciones que actuan sobre vectores . . . . . . . . . . . . . . . . . . . . . . . . . 57

A.3. Funciones que actuan sobre matrices . . . . . . . . . . . . . . . . . . . . . . . . . 57

B. Consejos para el uso de Matlab en picasso 61

B.1. Transferencia de ficheros a picasso . . . . . . . . . . . . . . . . . . . . . . . . . . 61

B.2. Primer uso de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Page 4: Guia para usar matlab

Capıtulo 1

Lo Basico

1.1. Introduccion

Este documento pretende ser una guıa basica para introducirse de forma personal en el usode MATLAB y en relacion con las asignaturas Analisis Matricial Aplicado y Ampliacion deMetodos Numericos. Por lo tanto, aquı solo se cubriran aquellos aspectos de MATLAB quetienen relacion con la materia discutida en dichas asignaturas. En otros documentos, que seentregaran en clase, se plantearan ejercicios en base al contenido de esta guıa y que deben serresueltos personalmente. Si se quiere disponer de una buena y completa guıa de MATLAB, mirecomendacion es el libro MATLAB Guide de D. J. Higham y N. J. Higham, editado por SIAM.

Aunque el origen de MATLAB estuvo ıntimamente ligado a la manipulacion y computacion dey con matrices, durante los ultimos anos ha evolucionado de forma que hoy se puede considerarcomo un software de proposito general para todas las ramas de la matematica y la ingenierıadesde el punto de vista numerico y computacional. Tambien es posible el calculo simbolico conMATLAB siempre que se disponga del toolbox apropiado; en este caso el Symbolic toolbox. Exis-ten muchos otros toolboxes que, sobre la base del nucleo de MATLAB, proporcionan funcionesespecıficas para el calculo numerico de ciertas partes concretas de la matematica, la ingenierıay otras ciencias. Si se quiere informacion sobre los productos relacionados con MATLAB puedevisitarse la pagina web de la empresa que lo desarrolla: www.mathworks.com.

Trabajando con MATLAB se debe tener muy claro que las unidades basicas son matrices (unescalar es, por lo tanto, una matriz 1 × 1), y que por lo tanto todas las operaciones se refierena matrices.

Se puede ejecutar MATLAB sobre cualquier sistema operativo. Se presupone que las practicas serealizaran en la sala de informatica del Departamento de Matematica Aplicada y EIO o en una

4

Page 5: Guia para usar matlab

Lo Basico 5

de las aulas de ordenadores de la Facultad de Ciencias. En el primer caso, la sala esta compuestade una serie de terminales graficos conectados a un servidor de SUN Microsystems dotado delsistema operativo UNIX Solaris y cuyo nombre en internet es picasso.lc.ehu.es. En lo sucesivohablaremos de picasso para referirnos a el. En el segundo caso se trata de un aula de ordenadorespersonales con sistema operativo MSWindows (en alguna de sus versiones).

A partir de la version 6 los interfaces graficos para los sistemas basados en MSWindows y UNIXson muy parecidos, ası que hay muy pocas diferencias en el entorno de trabajo de MATLABpara ambos sistemas operativos. Ademas, las ultimas versiones de MATLAB (desde Release14–MATLAB 7) corrigen algunas deficiencias de edicion con el teclado en castellano (comola ubicacion del sımbolo [ o el acento circunflejo ^) que tenıan las versiones anteriores para lossistemas UNIX. Esto significa que las explicaciones que damos en estas notas son, en su mayorıa,de aplicacion para MATLAB bajo ambos sistemas.

1.2. Comienzo y Fin de una sesion de MATLAB

Una sesion de MATLAB se comienza de forma diferente segun la plataforma sobre la que loejecutemos. En un PC o Mac basta hacer doble “click” con el boton izquierdo del raton sobreel icono de MATLAB. En picasso podemos ejecutar MATLAB en modo consola o utilizando uninterfaz grafico. En cualquier caso, se debe abrir primero una sesion X:

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 grafico, que es mas sencillo, se debe escribirmatlab y pulsar la tecla de entrada.

Trabajando en picasso en modo grafico, MATLAB puede consumir muchos recursos del sistema;principalmente si hay muchos usuarios conectados y dependiendo de la calidad de los terminalesgraficos. Si este fuera el caso (que se nota por una excesiva ralentizacion del sistema) es reco-mendable trabajar en modo consola. En este modo hay una serie de reglas que se recomiendautilizar y que se exponen en el Apendice B.

Trabajando en modo grafico, bien sea bajo UNIX o MSWindows, una vez ejecutadas las accionesmencionadas, aparecera el logotipo de MATLAB y a continuacion una ventana parecida la que semuestra en la Figura 1.1 (la figura mostrada corresponde al release 14. En las nuevas versiones laventana es diferente, pero todavıa guarda un cierto parecido). Si es la primera vez que se ejecutaMATLAB, la ventana principal puede estar compuesta de otras varias, por ejemplo LaunchPad, Command History y Command Window. De momento solo nos interesa la ultima de ellasque es la ventana de comandos de MATLAB. Por ello, aunque no es estrictamente necesario,cerramos las demas con un click del raton en el sımbolo de cada ventana. En realidad hayotras ventanas ocultas que se pueden ir cerrando sucesivamente hasta que no quede mas que laventana Command Window. Todas estas ventanas tienen, de momento, un interes secundario y

Page 6: Guia para usar matlab

Lo Basico 6

Figura 1.1: Ventana inicial de MATLAB.

siempre se pueden volver a abrir seleccionandolas con el raton en el menu view de la ventanaprincipal.

En la ventana de comandos de MATLAB aparece el sımbolo >> (este es el “prompt” deMATLAB) y el cursor parpadeando. El programa esta preparado para recibir ordenes.

Para finalizar la sesion en cualquier sistema basta escribir el comando quit. Alternativamentese puede elegir Exit MATLAB en el menu File del menu principal.

Cuando hablamos de usar un comando (por ejemplo quit), nos referimos a escribir detras del“prompt” de MATLAB la palabra correspondiente (en este caso quit) y pulsar la tecla deentrada.

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 funcion o comando. Empe-zando por lo ultimo, si se quiere saber, por ejemplo, lo que es y hace el comando lu se teclea enla ventana de comandos help lu o helpwin lu. MATLAB responde, en la propia ventana decomandos (en el primer caso) y en una ventana aparte en formato mas bonito (en el segundo),explicando todo lo relativo a dicho comando.

Lo anterior implica que se sabe lo que se busca. Hay niveles mas generales de ayuda. Por ejemplo,tecleando helpwin aparece una relacion de las carpetas de MATLAB que contienen ayuda y unabreve descripcion del contenido de cada carpeta. Pinchando en cada una de ellas se obtiene unlistado con los comandos o funciones que hay en dicha carpeta. Al pinchar, de nuevo, en cadauno de ellos se obtiene una ayuda exhaustiva de lo que hace cada funcion.

Los dos niveles de ayuda anteriores (help funcion y helpwin) estan disponibles tanto en modografico como en modo consola. Si se trabaja en modo grafico hay, ademas, una tercera posibilidadde ayuda mas general. Pinchando en Help en el menu principal de MATLAB y seleccionandoProduct Help aparecera una nueva ventana como la de la Figura 1.2 con toda la ayuda de

Page 7: Guia para usar matlab

Lo Basico 7

MATLAB. En la parte izquierda aparece un menu que se puede desplegar pinchando en el

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 apropiadocomo en un navegador de internet.

1.4. Edicion en la Lınea de Comandos

Si se comete algun error cuando se esta introduciendo un comando de MATLAB, no es necesariovolver a reescribir todo de nuevo. Las teclas de flechas o la combinacion de la tecla ctrl y otrapueden ayudarte:

↑ ctrl-p Reescribe la lınea anterior↓ ctrl-n Reescribe la lınea siguiente← ctrl-b Mueve el cursor un caracter hacia atras→ ctrl-f Mueve el cursor un caracter hacia adelantectrl-→ ctrl-r Mueve el cursor una palabra a la derechactrl-← ctrl-l Mueve el cursor una palabra a la izquierdaInicio ctrl-a Mueve el cursor al comienzo de la lıneaFin ctrl-e Mueve el cursor al final de la lıneaEsc ctrl-u Borra la lıneaSupr ctrl-d Borra el caracter sobre el cursorBackspace ctrl-h Borra el caracter que esta delante del cursor

ctrl-k Borra todo desde el cursor hasta el fin de la lınea

No es necesario poner el cursor al final de la lınea de comandos para que MATLAB reconozcala lınea entera, se puede dar entrada estando el cursor en cualquier punto de dicha lınea. Estosuele suceder cuando se ha observado un error al escribir y se mueve el cursor hacia atras paracorregir el fallo.

Si se va a volver a utilizar un comando ya usado anteriormente (o parte de el), basta teclearunos pocos caracteres de dicho comando y entonces usar la tecla ↑. MATLAB recordara el ultimo

Page 8: Guia para usar matlab

Lo Basico 8

comando que comenzaba con esos caracteres. Sucesivas pulsaciones de ↑ producen la aparicionde los anteriores comandos que empiezan por las letras o sımbolos escritos.

Tambien se puede utilizar el clasico sistema de copiar y pegar para producir ordenes en la lıneade comandos.

Page 9: Guia para usar matlab

Capıtulo 2

Matrices y Vectores

Vectores y matrices son para MATLAB la misma cosa. Se pueden introducir matrices enMATLAB de varias formas:

Introduciendo una lista explıcita de elementos.

Generando matrices con funciones predefinidas en MATLAB.

Cargando matrices desde un fichero de datos externo.

Creando matrices con funciones definidas por el usuario/a a traves de ficheros M.

En este capıtulo analizaremos cada una de estas formas de generar matrices y vectores.

2.1. Generacion de matrices explıcitamente

La forma mas sencilla de introducir matrices es escribiendo explıcitamente los elementos de lamatriz. Las otras formas de generar matrices las iremos viendo posteriormente. Para obteneruna matriz escribiendo sus elementos solo hay que tener en cuenta unas pocas reglas:

Los elementos de la matriz hay que introducirlos fila a fila.

Los elementos de cada fila deben estar separados por comas o espacios en blanco.

Para indicar el final de una fila se debe escribir ;.

La lista de todos los elementos debe estar encerrada entre corchetes, [ ].

9

Page 10: Guia para usar matlab

Matrices y Vectores 10

Debe observarse que el numero de elementos en cada fila debe ser el mismo; en caso contrario,MATLAB producirıa un mensaje de error. Por ejemplo para introduir la matriz

A =

16 3 2 135 10 11 89 6 7 124 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 13

5 10 11 8

9 6 7 12

4 15 14 1

A veces el numero de elementos en cada fila es muy grande y es preferible introducir una fila encada lınea, lo unico que hay que hacer es terminar la lınea con tres puntos: . . . y teclear retorno.Por ejemplo

>> A=[16 3 2 13; ...

5 10 11 8;...

9 6 7 12;...

4 15 14 1 ]

produce la misma matriz.

De cualquiera de las formas la matriz introducida queda asignada a la variable A. Debe observarseque con MATLAB no hay que declarar las variables. Se podrıa haber introducido la matriz sinasignarsela de forma especıfica 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 13

5 10 11 8

9 6 7 12

4 15 14 1

Page 11: Guia para usar matlab

Matrices y Vectores 11

Aunque nosotros no hemos asignado la matriz a ninguna variable, MATLAB se la asigna a lavariable ans, que es una variable predefinida en el sistema. Esta variable es como las demas.Dado que A y ans son dos variables a las que les hemos asignado el mismo valor, el resultado demultiplicar A por sı misma debe ser el mismo que el de multiplicar ans por sı misma:

>> A*A

ans =

341 285 261 269

261 301 309 285

285 309 301 261

269 261 285 341

>> ans*ans

ans =

341 285 261 269

261 301 309 285

285 309 301 261

269 261 285 341

MATLAB distingue entre mayusculas y minusculas de forma que a y A son dos variables distintas.Para saber las variables que tienes definidas puedes usar el comand who. Estas tambien aparecenen la ventana workspace. En el siguiente capıtulo se explica como acceder a esta ventana y loque significa.

2.1.1. Elementos de Matrices

En el ejemplo anterior los elementos de la matriz eran numeros enteros, pero en realidad loselementos de una matriz pueden ser cualquier expersion valida de MATLAB. Por ejemplo

>> x=[ -1.3 sqrt(3) (1+2+3)*4/5]

produce

x =

-1.3000 1.7321 4.8000

MATLAB dispone de un gran numero de funciones elementales matematicas, incluyendo valorabsoluto abs, raız cuadrada sqrt, exponencial exp, seno sin, etc. Todas ellas se usan mas omenos igual. Ası, para calcular

√3 escribirıamos sqrt(3). MATLAB no produce un error si se

le pide la raız cuadrada o el logaritmo de un numero negativo, sino que devuelve el correspon-diente numero complejo. Tambien proporciona muchas funciones matematicas avanzadas comolas funciones de Bessel o la funcion Gamma. Una lista de todas las funciones elementales con suuso se puede obtener utilizando la ayuda interactiva:

Page 12: Guia para usar matlab

Matrices y Vectores 12

>> helpwin

y haciendo doble click en /matlab/elfun y /matlab/specfun. En el Apendice A se resumen algunasde la funciones mas importantes de MATLAB.

Tambien hay una serie de constantes predefinidas:

pi 3.14159265. . .i la unidad imaginaria,

√−1.

j lo mismo que i.eps precision relativa de los numeros en coma flotante, 2−52 = 2,204e− 16. Es decir distancia

de 1.0 al siguiente numero mas proximo en coma flotante.realmin numero en coma flotante mas pequeno, 2−1022.realmax numero en coma flotante mas grande, (2− eps)21023.inf infinito. Se produce al dividir un numero distinto de cero por cero.nan “Not-A-Number”. Se produce al evaluar expresiones como 0/0 o inf-inf.

2.1.2. Formatos de Salida

En el ejemplo de mas arriba hemos podido observar que aparentemente MATLAB siempre res-ponde 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 co-mando format. Estos son los posible formatos

format short coma fija con 4 decimales(formato por defecto)format long coma fija con 15 decimalesformat hex cifras hexadecimalesformat bank numeros con dos cifras decimalesformat short e notacion cientıfica con 4 decimalesformat short g notacion cientıfica o decimal, dependiendo del valorformat long e notacion cientıfica con 15 decimalesformat loose intercala algunas lıneas en blanco en las salida para facilitar

la lectura (por defecto)format compact elimina las lıneas en blanco del fomat loose

format rat aproxima los numeros a cocientes de enteros; i.e. numerosracionales

MATLAB aplica un factor de escala general a las matrices cuando los elementos mas grandes omas pequenos son superiores o inferiores, respectivamente, a una determinada cantidad (103 y10−3).

Page 13: Guia para usar matlab

Matrices y Vectores 13

Las expresiones se pueden construir con numeros (reales o complejos) y utilizando los operadoresaritmeticos y las reglas de precedencia habituales (en caso de duda siempre se pueden utilizarparentesis):

+ adicion− sustraccion∗ multiplicacion/ division por la derecha\ division por la izquierdaˆ potenciacion’ transposicion

Estos mismos operadores se utilizan con matrices, por eso se incluye la transposicion y la divisionpor la izquierda. Si A y B son matrices y A es invertible entonces A\B = A−1B y B/A = BA−1.Ambas producen lo mismo cuando son aplicadas a numeros. Ası 1/4 y 1 \ 4 producen el mismovalor numerico: 0,25. De la misma forma A′ es la transpuesta de A y si a es un numero a′ = a.

Si A no es invertible A \ B es una matriz C tal que A ∗ C es aproximadamente B (en ciertosentido que estudiaremos en teorıa). De la misma forma B/A es una matriz C tal que C ∗A esaproximadamente B. En otras palabras A \ B y B/A son soluciones (unicas si A es invertible)de las ecuaciones AX = B y XA = B, respectivamente.

Hay otras operaciones especiales para matrices:

.∗ multiplicacion termino a termino

./ division a la derechatermino a termino

.\ division a la izquierdatermino a termino

.ˆ potenciacion termino a termino

Dadas dos matrices A y B no es lo mismo A*B que A.*B, ni A/B que A./B. Los primeros sonel producto y la “division” (en el sentido de mas arriba) habituales. Cuando estos operadoresestan precedidos por un punto, la operacion se realiza elemento a elemento. Ası

>> [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 operacion se hace entre una matriz y un escalar el resultado es el mismo:

Page 14: Guia para usar matlab

Matrices y Vectores 14

>> 2\[1 2; 3 4]

ans =

0.5000 1.0000

1.5000 2.0000

>> 2.\[1 2; 3 4]

ans =

0.5000 1.0000

1.5000 2.0000

¿Que respondera MATLAB a la siguiente orden?

>> 2/[1 2; 3 4]

Para una matriz A tampoco es lo mismo A^3 que A.^3. Lo primero es el resultado de multiplicarA por sı misma tres veces; solo es aplicable a matrices cuadradas. Lo segundo es la matrizcuyos elementos son los cubos de los elementos de A; es aplicable a cualquier matriz. En algunossistemas UNIX puede haber problemas para escribir el signo de potenciacion ˆ en MATLAB.Para evitar el uso de este sımbolo tenemos la siguiente alternativa:

A.^3=power(A,3) A^3=mpower(A,3)

2.2. Manipulacion de vectores y matrices

Puesto que las unidades basicas de MATLAB son las matrices, dispone de varias formas de crearvectores y matrices de forma casi automatica, y de manipular los elementos de una matriz.

El operador dos puntos, : , es uno de los mas importantes. Sirve para generar vectores ymatrices cuyos elementos estan igualmente espaciados. Ası

>> x=1:5

produce un vector cuyas componentes van de 1 a 5 en incrementos de 1:

x =

1 2 3 4 5

Mientras que

>> y=0:pi/4:pi

proporciona un vector entre 0 y π con incrementos de π/4:

Page 15: Guia para usar matlab

Matrices y Vectores 15

y =

0 0.7854 1.5708 2.3562 3.1416

Tambien son posibles incrementos negativos:

>> 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 especifica las com-ponentes primera y ultima y el numero de ellas:

>> k=linspace(-sqrt(3),pi,5)

k =

-1.7321 -0.5136 0.7048 1.9232 3.1416

El numero de componentes por defecto es 100. Esto significa que una sentencia del tipo

>> k=linspace(-sqrt(3),pi);

asignarıa a la variable k un vector de 100 componentes igualmente espaciadas entre −√

3 y π(hemos escrito ; al final del comando para que el resultado no sea mostrado).

Por otra parte, dada una matriz A, el elemento de la fila i y la columna j, se denota por A(i,j).Ası, con la matriz A de mas arriba (que utilizaremos a lo largo de esta seccion):

>>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 posicion (2, 4) es 8. Si escribimos

>> A(2,4)

MATLAB nos devuelve:

ans =

8

Se puede modificar el elemento de cualquier posicion sin mas que cambiar su valor. La respuestade MATLAB es toda la matriz con el nuevo valor en dicha posicion. Para seguir manteniendo,para los siguientes ejemplos, la misma matriz A, primero almacenamos en c el elemento quevamos a cambiar y a continuacion recuperamos la matriz original::

Page 16: Guia para usar matlab

Matrices y Vectores 16

>> 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

En la primera lınea de comandos hemos puesto dos ordenes: c=A(2,4),A(2,4)= 3*sqrt(A(1,4))

-1/log10(A(3,4)). Tal y como se ha mencionado mas arriba escribir ; despues de una ordenproduce el efecto de que el resultado no se escribe en la pantalla. En cada lınea de comandospodemos poner cuantas ordenes queramos separadas bien sea por comas (en cuyo caso los re-sultados correspondientes apareceran sucesivamente en la pantalla) o bien por ; para que losresultados no aparezcan en la pantalla. (Mas abajo hay un ejemplo).

Por otra parte, si pedimos el valor del elemento en la posicion (4, 5), MATLAB nos devuelve unmensaje de error porque el tamano de A es 4× 4:

>> A(4,5)

??? Index exceeds matrix dimensions.

Desde la version 5 de MATLAB se puede usar end para indicar el ultimo elemento de una matriz,respecto de una dimension dada. Ası:

>> a=4:10

a =

4 5 6 7 8 9 10

>> a(end)

ans =

10

>> A(end,end)

ans =

1

>> A(2,end)

ans =

15

>> A(end,2)

ans =

8

Page 17: Guia para usar matlab

Matrices y Vectores 17

No solo se puede extraer cada elemento de una matriz sino cualquier submatriz. Para ello bastaexpresar la submatriz deseada en notacion vectorial. Ası, para obtener el “subvector” de a

formado por los ultimos 5 primeros elementos escribirıamos:

>> a(1:5)

ans =

4 5 6 7 8

y el formado por los ultimos 4:

>> a(end-3:end)

ans =

7 8 9 10

Para obtener la submatriz formada por los elementos que ocupan las posiciones donde se inter-ceptan las filas 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 filas podemos utilizar el comando dospuntos:

>> A([1 2],:)

ans =

16 3 2 13

5 10 11 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 tecnica para generar submatrices correspondientes a filas o columnasigualmente espaciadas. Por ejemplo, siA fuera una matriz 10×15, el comando A(2:2:10,1:3:15)nos devolverıa la submatriz formada por las filas pares y las columnas 1,4,7,10 y 13.

Si a una matriz le especificamos un solo subındice, MATLAB cuenta los elementos por columnasy nos devuelve el elemento correspondiente:

Page 18: Guia para usar matlab

Matrices y Vectores 18

>> A(7)

ans =

6

>> A(12)

ans =

14

Por el mismo motivo la orden A(:) nos devuelve el vector columna formado por los elementosde 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 notacion vectorial para los subındices de una matriz puede utilizarse para permutar filas ocolumnas de una matriz. Ası para obtener una matriz B con las filas primera y segunda, y lascolumnas 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 solo queremos permutar las dos primeras filas:

>> B=A([2 1 3 4],:)

B =

Page 19: Guia para usar matlab

Matrices y Vectores 19

5 10 11 8

16 3 2 13

9 6 7 12

4 15 14 1

Dada una matriz A podemos anadirle filas y columnas sin mas que especificar el vector con loselementos que se quiere anadir. Por ejemplo, si a nuestra matriz A le queremos anadir la fila[1 3 5 7] harıamos lo siguiente:

>> C=[A;[1 3 5 7]]

C =

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

1 3 5 7

Claro que tambien podrıamos definir primero el vector fila que vamos a anadir y luego anadirlo:

>> r=1:2:7; C=[A;r]

C =

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

1 3 5 7

Si lo que queremos es anadir una columna actuarıamos por transposicion (recordemos que r′ esla transpuesta de r):

>> [A r’]

ans =

16 3 2 13 1

5 10 11 8 3

9 6 7 12 5

4 15 14 1 7

Esta forma de crear matrices a partir de otras mas pequenas nos permite ir creando matricessobre la marcha empezando desde una “matriz vacıa”. En efecto, la orden >> B=[] nos devuelveuna matriz sin elementos a la que podemos ir anadiendole filas o columnas como hemos hechomas arriba:

>> B=[]

Page 20: Guia para usar matlab

Matrices y Vectores 20

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

Tambien podemos eliminar filas y/o columnas con ayuda de la “matriz vacıa”. Simplementeigualamos 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 predefinidas en MATLAB

Hay un buen numero de funciones de matrices predefinidas en MATLAB. Una relacion de todasellas con la descripcion de su uso la puedes encontar escribiendo helpwin y en la ventana queaparece haciendo doble “click” en matlab/elmat. Describimos aquı las funciones para generarlas matrices mas elementales:

zeros(m,n) Crea una matriz de tamano m× n cuyos elementos son todos 0.ones(m,n) Crea una matriz de tamano m× n cuyos elementos son todos 1.rand(m,n) Crea una matriz de tamano m× n con elementos aleatorios distribuıdos

uniformemente entre 0 y 1randn(m,n) Crea una matriz de tamano m× n con elementos aleatorios elegidos

con una distribucion normal de media 0 y varianza y desviacion standrad 1eye(m,n) Crea una matriz de tamano m× n con 1’s en la diagonal principaldiag(v,k) El argumento v es un vector y el argumento k es opcional pero si

se da, debe ser un numero entero. MATLAB crea una matriz cuadrada de tamanon+ |k|, con todos lo elementos cero excepto los de la k-esima diagonalque son los elementos del vector v. Poner k = 0 o no dar un valorexplıcito produce el mismo resultado: una matriz diagonal con el vector ven la diagonal principal. Si k > 0 el vector v aparece en la k-esima

Page 21: Guia para usar matlab

Matrices y Vectores 21

supradiagonal y si k < 0 en la k-esima subdiagonal.diag(A,k) El argumento A es una matriz y el agumento k es opcional pero si

se da, debe ser un numero entero. MATLAB produce un vector: la k-esima diagonalde 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

Page 22: Guia para usar matlab

Matrices y Vectores 22

3

ans =

1

1

1

1

1

1

ans =

-1

-1

-1

-1

-1

-1

2.4. Otras formas de generar matrices

Hay otras formas de producir matrices. Comentamos a continuacion como generar matrices apartir de ficheros externos. Estos son ficheros almacenados en el disco duro y que han sidoproducidos bien por MATLAB o bien por nosotros mismos. En cualquier caso, conviene tenerun directorio especıfico donde almacenar estos y otros posibles ficheros. Hablaremos mas ex-tensamente sobre este tema y otros relacionados cuando estudiemos el entorno de trabajo deMATLAB. Ahora comentamos solo lo necesario para crear matrices a partir de ficheros externos.

Me referire a matlabdir como el directorio donde se guardaran todos los ficheros de MATLABcreados por nosotros mismos. El nombre real de este directorio para cada cual puede ser diferente.En primer lugar se debe crear. Para ello conviene comprobar primero en que directorio delsistema de archivos nos encontramos. Esto se hace con el comando pwd. Se puede cambiar aldirectorio que se desee con el comando cd y crear entonces el directorio matlabdir con la ordenhabitual: mkdir matlabdir. Hay otras ordenes correspondientes al sistema operativo que severan mas adelante. Tambien se pueden consultar con el sistema de ayuda: helpwin y entoncesmatlab/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 ficheros allı depositados. Paraello debemos anadirlo al “path” de MATLAB con el comando addpath. Por ejemplo: addpath/ruta completa/matlabdir. Si ahora tecleamos path, en la primera lınea debera aparecer laruta completa hasta nuestro directorio matlabdir.

Analizamos ahora la forma de generar matrices desde ficheros externos:

Con el comando load. Este comando puede leer ficheros externos binarios, producidos porsesiones anteriores de MATLAB, o de texto. Para obtener matrices de ficheros de textoexternos estos deben estar organizados como una tabla rectangular de numeros, separados

Page 23: Guia para usar matlab

Matrices y Vectores 23

por espacios en blanco, con una fila por lınea y con igual numero de elementos en cadafila. Por ejemplo, con un editor de texto (textedit en picasso o notepad en MSWindows)podemos crear un fichero de texto que contenga estas cuatro lıneas:

16,0 3,0 2,0 13,05,0 10,0 11,0 8,09,0 6,0 7,0 12,04,0 15,0 14,0 1,0

Guardamos este fichero bajo el nombre de magico.dat en el directorio matlabdir. El coman-do

>> load magico.dat

lee el fichero y asigna a la variable magico la matriz contenida en el fichero.

>> magico

magico =

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

Creando un fichero M con el contenido de una o mas matrices. Los ficheros M son partefundamental de MATLAB y los analizaremos posteriormente. Por ahora solo necesitamossaber que si con nuestro editor creamos un fichero de texto que contenga las siguientes 5filas:

A = [...16,0 3,0 2,0 13,05,0 10,0 11,0 8,09,0 6,0 7,0 12,04,0 15,0 14,0 1,0];

y salvamos este fichero como magico.m, entonces el comando magico en MATLAB lee elfichero y crea la variable A que contiene la matriz del fichero. Por supuesto, el fichero debeestar en el directorio matalbdir.

Page 24: Guia para usar matlab

Capıtulo 3

El Entorno de Trabajo de MATLAB

3.1. El Espacio de Trabajo

El espacio de trabajo (workspace en ingles) es el area de memoria accesible desde la lınea decomandos de MATLAB. Si estamos trabajando en modo grafico hay dos formas de acceder a el:abriendo la ventana correspondiente o mediante los comandos who y whos. Empezando por losegundo, estos dos comandos muestran el contenido del espacio de trabajo en cada momento. Elcomando who proporciona una lista corta, mientras que whos da, ademas, el tamano y algunainformacion adicional sobre almacenamiento de las variables que se han utilizado. He aquı unejemplo:

>> who

Your variables are:

A a b

>> whos

Name Size Bytes Class

A 3x4 96 double array

a 1x7 56 double array

b 1x100 800 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 menu Desktop (version 7) o View (versiones anteriores a la 7), que esta en el

24

Page 25: Guia para usar matlab

El Entorno de Trabajo de MATLAB 25

menu principal de MATLAB, y allı seleccionamos workspace. Cualquier otra ventana de lasdisponibles en Desktop (View) se abre igual. Puede suceder que la ventana workspace, ocualquier otra que se desee abrir, ya este abierta aunque no se vea. Ello es debido a que puedeestar oculta por alguna otra ventana. Para saberlo hay que ir a Window en el menu principal yver si esta allı relacionada. Si no lo esta se abre como se ha mencionado mas arriba. Y si lo esta yno se ve es que esta abierta pero oculta. En este caso, basta pinchar en el nombre de la ventanaque se quiere consultar (en nuestro caso workspace) para que pase a primer plano. Pegada ala ventana de comandos nos aparecera la ventana del espacio de trabajo con la informacion queproporciona el comando whos(ver la figura 3.1)

Figura 3.1: Ventana del Espacio de Trabajo.

Esta informacion puede ser interesante cuando se estan consumiendo grandes recursos para saberla cantidad de memoria que se utiliza o, sobre todo, cuando se quieren conocer los nombres delas variables que ya se han usado a fin de no sobreescribir alguna que pueda ser importante.Para cerrar la ventana del espacio de trabajo basta seleccionar, de nuevo, Workspace en elmenu Desktop (o View para versiones anteriores a la 7) o pinchar en el sımbolo .

Para borrar todas las variables del espacio de trabajo se utiliza el comando clear.

3.1.1. Comandos save y load

En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y poderlorecuperar mas tarde en el mismo punto en el que se dejo (con las mismas variables definidas,con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del programatodo el contenido de la memoria se borra automaticamente. Tambien en este caso tenemos dosformas de hacerlo: mediante los comandos save y load o eligiendo Save Workspace As ...(para salvar el trabajo) o Import Data (para recuperarlo) en el menu File. Esta segunda formade hacerlo es muy intuitiva y no requiere comentarios. Los comandos save y load apenas losusaremos en estas practicas y se puede encontrar todo lo relativo a ellos usando helpwin →

Page 26: Guia para usar matlab

El Entorno de Trabajo de MATLAB 26

matlab/general

3.1.2. El Comando diary

Los comandos save y load crean ficheros binarios o ASCII con el estado de la sesion, perono sirven para guardar todo lo que hemos ido tecleando y ha ido saliendo en la ventana decomandos. Existe una forma sencilla de almacenar todos estos datos en un fichero de texto. Estose hace con el comando diary. El uso general es de la forma siguiente:

>> diary filename.txt

De esta forma se va escribiendo en el fichero filename.txt todo lo que aparece, lınea traslınea, en la ventana de comandos de MATLAB con posterioridad a la utilizacion del comando.Esto significa que si se quiere guardar todo lo que vaya apareciendo en la ventana de comandosdesde el principio, se debe utilizar este comando en cuanto se empieza la sesion. ¡Ojo! si sequieren salvar distintas sesiones se deben guardar en archivos con nombres diferentes. Salvo quese especifique el path completo en el que se quiere guardar el fichero, este se salva (en Windows)en el subdirectorio work del directorio principal de MATLAB (es decir, en la subcarpeta workde la carpeta de instalacion de MATLAB) y en un sistema UNIX en el directorio home de cadausuario.

Si se quiere interrumpir el proceso basta escribir

>> diary off

y para reanudarlo de nuevo

>> diary on

El simple comando diary pasa de on a off y viceversa. Para poder acceder al fichero file-name.txt con un editor de texto es necesario que diary este en off porque si no MATLABmantiene abierto el fichero y no es accesible desde el exterior.

No obstante, en la ventana Command History que se puede abrir desde el menu Desktop seguardan las sesiones anteriores (hasta cierto punto) especificadas por el dıa y la hora en que secomenzaron.

3.1.3. Lıneas de comentarios

Para MATLAB el caracter tanto por ciento ( %) indica comienzo de comentario. Cuando apareceen una lınea de comandos, el programa supone que todo lo que va desde ese caracter hasta elfin de la lınea es un comentario y por lo tanto no lo lee. Raramente se usan en la ventana decomandos, pero son muy utiles cuando se escriben programas (ficheros M) tal y como veremosmas adelante.

Page 27: Guia para usar matlab

El Entorno de Trabajo de MATLAB 27

3.2. El Camino de busqueda (SEARCH PATH) de MATLAB

El search path de MATLAB es una lista de directorios que se puede ver y modificar a partirde la lınea de comandos. El comando path hace que se escriba el search path de MATLAB (elresultado depende de en que directorio esta instalado MATLAB):

>> path

MATLABPATH

/home/Ion/matlab

/home/Ion/matlab/prog

/home/Ion/matlab/prog/clase/anal_matr

/usr/local/share/matlab6/toolbox/matlab/general

/usr/local/share/matlab6/toolbox/matlab/ops

/usr/local/share/matlab6/toolbox/matlab/lang

/usr/local/share/matlab6/toolbox/matlab/elmat

/usr/local/share/matlab6/toolbox/matlab/elfun

/usr/local/share/matlab6/toolbox/matlab/specfun

/usr/local/share/matlab6/toolbox/matlab/matfun

Para ver como MATLAB utiliza el search path supongase que se utiliza la palabra nombre1

en un comando. El proceso que sigue MATLAB para tratar de conocer que es nombre1 es elsiguiente:

1. Comprueba si nombre1 es una variable previamente definida por el usuario.

2. Comprueba si nombre1 es una funcion del usuario (hablaremos mas adelante de las fun-ciones en MATLAB).

3. Comprueba si nombre1 es una funcion interna o intrınseca de MATLAB.

4. Comprueba si hay un fichero llamado nombre1.mex o nombre1.m en el directorio actual(de los ficheros M hablaremos mas adelante, los ficheros .mex tienen un significado especialpara MATLAB del que no hablaremos aquı).

5. Comprueba si hay ficheros llamados nombre1.mex o nombre1.m en los directorios incluidosen el search path de MATLAB.

Estos pasos se realizan en el orden indicado. En cuanto se encuentra lo que se esta buscando sedetiene la busqueda y se utiliza el fichero que se ha encontrado. Si no se encuentra en todo elproceso MATLAB produce un error:

>> nombre1

??? Undefined function or variable ’nombre1’.

Page 28: Guia para usar matlab

El Entorno de Trabajo de MATLAB 28

El Path Browser es el programa que ayuda a definir la lista de directorios donde MATLAB debebuscar los ficheros de comandos y las funciones, tanto del sistema como de usuario. Para abrirel Path Browser se elige Set Path en el menu File. Una vez seleccionado se abre otra nuevaventana en la que se muestra la lista de directorios en la que MATLAB buscara (MATLABsearch path) (ver Figura 3.2. Seleccionando Add Folder se pueden anadir nuevos directorios.

Figura 3.2: Ventana con el path de MATLAB.

Se puede especificar, ademas que se incorporen al “search path” todos los subdirectorios deldirectorio seleccionado. Tambien se pueden quitar directorios con la opcion Remove (es mejorque ni lo intentes salvo que estes seguro/a de lo que haces). El nuevo directorio se puede anadir alcomienzo o final de la lista. Tal y como hemos mencionado, el orden de la lista es muy importanteporque refleja el orden de la busqueda: si una funcion esta en dos directorios, se utilizara la queprimero se encuentre. Las operaciones realizadas se pueden salvar utilizando Save. En MATLABbajo Windows el listado de directorios salvado se hace permanente, de forma que la proxima vezque se empieza una sesion de MATLAB las carpetas anadidas apareceran en el path browser.Este no es el caso en sistemas UNIX porque la posibilidad de escribir de forma permanente enel directorio donde esta instalado MATLAB es exclusiva del administrador del sistema. Paraanadir permanentemente unos directorios al “search path” en UNIX hay que hacerlo a travesdel fichero startup.m del que hablaremos enseguida.

Tambien se puede incluir un directorio de busqueda desde la lınea de comandos de MATLAB.La forma de hacerlo depende del sistema operativo sobre el que este instalado MATLAB. Lomejor es utilizar el comando helpwin y consultar en matlab/general lo relativo a los comandospath, addpath y rmpath.

El fichero responsable de los parametros con los que se inicia cada sesion de MATLAB es matla-brc.m que se encuentra en el subdirectorio toolbox/local de la instalacion de MATLAB (ensistemas UNIX). En sistemas multiusuario, como picasso, solo puede modificarlo el administra-dor. En Windows puede hacerlo cualquiera, pero es altamente recomendable que no lo hagas.Ahora bien, cada usuario puede escribir un fichero para que cada vez que se empiece una sesionde MATLAB, este se inicie con los parametros que cada cual desee. Este fichero se debe llamarstartup.m y debe estar, en sistemas UNIX, en el subdirectorio home/izaballa/matlab delcorrespondiente ususario. Bajo Windows este fichero se debe colocar en la subcarpeta work dela carpeta donde esta instalado MATLAB (posiblemente C:\matlabr14 o algo ası). Por ejemplo,un fichero startup.m que contenga las siguientes lıneas:

Page 29: Guia para usar matlab

El Entorno de Trabajo de MATLAB 29

cd \$HOME/matlab

format compact

addpath ’/usr/alu/julen/matlab/practicas’ -end

!texedit

disp(’Kaixo’)

hara lo siguiente cuando el usuario correspondiente (en este caso posiblemente Julen) empieceuna sesion de MATLAB en picasso:

Cambiara al directorio matlab, donde posiblemente se encuentren los trabajos de MATLABde Julen.

Utilizara el formato compact para exponer las salidas producidas por MATLAB (esteformato, como ya se dijo en el Capıtulo 2, suprime algunos saltos de lınea y presenta lassalidas mas compactas).

Anadira el directorio /usr/alu/julen/matlab al final del search path.

Abrirıa el editor de openxt y

Escibira Kaixo como primera lınea en la ventana de comandos de MATLAB.

Bajo Windows el fichero que producirıa algo parecido serıa

cd c:\matlabr14\programas

format compact

addpath ’c:\matlabr14\programas’ -end

edit

disp(’Kaixo’)

De forma analoga, al abandonar la ejecucion de MATLAB con el comando quit se ejecutaautomaticamente el fichero finish.m, siempre que se encuentre en alguno de los directorios delsearch path. Este fichero se puede utilizar por ejemplo para guardar el espacio de trabajo deMATLAB (recuerda el comando save).

3.3. Manipulacion de ficheros

Los comandos dir, type, delete y cd implementan un conjunto de comandos del sistema opera-tivo que corre por debajo de MATLAB. Los nombres con los que se corresponden en los sistemasoperativos MS-DOS-Windows y Unix se muestran en la siguiente tabla

MATLAB Windows UNIX

dir dir ls

type type cat

delete del o erase rm

cd cd cd

pwd pwd

Page 30: Guia para usar matlab

El Entorno de Trabajo de MATLAB 30

Como en todos los sistemas operativos se pueden utilizar los caracteres comodın, pathnames ynombres 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 enel disco C (en caso de que tal directorio exista; si no, produce un mensaje de error). Y acontinuacion se borrarıan todos los ficheros cuya extension es dos en dicho directorio.

En un sistema UNIX los discos habitualmente no se designan con las letras a, c, etc..., sino quetodos los directorios “cuelgan” del directorio raız: /. Por lo tanto, para cambiar al directiorio/usr/alu/Julen/matlab deberemos utilizar el comando:

cd /usr/alu/Julen/matlab

Desde la ventana de comandos de MATLAB siempre se puede utilizar el comando pwd (comoen UNIX) para conocer en que directorio nos encontramos trabajando.

3.3.1. Ejecucion de Programas Externos

El cierre de exclamacion, !, indica que el resto de la lınea es un comando del sistema operativo.Esto puede ser util porque permite ejecutar programas o invocar utilidades del sistema operativosin salir de MATLAB aunque rara vez se utiliza cuando el sistema operativo es Windows. Porejemplo, en UNIX de Solaris (que es el sistema operativo de picasso)

>> !textedit parabola.m &

es una orden para abrir el editor de ficheros Text Editor que trae por defecto el sistemaOpen windows de Solaris y cargar en el el fichero parabola.m. El sımbolo & le pide al sistemaoperativo que lo ejecute en background; es decir, que deje la ventana de comandos de MATLABlibre para seguir tecleando nuevas ordenes.

Page 31: Guia para usar matlab

Capıtulo 4

Programacion en MATLAB

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 programacion con cantidad de funciones primitivas quefacilitan mucho la tarea de programar.

Un ejemplo muy simple es el siguiente: supongamos que queremos dibujar la parabola x = t2

en el intervalo [−2, 2]. El comando para dibujar curvas en el plano es plot. Este comandoadmite muchos argumentos incluyendo la posibilidad de dibujar varias curvas al mismo tiempo.Nosotros solo lo usaremos de la forma mas sencilla, pero si quieres saber todo lo que puedehacer, puedes usar el comando helpwin → graph2d → plot. Por ahora la unica informacionpertinente es que plot(t,x) dibuja el vector t versus el vector x. Esto quiere decir que si elvector t es t = [t1 t2 t3 . . .] y x = [x1 x2 x3 . . .] entonces plot(t,x) dibuja una poligonal queune los puntos (t1, x1), (t2, x2), t3, x3), etc. Si estos puntos estan suficientemente proximos elefecto visual es una curva. Ası pues, para dibujar la curva x = t2 tenemos que dar tres pasos:

definir el vector t,

definir 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 ordenes en la misma lınea de comando (recuerdalas dificultades que hay para usar ˆ en picasso y que este operador se puede sustituir porpower):

31

Page 32: Guia para usar matlab

Programacion en MATLAB 32

>> t=-2:0.1:2; x=t.^2; plot(t,x)

o preferiblemente

>> t=linspace(-2,2);x=t.^2; plot(t,x)

Recuerda tambien que linspace(a,b) forma un vector de 100 componentes igualmente espa-ciadas entre a y b. Si estos puntos no estan muy alejados entre sı, cada componente del vectoresta muy proxima a la siguiente.

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 mas interesante: escribir el conjunto de ordenes en unfichero, mediante un editor. Ya se ha dicho mas arriba como hacerlo tanto en picasso (mediante!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 edicion para escribir programas de MATLAB

programa (en este caso pequeno) con codigo ejecutable por MATLAB. La traduccion de “script”en castellano es algo ası como guion pero seguiremos utilizando el original en ingles.

Una vez escrito, se salvarıa con el nombre que se desee, por ejemplo parabola.m (la extension.m es obligatoria, es la forma en que MATLAB sabe que es un fichero con codigo ejecutable).Para ejecutar las ordenes contenidas en este fichero basta escribir su nombre en la ventana decomandos; en este caso parabola:

>> parabola

El resultado es una nueva ventana, como la de la figura 4.2, que contiene la grafica de la parabola.

Si a = (a1, . . . , an) es un vector de n componentes plot(a) dibuja una poligonal uniendo los

Page 33: Guia para usar matlab

Programacion en MATLAB 33

Figura 4.2: Ventana grafica con la parabola producida por el script parabola.m

puntos (1, a1), (2, a2), . . . . Si lo que se quiere es senalar con el sımbolo ∗ los puntos (x1, y1),(x2, y2),. . . , (xn, yn) pero sin unirlos a traves de una poligonal basta crear los vectores x e y yusar el comando plot(x,y,’*’).

4.1.1. Operadores relacionales y logicos

Para programar en MATLAB se pueden usar bucles de la forma for . . . end, o bifurcacionesde la forma while . . . end, if. . . end y switch . . . case Su sintaxis es como en cualquier otrolenguaje de programacion. La idea es que cierta accion se realice dependiendo de si una condiciones verdadera o no. La verdad o falsedad de estas condiciones se suele evaluar comparando dosexpresiones. Para ello existen operadores relacionales y logicos. MATLAB dispone de lossiguiente 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 quetengan un significado especial. Por ejemplo, dada una matriz A la comparacion abs(A)<eps

genera una matriz de 0’s y 1’s con el mismo tamano de A. El elemento (i, j) de dicha matriz es1 si |Aij | < eps, siendo eps el epsilon de la maquina (=2.204e-16).

>> A=[-1 2 0; 0 -1 -3; 1 -1 0]

A =

-1 2 0

0 -1 -3

1 -1 0

Page 34: Guia para usar matlab

Programacion en MATLAB 34

>> B=(abs(A)<eps)

B =

0 0 1

1 0 0

0 0 1

La sentencia any(abs(A)<eps) genera un vector de 0’s y 1’s; 0 si la correspondiente columna escero y 1 en caso contrario. Es decir, any responde true si algun elemento no es cero y false sitodos son cero.

>> any(B)

ans =

1 0 1

Y la sentencia any(any(abs(A)<eps)) produce un 0 (i.e. false) si todos los elementos deany(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 condicion. Sera ver-dadera si y solo si algun elemento de A es, en modulo, mas pequeno que eps. En caso contrarioes falsa.

Hay un operador logico similar: all. Responde true si todos los elementos del vector son distintosde cero; en caso contrario, responde false. Con la matriz A de mas arriba:

>> all(A)

ans =

0 1 0

En efecto, la unica columna de A con todos sus elementos distintos de cero es la segunda. Perocomo 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 programacion, si una comparacionse 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. Cuandolos operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamano,la comparacion se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros delmismo tamano, que recoge el resultado de cada comparacion entre elementos. Por ejemplo:

Page 35: Guia para usar matlab

Programacion en MATLAB 35

>> 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 expresion isequal(A,B)

>> isequal(A,B)

ans =

0

La expresion isequal(A,B) es equivalente a all(all(A==B)). Por otra parte, isequal es una delas muchas funciones logicas que empiezan por is. He aquı una seleccion de ellas. Para obtenerun listado completo escribe doc is tras el prompt de MATLAB

ischar verdadero si la entrada es un vector de caracteresisempty verdadero si la entrada es un vector vacıoisequal verdadero si los vectores son igualesisfinite detecta los elementos finitos de un vectorisfloat verdadero si el vector es de elementos en coma flotanteisinf detecta los elementos infinitos de un vectorisinteger verdadero si el vector es de numeros enterosisnan detecta los elementos que son NaN en un vectorisnumeric veradero si el vector es de numeros (no de caracteres)isprime detecta los numeros primos en un vectoris real verdadero si todos los numeros del vector son realesisvector verdadero si se trata de un vector

Algunos ejemplos adicionales con la matriz A de mas arriba

>> A

A =

1 2

0 3

>> isfinite(A)

Page 36: Guia para usar matlab

Programacion en MATLAB 36

ans =

1 1

1 1

>> isnumeric(A)

ans =

1

>> isreal(A)

ans =

1

>> isvector(A)

ans =

0

Ademas una condicion puede constar de una o mas operaciones relacionales. Estas normalmenteestan concatenadas con expresiones logicas cuya verdad o falsedad sigue las leyes de la logicaformal. Los operadores logicos de MATLAB son los siguientes:

& y| o~ negacion logicaxor o excluyenteany verdad si cualquiera de los elementos de un vector es no ceroall verdad si todos lo elemntos de un vector son no cero

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)

Page 37: Guia para usar matlab

Programacion en MATLAB 37

ans =

0

>>

Para terminar con los operadores logicos estudiamos otro comando muy util: find. Este comandodevuelve 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 0

>> f=find(x)

f =

1 2 4

Una primera aplicacion es extraer de x los elementos no nulos:

>> x(f)

ans =

-3 1 -Inf

Podemos extraer los elementos finitos

> x(find(isfinite(x)))

ans =

-3 1 0 0

o reemplazar las componentes negativas por cero:

>> x(find(x<0))=0

x =

0 1 0 0 0

Cuando find se aplica a una matriz se hace mirandola como un vector; es decir al vector 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

Page 38: Guia para usar matlab

Programacion en MATLAB 38

C =

1 1 0

0 0 1

>> C(:)

ans =

1

0

1

0

0

1

>> find(A<B)

ans =

1

3

6

Otro posible uso de find con matrices es [i,j]=find(A) que devuelve vectores i y j con losındices de las filas 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) estan los elementos de A que son menores quelos de B.

4.1.2. Bifurcaciones y Bucles

Tal y como hemos dicho mas arriba las bifurcaciones de MATLAB son while . . . end, if. . . endy switch . . . case. Este ultimo tipo de bifurcaciones no lo vamos a comentar; se puede consultarla ayuda de MATLAB para saber como funciona. Tambien se dispone de bucles for . . . end.

La forma mas simple de una bifurcacion del tipo if. . . end es la siguiente

if condicion

sentencias

end

Page 39: Guia para usar matlab

Programacion en MATLAB 39

Existe tambien la bifurcacion multiple, en la que pueden concatenarse tantas condiciones comose desee, y que tiene la forma:

if condicion1

bloque1

elseif condicion2

bloque2

elseif condicion3

bloque3

else % opcion por defecto para cuando no se cumplan las condiciones 1,2,3

bloque4

end

donde la opcion por defecto else puede ser omitida: si no esta presente no se hace nada en casode que no se cumpla ninguna de las condiciones que se han chequeado.

Exponemos un ejemplo a continuacion. Recordemos que los operadores logicos se pueden com-binar con los relacionales para poder comprobar el cumplimiento de condiciones multiples.

Ejemplo 4.1.1 .- El siguiente programa comprueba si un numero es positivo, si no lo es produceun mensaje de error con el comando disp que sirve para escribir mensajes en la pantalla (masadelante se explica con detalle la accion de este comando). A continuacion comprueba si, siendopositivo, es par . La orden rem(p,q) calcula el resto de la division euclıdea de p por q. Si elnumero es positivo lo divide por 2 y en caso contrario, le suma 1 y el resultado lo divide por 2.

if n<0 | n==0

disp(’Introduce un numero positivo’);

elseif rem(n,2)==0

a=n/2;

else

a=(n+1)/2

end

Naturalmente la condicion n<0 | n==0 podrıa sustituirse por la mas compacta n<=0. Se haescrito de la forma expuesta para hacer uso de una condicion con dos relaciones y un operadorlogico.

SENTENCIA WHILE.- La estructura del bucle while es muy similar a la de cualquier otrolenguaje de programacion. Su sintaxis es la siguiente:

while condicion

sentencias

end

Page 40: Guia para usar matlab

Programacion en MATLAB 40

donde condicion puede ser una expresion vectorial o matricial. Las sentencias se siguen ejecu-tando mientras haya elementos distintos de cero en condicion; es decir, mientras haya alguno algunos elementos true. El bucle se termina cuando todos los elementos de condicion sonfalse (es decir, cero).

Ejemplo 4.1.2 .- En el siguiente ejemplo se ejecutan una serie de operaciones sobre un ciertonumero n mientras este se mantenga mayor que 1. Concretamente, si n es par se divide por 2 ysi 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 fin cualquiera que sea el valor de n? (Conjetura de Collatz, misteriode Siracusa, problema de Kakutani, algoritmo de Hasse o problema de Ulam).

Finalmente, los bucles del tipo for . . . end tienen la siguiente sintaxis:

for variable= expresionsentenciasend

Habitualmente la expresion es un vector de la forma i:s:j y las sentencias se ejecutan sucesi-vamente con la variable igual a cada elemento de la expresion. Por ejemplo, para sumar los 25primeros terminos de la serie 1

n :

>> n=0;

>> for i=1:25

n=n+1/i;

end

>> n

n =

3.8160

Otra forma de definir una expresion es usando notacion vectorial:

>> 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

Page 41: Guia para usar matlab

Programacion en MATLAB 41

Y por supuesto, se pueden encajar multiples bucles for. . . end unos dentro de otros. El siguientecodigo proporciona una matriz simetrica 5× 5 con el elemento i

j en la posicion (i, j) para i ≥ j:

>> 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.3333 0.2500 0.2000

0.5000 1.0000 0.6667 0.5000 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. Presentacion de los resultados

Si en MATLAB hacemos

>> v=1:5

la respuesta es la exposicion del resultado

v =

1 2 3 4 5

A veces, sin embargo se quiere disponer de un formato de salida un poco mas estructurado. Porejemplo se quiere mostrar una tabla de los valores de sen(2πt) para 10 valores de t igualmenteespaciados en el intervalo [0,1].Con el comando disp lo podemos hacer facilmente. Escribimosun fichero 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 deMATLAB, y lo ejecutamos en la ventana de comandos:

Page 42: Guia para usar matlab

Programacion en MATLAB 42

>> 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

El comando disp lo que hace es mostrar en pantalla el contenido de un vector (o matriz). Loque sucede es que hay vectores de numeros como

>> v=[1 2 3]

v =

1 2 3

y hay vectores de letras o caracteres o “strings” como

>> v=’ke kosa’

v =

ke kosa

Ası, una frase entre acentos es un vector de caracteres. Por eso en el programa de mas arribaescribimos 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 mas especiales se puede usar el comando sprintf. Su uso enMATLAB es muy parecido al del comando homonimo en lenguaje C.

4.2. Scripts y Funciones

El nombre que se utiliza para los programas en MATLAB es el de M-files o ficheros M. Haydos tipos de ficheros M: los scripts y las funciones. Son el equivalente a programas, funciones,subrutinas o procedimientos de otros lenguajes de programacion como FORTRAN, C, Pascal oJava. Los ficheros M son, por lo tanto, secuencias de comandos de MATLAB que se almacenanen ficheros y que tienen algun proposito concreto. Un fichero M puede hacer referencia a otrosficheros M e incluso a sı mismos (es decir, esta permitida la autorecursividad). Los ficheros Mson especialmente apropiados para

Page 43: Guia para usar matlab

Programacion en MATLAB 43

experimentar con algoritmos escribiendoles en un fichero sobre el que poder hacer correc-ciones en vez de reescribir cada vez que se quiere experimentar una larga lista de comandos,

guardar el resultado de un experimento numerico, como una lista de comandos y variablesque producen un determinado resultado numerico o grafico,

construir programas que pueden ser utilizados con posterioridad varias veces,

o, simplemente, intercambiar con algun amigo o colega ficheros de mutuo interes.

En la pagina web de Mathworks mencionada en la Introduccion pueden encontrarse numerososficheros M escritos con distintos propositos, desde puramente computacionales a didacticos opor puro placer.

Hay dos tipos de ficheros M:

Sripts o ficheros de comandos. Por lo general no tienen argumentos de entrada ni de saliday operan con las variables del espacio de trabajo. Es decir, recogen variables ya existentes einteractuan con ellas para producir resultados numericos o graficos y quiza nuevas variables.

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 variablesinternas son locales a la funcion (salvo que sean declaradas como global)

Ya hemos visto en la seccion anterior como hacer ficheros M de tipo “script”. Simplemente sonficheros que ejecutan sucesivamente varios comandos de MATLAB con un objetivo especıficoy siempre que se ejecutan producen el mismo resultado. Volveremos sobre ellos mas adelantepara recalcar su diferencia con el otro tipo de ficheros M, y que son los mas importantes:las funciones. Las funciones en MATLAB guardan una gran similitud con las funciones enlenguaje C o Pascal. Lo que exponemos a continuacion esta inspirado en el primer capıtulo dellibro Introduction to Scientific Computation de Charles F. van Loan.

Sabemos de calculo elemental que la serie de Taylor

Tn(x) =n∑

k=0

xk

k!

aproxima la funcion exponencial, ex, cerca de x = 0. Nuestro objetivo es estudiar esta aproxima-cion. Es decir, ¿ cuan cerca esta Tn(x) de ex para los diversos valores de n? Teoricamente cuantomayor es n mas cerca esta Tn(x) de ex. ¿Para que valores de n nuestro ordenador no distingueentre Tn(x) y ex?. Para ello damos por bueno el calculo que hace MATLAB de la exponencial ycreamos una funcion de MATLAB que nos devuelva el valor de Tn(x) en funcion de x y n. Estafuncion serıa la siguiente:

function y= miexp1(x,n)

%

%Precondiciones: acepta dos valores x=numero real y

Page 44: Guia para usar matlab

Programacion en MATLAB 44

% 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

Al igual que con los “scripts” debemos escribir estas lıneas en un fichero de texto y salvarlo conel nombre miexp1.m en un directorio (o carpeta) que este en el path de MATLAB; por ejemplo,en nuestro directorio de trabajo. Debe observarse que ahora el nombre del fichero solo puede serel que hemos dado a la funcion. Debemos tener cuidado, ademas, con que el nombre de la funcionno coincida con un nombre ya existente en el path de MATLAB. Como las distribuciones deMATLAB incorporan infinidad de funciones debemos elegir nombres significativos para nosotrospero no demasiado standard; por ejemplo, podemos empezar los nombres de nuestras funcionescon el prefijo mi. . . o escoger un nombre en euskera, etc.

Al escribir una funcion en MATLAB debes seguir unas pocas, simples e importantes reglas:

El fichero debe empezar con la palabra function y tiene la siguiente estructura

function variables de salida= Nombre de la funcion(variables de entrada)%% Comentarios que definen completamente las variables que deben pasarse a la funcion% (variables de entrada) y el resultado que produce la funcion (variables de salida)%cuerpo de la funcion: comanos de MATLAB

En algun sitio del cuerpo de la funcion se debe pasar a la variable de salida el valor deseado.

Los comentarios que definen completamente la funcion deben hacerse inmediatamentedespues de la definicion de la funcion. Esto es importante porque cuando en la ventanade comandos se escriba help nombredelafuncion, MATLAB respondera escribiendo loscomentarios que ahı se escriban. Opcionalmente, y es recomendable hacerlo, se puedenescribir comentarios en otros lugares del cuerpo de la funcion para clarificar el objetivo deuno o varios de los comandos que se utilizan. Estos comentarios deben ir siempre precedidosdel sımbolo %.

Las variables de entrada y salida son parametros formales (es decir, letras). Cuando sellama a la funcion para que realice la accion que se desea, deben ser sustituıdos porparametros reales (es decir, numeros, vectores, matrices,...). Por ejemplo, la funcion miexp1

debe ser llamada con dos numeros concretos. x=miexp1(0.1,3) devolvera en la variable xel valor de la aproximacion de Taylor de tercer orden en 0,1.

Page 45: Guia para usar matlab

Programacion en MATLAB 45

Las variables que se definan en el interior de la funcion (en nuestro caso t y k) son variableslocales. Puede haber otras con el mismo nombre en el espacio de trabajo de MATLAB sinningun problema.

El fichero que contiene la funcion debe estar en el path de MATLAB.

Lo importante de las funciones de MATLAB, sean nativas o creadas por nosotros mismos, esque pueden ser llamadas por cualquier otro programa de MATLAB, bien sea un “script” u otrafuncion. Por ejemplo, si queremos las graficas para cuatro valores de n = 4, 8, 16, 20 del errorrelativo que se comete al aproximar ex por Tn(x) en el intervalo [-1,1], podemos crear un “script”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 fichero .m (por ejemplo, smiexp1.m) tenemos un “script” que alejecutarlo en MATLAB>> smiexp1

nos produce cuatro graficas (figura 4.3), cada una correspondiente a un valor de n, con elerror relativo de la aproximacion. Observese el efecto del comando subplot(n,m,p). Crea una“matriz” de n×m figuras y asigna a la p-esima el siguiente comando plot. Ası p=1 corresponde ala figura en al posicion (1, 1), p=2 a la figura en la posicion (1, 2), etc. Todos los demas comandosen el “script” ya son conocidos.

En el “script” hemos creado el vector x=linspace(-1,1,100) de 100 componentes y se lo hemospasado a la funcion exponencial obteniendo otro vector de 100 componentes que hemos llamadoexacto. Sin embargo, para calcular Tn(x) hemos tenido que hacerlo componente a componente.Ello es debido a que la funcion miexp1 solo acepta escalares y devuelve escalares. MATLABesta pensado para trabajar con vectores, y como veremos enseguida lo hace mas rapido. Convieneque modifiquemos nuestra funcion para que admita vectores y produzca vectores. La modificaciones muy sencilla: hay que redefinir y y t para que sean vectores del mismo tamano que x y cuyascomponentes sean todas igual a 1. Ademas hay que usar el producto componente a componenteentre x y t.

Page 46: Guia para usar matlab

Programacion en MATLAB 46

−1 −0.5 0 0.5 10

0.005

0.01

0.015

0.02

n= 4

−1 −0.5 0 0.5 10

1

2

3

4

5

6

7x 10

−6 n= 8

−1 −0.5 0 0.5 10

2

4

6

8x 10

−15 n=16

−1 −0.5 0 0.5 10

1

2

3

4

5

6

7x 10

−16 n=20

Figura 4.3: Error relativo al aproximar por Tn(x)

function y= miexp2(x,n)

%

%Precondiciones: acepta dos valores x=vector de numeros reales y

% 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 simplifica 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ıa igual que en el caso anterior.

Ası pues las variables de entrada y de salida pueden ser cualquier tipo de variable soportada porMATLAB. No solo eso, pueden aparecer mezcladas. Por ejemplo las variables de entrada de lafuncion miexp2 son un vector y un numero. Tambien las variables de salida pueden ser varias

Page 47: Guia para usar matlab

Programacion en MATLAB 47

y de distintos tipos. Por ejemplo, la siguiente funcion calcula el tiempo que tarda MATLAB encrear (no escribir en pantalla, sino poner en la memoria del ordenador) m matrices aleatorias detamano n× n y nos proporciona la ultima matriz creada. Es un ejemplo un poco artificial perosirve para ilustrar las ideas que estamos comentando: la salida es un vector formado por dosvariables, la primera es un numero y la segunda una matriz.

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 ultima matriz generada, A

%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, setrata de funciones del propio sistema, bien sean precompiladas o definidas a partir de ficherosM): clock asigna a la variable correspondiente la hora del sistema y etime cuenta el tiempo (ensegundos) que ha pasado entre dos instantes obtenidos con clock.

Podemos hacer uso de estas dos funciones para comprobar que MATLAB emplea menos tiempocuando trabaja con vectores como un todo que cuando trabaja componente a componente. Elsiguiente script nos sirve para comprobar el tiempo que tarda MATLAB en calcular el valor deTn(x) para un determinado valor de n y para vectores x de distinto tamano con componentesen 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;

Page 48: Guia para usar matlab

Programacion en MATLAB 48

y=miexp2(x,17);

tf=clock;

t2=etime(tf,ti);

disp(sprintf(’%6.0f %16.2f %16.4f ’,k ,t1 ,t2))

end

El resultado de este “script” depende de cada ordenador porque la rapidez con la que MATLABrealiza las operaciones no solo depende del codigo que se emplee sino, sobre todo, de las carac-terısticas del propio ordenador (procesador, memoria, bus,. . . ). La salida debe parecerse a unatabla 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 observacion. Se podrıa querer tener tablas comparativas para diversos valores de ny de la longitud de x. Para conseguirlo bastarıa convertir el “script” anterior en una funcion:

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 aproximacion de exp(x) mediante

% la aproximacion de orden n de la serie de Taylor

% 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;

Page 49: Guia para usar matlab

Programacion en MATLAB 49

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

Si en MATLAB hacemos>> fetmiexp(1000:1000:10000,17)

obtenemos la misma tabla de mas arriba. La ventaja es que ahora podemos probar con diversosvalores de k y n sin tener que modificar el “script” cada vez.

Debe notarse que no hay variable de salida. Esta funcion produce un resultado: una tabla conla comparativa de tiempos pero no almacena esta salida en ninguna variable. El recıproco, queuna funcion tenga variables de salida pero no de entrada, tambien es posible pero muy pocofrecuente.

Page 50: Guia para usar matlab

Capıtulo 5

Numeros complejos y polinomio

MATLAB trabaja indistintamente con numeros reales o complejos, pero hay algunas propie-dades especıficas de estos ultimos que hay que tener en cuenta. Polinomios son vectores cuyascomponentes son los coeficientes del polinomio. Sumar polinomios es como sumar vectores, perotambien se puede multiplicar y dividir polinomios. MATLAB tiene una serie de funciones queayudan a trabajar con polinomios comodamente.

5.1. Numeros Complejos

El comando abs(a) devuelve el valor absoluto o el modulo del numero a segun que este sea realo complejo. De la misma forma abs(A) devuelve una matriz cuyos elementos son los moduloso los valores absolutos de los elementos de A segun que estos sean numeros complejos o reales.Ademas, como ya se dijo en el Capıtulo 2, MATLAB no produce un error si se le pide la raızcuadrada o el logaritmo de un numero negativo sino que devuelve el correspondiente numerocomplejo. La unidad imaginaria es una constante predefinida en MATLAB. Las letras que ladesignan son bien i, bien j.

Hay que tener cuidado con la trasposicion. Si A es una matriz de numeros complejos entoncesA′ es la transpuesta conjugada de A (lo que nosotros solemos designar como A∗). Si queremosla 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

Page 51: Guia para usar matlab

Numeros complejos y polinomio 51

3.0000 + 1.0000i 0 + 1.0000i

>> Atc=A’

Atc =

1.0000 + 1.0000i 3.0000 - 1.0000i

2.0000 - 1.0000i 0 - 1.0000i

>> At=A.’

At =

1.0000 - 1.0000i 3.0000 + 1.0000i

2.0000 + 1.0000i 0 + 1.0000i

Finalmente, el comando plot cuando se emplea con numeros complejos tiene un significa-do especial: Si y es un vector de numeros complejos la sentencia plot(y) es equivalente aplot(real(y),imag(y)).

5.2. Calculo con Polinomios

Tal y como hemos dicho Para MATLAB un polinomio es el vector de sus coeficientes. Porejemplo, 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 el, como por ejemplo evaluarlo para undeterminado valor de x (funcion polyval()) y calcular las raıces (funcion roots()):

>> pol=[1 0 -8 6 -10]

pol =

1 0 -8 6 -10

>> roots(pol)

ans =

-3.2800 2.6748 0.3026 + 1.0238i 0.3026 - 1.0238i

>> polyval(pol,1)

Page 52: Guia para usar matlab

Numeros complejos y polinomio 52

ans =

-11

Hay una funcion similar a polyval pero para matrices: la funcion plyvalm. Dada una matrizA y polinomio p(λ) = pol, la funcion polyvalm(pol,A) devuelve la matriz p(A). Ası con elpolinomio pol=[1 0 -8 6 -10] definido mas arriba:

>> A=ceil(rand(3,3)*5-7)

A =

-2 -4 -4

-5 -2 -6

-3 -3 -2

>> polyvalm(pol,A)

ans =

3130 2896 3688

3818 3526 4476

2568 2370 2998

Para calcular el producto de polinomios MATLAB utiliza una funcion llamada conv() (deproducto de convolucion). En el siguiente ejemplo se va a ver como se multiplica un polinomiode segundo grado por otro de tercer grado:

>> pol1=[1 -2 4]

pol1 =

1 -2 4

>> pol2=[1 0 3 -4]

pol2 =

1 0 3 -4

>> pol3=conv(pol1,pol2)

pol3 =

1 -2 7 -10 20 -16

Para dividir polinomios existe otra funcion llamada deconv(). Las funciones orientadas al calculocon polinomios son las siguientes:

poly(A) polinomio caracterıstico de la matriz A

Page 53: Guia para usar matlab

Numeros complejos y polinomio 53

poly(v) polinomio cuyas raıces son los elementos de v

roots(pol) raıces del polinomio pol

polyval(pol,x) evaluacion del polinomio pol para el valor de x. Si x es unvector, pol se evalua para cada elemento de x

polyvalm(pol,A) evaluacion del polinomio pol de la matriz A

conv(p1,p2) producto de convolucion de dos polinomios p1 y p2

[c,r]=deconv(p,q) division del polinomio p por el polinomio q. En c se devuelveel cociente y en r el resto de la division

residue(p1,p2) descompone el cociente entre p1 y p2 en suma de fraccionessimples (ver >> help residue)

polyder(pol) calcula la derivada de un polinomiopolyder(p1,p2) calcula la derivada del producto de polinomiospolyfit(x,y,n) calcula los coeficientes de un polinomio p(x) de grado n que

se ajusta a los datos (xi, yi), en el sentido de los mınimoscuadrados.

Existen tambien algunas funciones orientadas a la interpolacion polinomial que no vamos aconsiderar aquı. Si quieres saber algo sobre ellas utiliza la ayuda.

Page 54: Guia para usar matlab

Apendice A

Funciones incorporadas en MATLAB

En este apendice se relacionan algunas (muchas) funciones nativas de MATLAB. Algunas deellas estan incorporadas al nucleo de MATLAB y otras son ficheros M. Nosotros no vamosa distinguir entre ambos tipos de funciones. Las hemos clasificado de acuerdo a su propositogeneral pero algunas de ellas podrıan estar en varios grupos.

Se describe brevemente lo que hacen y en muchos casos tanto las variables de entrada (los tiposde variables que aceptan) como las de salida (lo que producen) son mas de las que se relacionan.Es decir, se explica su objetivo principal pero pueden hacer mas cosas de las que se mencionan.Por ejemplo, si v = [1 2 3 4] entonces

>> v=[1 2 3 4];

>> diag(v)

ans =

1 0 0 0

0 2 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 2 0 0

0 0 0 3 0

0 0 0 0 4

0 0 0 0 0

devuelve una matriz 5× 5 cuya “superdiagonal” es v.

Tanto para una explicacion mas detallada de cada una de las funciones como de toda su poten-cialidad se recomienda utilizar el sistema de ayuda. Conociendo el nombre de la funcion lo mas

54

Page 55: Guia para usar matlab

Funciones incorporadas en MATLAB 55

rapido es utilizar el comando help funcion.

A.1. Funciones que actuan sobre escalares

Hay funciones matematicas elementales que operan de modo escalar. Estas funciones, que com-prenden las funciones matematicas trascendentales y otras funciones basicas, actuan sobre cadaelemento de la matriz como si se tratase de un escalar. Se aplican de la misma forma a esca-lares, vectores y matrices. Algunas de las funciones de este grupo son las que se relacionan acontinuacion. Se debe entender que si el argumento o argumentos sobre los que actua la funcionson matrices o vectores entonces dicha funcion actua termino a termino. Ası, si x es una matriz,sin(x) devuelve una matriz cuyos elementos son los senos de los elementos de la matriz x.

TRIGONOMETRICAS

sin(x) senocos(x) cosenotan(x) tangentecot(x) cotangentsec(x) secantecsc(x) cosecanteasin(x) arco senoacos(x) arco cosenoatan(x) arco tangente (devuelve un angulo entre −π/2 y +π/2)atan2(x,y) arco tangente (devuelve un angulo entre −π y +π); se le

pasan 2 argumentos, proporcionales al seno y al cosenoacot(x) arco cotangenteasec(x) arco secanteacsc(x) arco cosecantesinh(x) seno hiperbolicocosh(x) coseno hiperbolicotanh(x) tangente hiperbolicacoth(x) cotangente hiperbolicasech(x) secante hiperbolicacsch(x) cosecante hiperbolicaasinh(x) arco seno hiperbolicoacosh(x) arco coseno hiperbolicoatanh(x) arco tangente hiperbolicaacoth(x) arco cotangente hiperbolicaasech(x) arco secante hiperbolicaacsch(x) arco cosecante hiperbolica

Page 56: Guia para usar matlab

Funciones incorporadas en MATLAB 56

EXPONENCIALES

exp(x) funcion exponenciallog(x) logaritmo natural (neperiano)log10(x) logaritmo decimallog2(x) logaritmo en base 2sqrt(x) raız cuadradarealpow(x) potencia que da error si x no es realreallog(x) logaritmo neperiano de numeros realesrealsqrt(x) raız cuadrada de numeros mayores o iguales a cero

COMPLEJAS

abs(x) valor absoluto o modulo si x es un numero complejoangle(x) argumento del numero complejo xcomplex(x,y) devuelve el numero complejo x+ iyconj(x) complejo conjugadoreal(x) parte realimag(x) parte imaginariaisreal(x) 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 unnumero complejo, devuelve un vector unitario en la mismadireccion que x

rem(x,y) resto de la division de x entre y. Los argumentos son numerosreales (no necesariamente enteros)

mod(x,y) similar a rem (Ver diferencias con el sistema de ayuda)round(x) redondeo hacia el entero mas proximofix(x) redondea hacia el entero mas proximo a 0floor(x) valor entero mas proximo hacia −∞ceil(x) valor entero mas proximo hacia +∞gcd(x,y) maximo comun divisorlcm(x,y) mınimo comun multiplo

Page 57: Guia para usar matlab

Funciones incorporadas en MATLAB 57

Hay otras funciones escalares que pueden ser consultadas a traves de la ayuda en el apartadomatlab/specfun.

A.2. Funciones que actuan sobre vectores

Las siguientes funciones actuan sobre vectores. Aquı se presentan solo algunas funciones. Unarelacion completa de todas las funciones soportadas por MATLAB se puede obtener consultandola ayuda: matlab/datafun.

length(x) devuelve la longitud del vector x[vM,pM]=max(x) maximo elemento de un vector. Devuelve el valor maximo

vM y la posicion que ocupa pM en el vector[vm, pm]=min(x) mınimo elemento de un vector. Devuelve el valor mınimo y

la posicion que ocupasum(x) suma de los elementos de un vectorcumsum(x) devuelve el vector suma acumulativa de los elementos de un

vector. Es decir, el primer elemento del nuevo vector es elmismo que el de x, el segundo es la suma de los dos primerosde x, el tercero es la suma de los tres primeros vectores dex, y ası sucesivamente

mean(x) valor medio de los elementos de un vectorstd(x) desviacion tıpicaprod(x) producto de los elementos de un vectorcumprod(x) devuelve el vector producto acumulativo de los elementos de

un vector (como en cumsum pero respecto al producto)[y,i]=sort(x) ordenacion de menor a mayor de los elementos de un vector

x. Devuelve el vector ordenado y, y un vector i con las posi-ciones iniciales en x de los elementos en el vector ordenado

En realidad estas funciones se pueden aplicar tambien a matrices , pero en ese caso se aplicanpor separado a cada columna de la matriz, dando como valor de retorno un vector resultado deaplicar la funcion a cada columna de la matriz considerada como vector. Si estas funciones sequieren aplicar a las filas de la matriz basta aplicar dichas funciones a la matriz traspuesta.

A.3. Funciones que actuan sobre matrices

Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecenalgunas de las funciones mas utiles y potentes de MATLAB. No estan todas las que soportaMATLAB. La relacion completa se puede consultar a traves de la ayuda: matlab/elmat ymatlab/matfun principalmente. Se clasificaran en varios subgrupos:

Page 58: Guia para usar matlab

Funciones incorporadas en MATLAB 58

FUNCIONES MATRICIALES ELEMENTALES

A’ calcula la traspuesta (conjugada) de la matriz AA.’ calcula la traspuesta (sin conjugar) de la matriz A. Si la

matriz A es de numeros reales A.’ y A’ producen el mismoresultado.

trace(A) devuelve la traza de la matriz cuadrada A[m,n] = size(A) devuelve el numero de filas m y de columnas n de una matriz

rectangular Anumel(A) devuelve el numero de elementos de la matriz A.

FUNCIONES MATRICIALES ESPECIALES

power(A,b) Si A = [aij ] devuelve la matriz cuyos elementos son abij .

power(b,A) devuelve la matriz cuyos elementos son baij .exp(A) devuelve una matriz cuyos elementos son exp(aij) = eaij .sprt(A) devuelve una matriz cuyos elementos son

√aij .

log(A) devuelve una matriz cuyos elementos son ln(aij).mpower(A,n) devuelve la matriz A · . . . ·A n veces, si n es un entero.expm(A) devuelve la exponencial de A; i.e. eA.

sqrtm(A) devuelve√A; i.e. una matriz que multiplicada por sı misma

da A.logm(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) respec-tivamente.

FUNCIONES PARA MANIPULAR MATRICES

cat(Dim,A,B) concatena las matrices A y B, i.e. las pone una junto a laotra. Si Dim=1 B debajo de A y si Dim=2 pone B detras deA

reshape(A,m,n) cambia el tamano de A a una matriz m× ndiag dependiendo del argumento se emplea para construir una

matriz diagonal o para extraer la diagonal de una matrizblkdiag(A,B) construye una matriz diagonal por bloquestril(A) extrae la parte triangular inferior de Atriu(A) extrae la parte triangular superior de Afliplr(A) permuta las columnas de A: la ultima pasa a ser la primera,

la anteultima pasa a ser la segunda, etc..

Page 59: Guia para usar matlab

Funciones incorporadas en MATLAB 59

flipud(A) lo mismo que fliplr pero por filasrot90(A) rota A 90 grados[I,J,V]= find(A) encuentra las filas y columnas donde estan los elementos no

nulos de A y los almacena en I y J , respectivamente. En Vpone el vector de elementos no nulos.

end(A) devuelve el ultimo ındice de A

FUNCIONES DE ANALISIS MATRICIAL

n=norm(v) norma `2 del vector v o de la matriz, si el argumento es unamatriz.Hay variantes para otras normas

n=normest(A) estimacion de la norma `2 de la matriz A. Se usa cuando eltamano de A es muy grande y se consume mucho tiempo encalcular norm(A)

r=rank(A) rango de la matriz Ad=det(A) determinante de At=trace(A) traza de AN=null(A) las columnas de N forman una base del nucleo de AQ=orth(A) las columnas de Q forman una base ortonormal del espacio

imagen de Asubspace1(A,B) angulo entre los subespacios generados por las columnas de

A y B

FUNCIONES DE FACTORIZACION DE MATRICES YDE RESOLUCION DE SISTEMAS LINEALES

/ y \ solucion de sistemas lineales (ver la ayuda “help slash”)B = inv(A) inversa de Ac = cond(A) numero de condicion de A en la norma `2. Hay una variante

para otras normasU = chol(A) descomposicion de Cholesky de una matriz definida positiva[L,U] = lu(A) descomposicion LU (con pivotamiento) de la matriz A. Es

decir, PA = LU , P una matriz de permutacion, L triangularinferior con 1’s en la diagonal y U una matriz triangularsuperior.

[Q,R]=qr(A) descomposicion QR de Ad = det(A) Determinante de la matriz cuadrada AE = rref(A) reduccion a forma de escalera por filas de una matriz rec-

tangular AU = chol(A) descomposicion de Cholesky de una matriz definida positiva

Page 60: Guia para usar matlab

Funciones incorporadas en MATLAB 60

P=pinv(A) pseudoinversa (o inversa de Moore-Penrose) de A

FUNCIONES PARA CALCULO DE VALORES PROPIOS Y SINGULARES

E=eig(A) devuelve el vector E con los valores propios de A[U,S,V]=svd(A) descomposicion de A en valores singulares: A = USV ∗

P=poly(X) si X es una matriz cuadrada, P es un vector cuyas compo-nentes son los coeficientes del polinomio caracterıstico de X.Si X es un vector, P es un polinomio cuyas raıces son lascomponentes de X

H=hess(A) forma Hessenberg de A[U,S]=schur(A) forma de Schur de A. U es la matriz unitaria tal que A =

USU∗

[U,S]=rsf2csf(U,R) transforma la forma de Schur real en la compleja. La formade Scur compleja es la habitual: una matriz triangular su-perior con los valores propios (posiblemente complejos) enla diagonal. La forma real de Schur se refiere a una matrizreal cuyos valores propios complejos aparecen en pares con-jugados. La matriz R de la forma de Schur es real y en ellaaparecen bloques diagonales 2 × 2 asociados a los valorespropios complejos conjugados.

[U,S]=cdf2rdf(U,R) el recıproco del anterior. Convierte la forma diagonal com-pleja de Schur de una matriz real a la forma real.

Page 61: Guia para usar matlab

Apendice B

Consejos para el uso de Matlab enpicasso

B.1. Transferencia de ficheros a picasso

Para transferir ficheros a picasso desde el aula de ordenadores sigue las siguientes instrucciones:

1. Selecciona Programas ->FileZilla Ftp Client ->Filezilla . Veras el siguiente icono:

2. Aparecera la siguiente ventana

3. En la ventanita Servidor escribe la direccion de picasso: 158.227.5.31, En Nombre de

ususario escribe el nombre de tu cuenta. En Contrase~na tu contrasena y puerto escribe22. A continuacion pulsa la tecla “Entrar”.

4. Confirma la conexion si ası te lo pide.

5. Aparecera una ventana como la siguiente:

61

Page 62: Guia para usar matlab

Consejos para el uso de Matlab en picasso 62

Las ventanas de la izquierda muestran el contenido del ordenador en el que estas actuando(el cliente) y las de la derecha el de tu cuenta en picasso (servidor).

6. En picasso cambia al directorio matlab pinchando sobre el. Si todavıa no lo has creadoprocede de la siguiente forma: Pincha con el boton derecho del raton en cualquiera delas ventanas correspondientes a picasso. Te aparece un menu en el que puedes seleccionarcrear directorio. Una vez hecho, aparece una ventanita con el “path” completo deldirectorio que se creara. Comprueba que es correcto y escribe el nombre del directorio; eneste caso, matlab (en minusculas).

7. Para trasladar ficheros entre el cliente y el servidor muevete al directorio que contiene elfichero que quieres transferir y al directorio de destino. Arrastra entonces el fichero de unaventana a la otra. Comprueba que la transferencia ha sido correcta.

Una vez terminada la transferencia, sal de FileZilla.

Este programa de transferencia segura de ficheros puedes obtenerlo de forma gratuita en la red.Para ello busca e instala los programas putty y FileZilla.

B.2. Primer uso de MATLAB

La primera vez que vayas a usar MATLAB en el servidor del Departamento de MatematicaAplicada y EIO, picasso, debes hacer lo siguiente:

1. Abre una ventana de comandos o “x-terminal”

2. Escribe en ella matlab

3. Una vez abierto MATLAB, pincha sucesivamente en File→ Preferences→ Editor/Debugger.

4. Selecciona Text Editor

5. Escribe en el espacio en blanco: /usr/bin/gedit

6. Pincha en OK

Page 63: Guia para usar matlab

Consejos para el uso de Matlab en picasso 63

La razon es que el editor que tiene por defecto MATLAB no funciona bien (en la version instaladaen picasso) con el sistema operativo Solaris y hay que definir uno que sı lo haga. Hemoselegido gedit como editor por defecto, pero si prefieres otro (hay varios posibles) basta sustituir/usr/bin/gedit por el correspondiente comando.

Puedes automatizar el modo de abrir MATLAB anadiendo un icono al escritorio de modo queal pinchar sobre el se lance MATLAB. El procedimiento es el siguiente:

1. Coloca el raton en cualquier punto libre del escritorio y haz “click” con el boton derecho.Aparece un menu.

2. Pincha sobre Create Launcher. Aparece un cuadro con recuadros para rellenar.

3. En el recuadro Name escribe MATLAB

4. En el recuadro Command escribe /opt/matlab2007/bin/matlab

5. Los demas recuadros puedes dejarlos en blanco.

6. Pincha sobre el cuadradito que sirve para seleccionar Run in terminal

7. Pincha en el cuadro grande en el que pone No Icon. Se abrira una ventana con posiblesdibujos a utilizar.

8. En el recuadro superior pone /usr/share/pixmaps. Sustituyelo por/opt/matlab2007/X11/icons/matlab48c icon.xpm y pincha en OK.

Aparecera el icono de MATLAB en tu escritorio. Ahora pinchando (doble click) sobre el sedeberıa abrir MATLAB. No olvides cambiar el editor.