Está en la página 1de 63

cticas de Ampliacio

n
Pra
todos Nume
ricos
de Me
con MATLAB

Ion Zaballa

Indice general
1. Lo B
asico

1.1. Introducci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2. Comienzo y Fin de una sesi


on de MATLAB . . . . . . . . . . . . . . . . . . . . .

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

1.4. Edici
on en la Lnea de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . .

2. Matrices y Vectores

2.1. Generaci
on de matrices explcitamente . . . . . . . . . . . . . . . . . . . . . . . .

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

11

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

12

2.2. Manipulaci
on 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. Lneas de comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

3.2. El Camino de b
usqueda (SEARCH PATH) de MATLAB . . . . . . . . . . . . . .

27

3.3. Manipulaci
on de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

3.3.1. Ejecuci
on de Programas Externos

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

30

3
4. Programaci
on 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. Presentaci
on de los resultados . . . . . . . . . . . . . . . . . . . . . . . . .

41

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

42

5. N
umeros complejos y polinomio

50

5.1. N
umeros Complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

5.2. Calculo con Polinomios

51

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

A. Funciones incorporadas en MATLAB

54

A.1. Funciones que act


uan sobre escalares . . . . . . . . . . . . . . . . . . . . . . . . .

55

A.2. Funciones que act


uan sobre vectores . . . . . . . . . . . . . . . . . . . . . . . . .

57

A.3. Funciones que act


uan 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

Captulo 1

Lo Basico

1.1.

Introducci
on

Este documento pretende ser una gua basica para introducirse de forma personal en el uso
de MATLAB y en relaci
on con las asignaturas Analisis Matricial Aplicado y Ampliacion de
Metodos Numericos. Por lo tanto, aqu solo se cubriran aquellos aspectos de MATLAB que
tienen relaci
on con la materia discutida en dichas asignaturas. En otros documentos, que se
entregaran en clase, se plantear
an ejercicios en base al contenido de esta gua y que deben ser
resueltos personalmente. Si se quiere disponer de una buena y completa gua de MATLAB, mi
recomendaci
on 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 de
y con matrices, durante los u
ltimos a
nos ha evolucionado de forma que hoy se puede considerar
como un software de prop
osito general para todas las ramas de la matematica y la ingeniera
desde el punto de vista numerico y computacional. Tambien es posible el calculo simbolico con
MATLAB siempre que se disponga del toolbox apropiado; en este caso el Symbolic toolbox. Existen muchos otros toolboxes que, sobre la base del n
ucleo de MATLAB, proporcionan funciones
especficas para el c
alculo numerico de ciertas partes concretas de la matematica, la ingeniera
y otras ciencias. Si se quiere informaci
on sobre los productos relacionados con MATLAB puede
visitarse la p
agina web de la empresa que lo desarrolla: www.mathworks.com.
Trabajando con MATLAB se debe tener muy claro que las unidades basicas son matrices (un
escalar es, por lo tanto, una matriz 1 1), y que por lo tanto todas las operaciones se refieren
a matrices.
Se puede ejecutar MATLAB sobre cualquier sistema operativo. Se presupone que las practicas se
realizaran en la sala de inform
atica del Departamento de Matematica Aplicada y EIO o en una
4

Lo Basico

de las aulas de ordenadores de la Facultad de Ciencias. En el primer caso, la sala esta compuesta
de una serie de terminales gr
aficos conectados a un servidor de SUN Microsystems dotado del
sistema operativo UNIX Solaris y cuyo nombre en internet es picasso.lc.ehu.es. En lo sucesivo
hablaremos de picasso para referirnos a el. En el segundo caso se trata de un aula de ordenadores
personales con sistema operativo MSWindows (en alguna de sus versiones).
A partir de la versi
on 6 los interfaces graficos para los sistemas basados en MSWindows y UNIX
son muy parecidos, as que hay muy pocas diferencias en el entorno de trabajo de MATLAB
para ambos sistemas operativos. Ademas, las u
ltimas versiones de MATLAB (desde Release
14MATLAB 7) corrigen algunas deficiencias de edicion con el teclado en castellano (como
la ubicacion del smbolo [ o el acento circunflejo ^) que tenan las versiones anteriores para los
sistemas UNIX. Esto significa que las explicaciones que damos en estas notas son, en su mayora,
de aplicacion para MATLAB bajo ambos sistemas.

1.2.

Comienzo y Fin de una sesi


on de MATLAB

Una sesion de MATLAB se comienza de forma diferente seg


un la plataforma sobre la que lo
ejecutemos. En un PC o Mac basta hacer doble click con el boton izquierdo del raton sobre
el icono de MATLAB. En picasso podemos ejecutar MATLAB en modo consola o utilizando un
interfaz 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 escribir
matlab y pulsar la tecla de entrada.
Trabajando en picasso en modo gr
afico, MATLAB puede consumir muchos recursos del sistema;
principalmente si hay muchos usuarios conectados y dependiendo de la calidad de los terminales
graficos. Si este fuera el caso (que se nota por una excesiva ralentizacion del sistema) es recomendable trabajar en modo consola. En este modo hay una serie de reglas que se recomienda
utilizar y que se exponen en el Apendice B.
Trabajando en modo gr
afico, bien sea bajo UNIX o MSWindows, una vez ejecutadas las acciones
mencionadas, aparecer
a el logotipo de MATLAB y a continuacion una ventana parecida la que se
muestra en la Figura 1.1 (la figura mostrada corresponde al release 14. En las nuevas versiones la
ventana es diferente, pero todava guarda un cierto parecido). Si es la primera vez que se ejecuta
MATLAB, la ventana principal puede estar compuesta de otras varias, por ejemplo Launch
Pad, Command History y Command Window. De momento solo nos interesa la u
ltima de ellas
que es la ventana de comandos de MATLAB. Por ello, aunque no es estrictamente necesario,
cerramos las dem
as con un click del raton en el smbolo
de cada ventana. En realidad hay
otras ventanas ocultas que se pueden ir cerrando sucesivamente hasta que no quede mas que la
ventana Command Window. Todas estas ventanas tienen, de momento, un interes secundario y

Lo Basico

Figura 1.1: Ventana inicial de MATLAB.


siempre se pueden volver a abrir seleccionandolas con el raton en el men
u view de la ventana
principal.
En la ventana de comandos de MATLAB aparece el smbolo >> (este es el prompt de
MATLAB) y el cursor parpadeando. El programa esta preparado para recibir ordenes.
Para finalizar la sesi
on en cualquier sistema basta escribir el comando quit. Alternativamente
se puede elegir Exit MATLAB en el men
u File del men
u 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 de
entrada.

1.3.

Sistema de Ayuda

El sistema de ayuda de MATLAB es muy completo. Hay varios niveles de ayuda: desde demos
hasta ayuda especializada para saber lo que hace una determinada funcion o comando. Empezando por lo u
ltimo, si se quiere saber, por ejemplo, lo que es y hace el comando lu se teclea en
la ventana de comandos help lu o helpwin lu. MATLAB responde, en la propia ventana de
comandos (en el primer caso) y en una ventana aparte en formato 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 relaci
on de las carpetas de MATLAB que contienen ayuda y una
breve descripci
on del contenido de cada carpeta. Pinchando en cada una de ellas se obtiene un
listado con los comandos o funciones que hay en dicha carpeta. Al pinchar, de nuevo, en cada
uno de ellos se obtiene una ayuda exhaustiva de lo que hace cada funcion.
Los dos niveles de ayuda anteriores (help funci
on y helpwin) estan disponibles tanto en modo
grafico como en modo consola. Si se trabaja en modo grafico hay, ademas, una tercera posibilidad
de ayuda m
as general. Pinchando en Help en el menu principal de MATLAB y seleccionando
Product Help aparecer
a una nueva ventana como la de la Figura 1.2 con toda la ayuda de

Lo Basico

MATLAB. En la parte izquierda aparece un men


u que se puede desplegar pinchando en el

Figura 1.2: La ventana de ayuda de MATLAB.


. A partir de aqu se puede ir de un sitio a otro pinchando en el lugar apropiado
smbolo
como en un navegador de internet.

1.4.

Edici
on en la Lnea de Comandos

Si se comete alg
un error cuando se est
a introduciendo un comando de MATLAB, no es necesario
volver a reescribir todo de nuevo. Las teclas de flechas o la combinacion de la tecla ctrl y otra
pueden ayudarte:

ctrl-
ctrl-
Inicio
Fin
Esc
Supr
Backspace

ctrl-p
ctrl-n
ctrl-b
ctrl-f
ctrl-r
ctrl-l
ctrl-a
ctrl-e
ctrl-u
ctrl-d
ctrl-h
ctrl-k

Reescribe la lnea anterior


Reescribe la lnea siguiente
Mueve el cursor un caracter hacia atras
Mueve el cursor un caracter hacia adelante
Mueve el cursor una palabra a la derecha
Mueve el cursor una palabra a la izquierda
Mueve el cursor al comienzo de la lnea
Mueve el cursor al final de la lnea
Borra la lnea
Borra el caracter sobre el cursor
Borra el caracter que esta delante del cursor
Borra todo desde el cursor hasta el fin de la lnea

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

Lo Basico

comando que comenzaba con esos caracteres. Sucesivas pulsaciones de producen la aparici
on
de los anteriores comandos que empiezan por las letras o smbolos escritos.
Tambien se puede utilizar el cl
asico sistema de copiar y pegar para producir ordenes en la lnea
de comandos.

Captulo 2

Matrices y Vectores

Vectores y matrices son para MATLAB la misma cosa. Se pueden introducir matrices en
MATLAB de varias formas:
Introduciendo una lista explcita 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 captulo analizaremos cada una de estas formas de generar matrices y vectores.

2.1.

Generaci
on de matrices explcitamente

La forma m
as sencilla de introducir matrices es escribiendo explcitamente los elementos de la
matriz. Las otras formas de generar matrices las iremos viendo posteriormente. Para obtener
una 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

Matrices y Vectores

10

Debe observarse que el n


umero de elementos en cada fila debe ser el mismo; en caso contrario,
MATLAB producira un mensaje de error. Por ejemplo para introduir la matriz

16 3 2 13
5 10 11 8

A=
9 6 7 12
4 15 14 1
escribiramos:
>> 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, sera:
A =
16 3 2
5 10 11
9 6 7
4 15 14

13
8
12
1

A veces el n
umero de elementos en cada fila es muy grande y es preferible introducir una fila en
cada lnea, lo u
nico que hay que hacer es terminar la lnea con tres puntos: . . . y teclear retorno.
Por ejemplo
>> A=[16
5
9
4

3 2 13; ...
10 11 8;...
6 7 12;...
15 14 1 ]

produce la misma matriz.


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

13
8
12
1

Matrices y Vectores

11

Aunque nosotros no hemos asignado la matriz a ninguna variable, MATLAB se la asigna a la


variable ans, que es una variable predefinida en el sistema. Esta variable es como las dem
as.
Dado que A y ans son dos variables a las que les hemos asignado el mismo valor, el resultado de
multiplicar A por s misma debe ser el mismo que el de multiplicar ans por s misma:
>> A*A
ans =
341
261
285
269

285
301
309
261

261
309
301
285

269
285
261
341

>> ans*ans
ans =
341
285
261
301
285
309
269
261

261
309
301
285

269
285
261
341

MATLAB distingue entre may


usculas y min
usculas de forma que a y A son dos variables distintas.

Para saber las variables que tienes definidas puedes usar el comand who. Estas
tambien aparecen
en la ventana workspace. En el siguiente captulo se explica como acceder a esta ventana y lo
que significa.

2.1.1.

Elementos de Matrices

En el ejemplo anterior los elementos de la matriz eran n


umeros enteros, pero en realidad los
elementos 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 n


umero de funciones elementales matematicas, incluyendo valor
absoluto abs, raz cuadrada sqrt,
exponencial exp, seno sin, etc. Todas ellas se usan mas o
menos igual. As, para calcular 3 escribiramos sqrt(3). MATLAB no produce un error si se
le pide la raz cuadrada o el logaritmo de un n
umero negativo, sino que devuelve el correspondiente n
umero complejo. Tambien proporciona muchas funciones matematicas avanzadas como
las funciones de Bessel o la funci
on Gamma. Una lista de todas las funciones elementales con su
uso se puede obtener utilizando la ayuda interactiva:

Matrices y Vectores

12

>> helpwin
y haciendo doble click en /matlab/elfun y /matlab/specfun. En el Apendice A se resumen algunas
de la funciones m
as importantes de MATLAB.
Tambien hay una serie de constantes predefinidas:
pi
i
j
eps
realmin
realmax
inf
nan

2.1.2.

3.14159265. . .

la unidad imaginaria, 1.
lo mismo que i.
precisi
on relativa de los n
umeros en coma flotante, 252 = 2,204e 16. Es decir distancia
de 1.0 al siguiente n
umero mas proximo en coma flotante.
n
umero en coma flotante mas peque
no, 21022 .
n
umero en coma flotante mas grande, (2 eps)21023 .
infinito. Se produce al dividir un n
umero distinto de cero por cero.
Not-A-Number. Se produce al evaluar expresiones como 0/0 o inf-inf.

Formatos de Salida

En el ejemplo de m
as arriba hemos podido observar que aparentemente MATLAB siempre responde redondeando los resultados de las operaciones correspondientes a cuatro cifras decimales.
En realidad, los resultados puede presentarlos de diversas formas. Para ello se dispone del comando format. Estos son los posible formatos
format
format
format
format
format
format
format
format

short
long
hex
bank
short e
short g
long e
loose

format compact
format rat

coma fija con 4 decimales(formato por defecto)


coma fija con 15 decimales
cifras hexadecimales
n
umeros con dos cifras decimales
notaci
on cientfica con 4 decimales
notaci
on cientfica o decimal, dependiendo del valor
notaci
on cientfica con 15 decimales
intercala algunas lneas en blanco en las salida para facilitar
la lectura (por defecto)
elimina las lneas en blanco del fomat loose
aproxima los n
umeros a cocientes de enteros; i.e. n
umeros
racionales

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

Matrices y Vectores

13

Las expresiones se pueden construir con n


umeros (reales o complejos) y utilizando los operadores
aritmeticos y las reglas de precedencia habituales (en caso de duda siempre se pueden utilizar
parentesis):
+

/
\

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 divisi
on
por la izquierda. Si A y B son matrices y A es invertible entonces A\B = A1 B y B/A = BA1 .
Ambas producen lo mismo cuando son aplicadas a n
umeros. As 1/4 y 1 \ 4 producen el mismo
0
valor numerico: 0,25. De la misma forma A es la transpuesta de A y si a es un n
umero a0 = a.
Si A no es invertible A \ B es una matriz C tal que A C es aproximadamente B (en cierto
sentido que estudiaremos en teora). De la misma forma B/A es una matriz C tal que C A es
aproximadamente 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 derecha
termino a termino
division a la izquierda
termino 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 son
el producto y la divisi
on (en el sentido de mas arriba) habituales. Cuando estos operadores
estan 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 operaci
on se hace entre una matriz y un escalar el resultado es el mismo:

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

1.0000
2.0000

Que responder
a 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 multiplicar
A por s misma tres veces; s
olo es aplicable a matrices cuadradas. Lo segundo es la matriz
cuyos elementos son los cubos de los elementos de A; es aplicable a cualquier matriz. En algunos
sistemas UNIX puede haber problemas para escribir el signo de potenciacion en MATLAB.
Para evitar el uso de este smbolo tenemos la siguiente alternativa:
A.^3=power(A,3)
A^3=mpower(A,3)

2.2.

Manipulaci
on de vectores y matrices

Puesto que las unidades b


asicas de MATLAB son las matrices, dispone de varias formas de crear
vectores 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 y
matrices cuyos elementos est
an igualmente espaciados. As
>> x=1:5
produce un vector cuyas componentes van de 1 a 5 en incrementos de 1:
x =
1

Mientras que
>> y=0:pi/4:pi
proporciona un vector entre 0 y con incrementos de /4:

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 componentes primera y u
ltima y el n
umero de ellas:
>> k=linspace(-sqrt(3),pi,5)
k =
-1.7321
-0.5136
0.7048

1.9232

3.1416

El n
umero de componentes por defecto es 100. Esto significa que una sentencia del tipo
>> k=linspace(-sqrt(3),pi);

asignara 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 m
as 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 posici
on (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 respuesta
de 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 que
vamos a cambiar y a continuaci
on recuperamos la matriz original::

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 lnea 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 orden
produce el efecto de que el resultado no se escribe en la pantalla. En cada lnea de comandos
podemos poner cuantas
ordenes queramos separadas bien sea por comas (en cuyo caso los resultados correspondientes aparecer
an sucesivamente en la pantalla) o bien por ; para que los
resultados 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 un
mensaje de error porque el tama
no de A es 4 4:
>> A(4,5)
??? Index exceeds matrix dimensions.
Desde la versi
on 5 de MATLAB se puede usar end para indicar el u
ltimo elemento de una matriz,
respecto de una dimensi
on dada. As:
>> a=4:10
a =
4
5
>> a(end)
ans =
10
>> A(end,end)
ans =
1
>> A(2,end)
ans =
15
>> A(end,2)
ans =
8

10

Matrices y Vectores

17

No solo se puede extraer cada elemento de una matriz sino cualquier submatriz. Para ello basta
expresar la submatriz deseada en notacion vectorial. As, para obtener el subvector de a
formado por los u
ltimos 5 primeros elementos escribiramos:
>> a(1:5)
ans =
4

y el formado por los u


ltimos 4:
>> a(end-3:end)
ans =
7
8

10

Para obtener la submatriz formada por los elementos que ocupan las posiciones donde se interceptan las filas 1 y 3 y las columnas 3 y 4 escribiramos:
>> 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 dos
puntos:
>> A([1 2],:)
ans =
16
3
5
10

2
11

13
8

O, utilizando el comando end:


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

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 elementos
de la matriz colocados columna tras columna:
>> A(:)
ans =
16
5
9
4
3
10
6
15
2
11
7
14
13
8
12
1
La notacion vectorial para los subndices de una matriz puede utilizarse para permutar filas o
columnas de una matriz. As para obtener una matriz B con las filas primera y segunda, y las
columnas segunda y cuarta de A permutadas, haramos 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 =

Matrices y Vectores
5
16
9
4

10
3
6
15

11
2
7
14

19
8
13
12
1

Dada una matriz A podemos a


nadirle filas y columnas sin mas que especificar el vector con los
elementos que se quiere a
nadir. Por ejemplo, si a nuestra matriz A le queremos a
nadir la fila
[1 3 5 7] haramos lo siguiente:
>> C=[A;[1 3 5 7]]
C =
16
3
2
5
10
11
9
6
7
4
15
14
1
3
5

13
8
12
1
7

Claro que tambien podramos definir primero el vector fila que vamos a a
nadir y luego a
nadirlo:
>> r=1:2:7; C=[A;r]
C =
16
3
2
5
10
11
9
6
7
4
15
14
1
3
5

13
8
12
1
7

Si lo que queremos es a
nadir una columna actuaramos por transposicion (recordemos que r0 es
la transpuesta de r):
>> [A r]
ans =
16
5
9
4

3
10
6
15

2
11
7
14

13
8
12
1

1
3
5
7

Esta forma de crear matrices a partir de otras mas peque


nas nos permite ir creando matrices
sobre la marcha empezando desde una matriz vaca. En efecto, la orden >> B=[] nos devuelve
una matriz sin elementos a la que podemos ir a
nadiendole filas o columnas como hemos hecho
mas arriba:
>> B=[]

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 vaca. Simplemente
igualamos a [] la submatriz que queramos eliminar:
>> B2(:,2)=[]
B2 =
1
7
2
8
3
9
nos devuelve la submatriz de B2 que se obtiene al suprimir la segunda columna.

2.3.

Matrices a partir de funciones predefinidas en MATLAB

Hay un buen n
umero de funciones de matrices predefinidas en MATLAB. Una relacion de todas
ellas con la descripci
on de su uso la puedes encontar escribiendo helpwin y en la ventana que
aparece haciendo doble click en matlab/elmat. Describimos aqu las funciones para generar
las matrices m
as elementales:
zeros(m,n)
ones(m,n)
rand(m,n)
randn(m,n)
eye(m,n)
diag(v,k)

Crea una matriz de tama


no m n cuyos elementos son todos 0.
Crea una matriz de tama
no m n cuyos elementos son todos 1.
Crea una matriz de tama
no m n con elementos aleatorios distribudos
uniformemente entre 0 y 1
Crea una matriz de tama
no m n con elementos aleatorios elegidos
con una distribuci
on normal de media 0 y varianza y desviacion standrad 1
Crea una matriz de tama
no m n con 1s en la diagonal principal
El argumento v es un vector y el argumento k es opcional pero si
se da, debe ser un n
umero entero. MATLAB crea una matriz cuadrada de tama
no
n + |k|, con todos lo elementos cero excepto los de la k-esima diagonal
que son los elementos del vector v. Poner k = 0 o no dar un valor
explcito produce el mismo resultado: una matriz diagonal con el vector v
en la diagonal principal. Si k > 0 el vector v aparece en la k-esima

Matrices y Vectores

diag(A,k)

21

supradiagonal y si k < 0 en la k-esima subdiagonal.


El argumento A es una matriz y el agumento k es opcional pero si
se da, debe ser un n
umero entero. MATLAB produce un vector: la k-esima diagonal
de la matriz A.

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

0
0

0
0

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

Matrices y Vectores

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 a
partir de ficheros externos. Estos son ficheros almacenados en el disco duro y que han sido
producidos bien por MATLAB o bien por nosotros mismos. En cualquier caso, conviene tener
un directorio especfico donde almacenar estos y otros posibles ficheros. Hablaremos mas extensamente sobre este tema y otros relacionados cuando estudiemos el entorno de trabajo de
MATLAB. Ahora comentamos s
olo lo necesario para crear matrices a partir de ficheros externos.
Me referire a matlabdir como el directorio donde se guardaran todos los ficheros de MATLAB
creados 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 del
sistema de archivos nos encontramos. Esto se hace con el comando pwd. Se puede cambiar al
directorio que se desee con el comando cd y crear entonces el directorio matlabdir con la orden
habitual: mkdir matlabdir. Hay otras ordenes correspondientes al sistema operativo que se
veran mas adelante. Tambien se pueden consultar con el sistema de ayuda: helpwin y entonces
matlab/general.
Lo siguiente que tenemos que hacer es posibilitar que MATLAB reconozca el directorio matlabdir.
Es decir, que sepa de su existencia para que pueda encontrar los ficheros all depositados. Para
ello debemos a
nadirlo al path de MATLAB con el comando addpath. Por ejemplo: addpath
/ruta completa/matlabdir. Si ahora tecleamos path, en la primera lnea debera aparecer la
ruta 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 por
sesiones anteriores de MATLAB, o de texto. Para obtener matrices de ficheros de texto
externos estos deben estar organizados como una tabla rectangular de n
umeros, separados

Matrices y Vectores

23

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

3
10
6
15

2
11
7
14

13
8
12
1

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

Captulo 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 lnea de


comandos 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 lo
segundo, estos dos comandos muestran el contenido del espacio de trabajo en cada momento. El
comando who proporciona una lista corta, mientras que whos da, ademas, el tama
no y alguna
informacion adicional sobre almacenamiento de las variables que se han utilizado. He aqu un
ejemplo:
>> who
Your variables are:
A a b
>> whos
Name
Size
A
a
b

3x4
1x7
1x100

Bytes
96
56
800

Class
double array
double array
double array

Grand total is 119 elements using 952 bytes


Para abrir la ventana correspondiente al espacio de trabajo procedemos de la siguiente manera:
desplegamos el men
u Desktop (versi
on 7) o View (versiones anteriores a la 7), que esta en el
24

El Entorno de Trabajo de MATLAB

25

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

Figura 3.1: Ventana del Espacio de Trabajo.


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

3.1.1.

Comandos save y load

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

El Entorno de Trabajo de MATLAB

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

3.1.3.

Lneas de comentarios

Para MATLAB el car


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

El Entorno de Trabajo de MATLAB

3.2.

27

El Camino de b
usqueda (SEARCH PATH) de MATLAB

El search path de MATLAB es una lista de directorios que se puede ver y modificar a partir
de la lnea de comandos. El comando path hace que se escriba el search path de MATLAB (el
resultado 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 el
siguiente:
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 funciones en MATLAB).
3. Comprueba si nombre1 es una funcion interna o intrnseca de MATLAB.
4. Comprueba si hay un fichero llamado nombre1.mex o nombre1.m en el directorio actual
(de los ficheros M hablaremos m
as adelante, los ficheros .mex tienen un significado especial
para MATLAB del que no hablaremos aqu).
5. Comprueba si hay ficheros llamados nombre1.mex o nombre1.m en los directorios incluidos
en el search path de MATLAB.
Estos pasos se realizan en el orden indicado. En cuanto se encuentra lo que se esta buscando se
detiene la b
usqueda y se utiliza el fichero que se ha encontrado. Si no se encuentra en todo el
proceso MATLAB produce un error:
>> nombre1
??? Undefined function or variable nombre1.

El Entorno de Trabajo de MATLAB

28

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

Figura 3.2: Ventana con el path de MATLAB.


Se puede especificar, adem
as que se incorporen al search path todos los subdirectorios del
directorio seleccionado. Tambien se pueden quitar directorios con la opcion Remove (es mejor
que ni lo intentes salvo que estes seguro/a de lo que haces). El nuevo directorio se puede a
nadir al
comienzo o final de la lista. Tal y como hemos mencionado, el orden de la lista es muy importante
porque refleja el orden de la b
usqueda: si una funcion esta en dos directorios, se utilizara la que
primero se encuentre. Las operaciones realizadas se pueden salvar utilizando Save. En MATLAB
bajo Windows el listado de directorios salvado se hace permanente, de forma que la proxima vez
que se empieza una sesi
on de MATLAB las carpetas a
nadidas apareceran en el path browser.
Este no es el caso en sistemas UNIX porque la posibilidad de escribir de forma permanente en
el directorio donde est
a instalado MATLAB es exclusiva del administrador del sistema. Para
a
nadir permanentemente unos directorios al search path en UNIX hay que hacerlo a traves
del fichero startup.m del que hablaremos enseguida.
Tambien se puede incluir un directorio de b
usqueda desde la lnea de comandos de MATLAB.
La forma de hacerlo depende del sistema operativo sobre el que este instalado MATLAB. Lo
mejor es utilizar el comando helpwin y consultar en matlab/general lo relativo a los comandos
path, addpath y rmpath.
El fichero responsable de los par
ametros con los que se inicia cada sesion de MATLAB es matlabrc.m que se encuentra en el subdirectorio toolbox/local de la instalacion de MATLAB (en
sistemas UNIX). En sistemas multiusuario, como picasso, solo puede modificarlo el administrador. 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 sesi
on
de MATLAB, este se inicie con los parametros que cada cual desee. Este fichero se debe llamar
startup.m y debe estar, en sistemas UNIX, en el subdirectorio home/izaballa/matlab del
correspondiente ususario. Bajo Windows este fichero se debe colocar en la subcarpeta work de
la carpeta donde est
a instalado MATLAB (posiblemente C:\matlabr14 o algo as). Por ejemplo,
un fichero startup.m que contenga las siguientes lneas:

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) empiece
una sesion de MATLAB en picasso:
Cambiar
a al directorio matlab, donde posiblemente se encuentren los trabajos de MATLAB
de Julen.
Utilizar
a el formato compact para exponer las salidas producidas por MATLAB (este
formato, como ya se dijo en el Captulo 2, suprime algunos saltos de lnea y presenta las
salidas m
as compactas).
A
nadir
a el directorio /usr/alu/julen/matlab al final del search path.
Abrira el editor de openxt y
Escibir
a Kaixo como primera lnea en la ventana de comandos de MATLAB.
Bajo Windows el fichero que producira algo parecido sera
cd c:\matlabr14\programas
format compact
addpath c:\matlabr14\programas -end
edit
disp(Kaixo)
De forma an
aloga, al abandonar la ejecucion de MATLAB con el comando quit se ejecuta
automaticamente el fichero finish.m, siempre que se encuentre en alguno de los directorios del
search path. Este fichero se puede utilizar por ejemplo para guardar el espacio de trabajo de
MATLAB (recuerda el comando save).

3.3.

Manipulaci
on de ficheros

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

Windows
dir
type
del o erase
cd

UNIX
ls
cat
rm
cd
pwd

El Entorno de Trabajo de MATLAB

30

Como en todos los sistemas operativos se pueden utilizar los caracteres comodn, pathnames y
nombres de los discos o directorios en la forma habitual. As los comandos
>> cd c:\matlab
>> delete *.dos
produciran, bajo MS-DOS o Windows, un cambio al directorio matlab que se encuentra en
el disco C (en caso de que tal directorio exista; si no, produce un mensaje de error). Y a
continuacion se borraran 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 que
todos los directorios cuelgan del directorio raz: /. 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 (como
en UNIX) para conocer en que directorio nos encontramos trabajando.

3.3.1.

Ejecuci
on de Programas Externos

El cierre de exclamaci
on, !, indica que el resto de la lnea es un comando del sistema operativo.
Esto puede ser u
til porque permite ejecutar programas o invocar utilidades del sistema operativo
sin salir de MATLAB aunque rara vez se utiliza cuando el sistema operativo es Windows. Por
ejemplo, 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 sistema
Open windows de Solaris y cargar en el el fichero parabola.m. El smbolo & le pide al sistema
operativo que lo ejecute en background; es decir, que deje la ventana de comandos de MATLAB
libre para seguir tecleando nuevas
ordenes.

Captulo 4

Programaci
on 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 que
facilitan 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 comando
admite 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 puede
hacer, puedes usar el comando helpwin graph2d plot. Por ahora la u
nica informaci
on
pertinente es que plot(t,x) dibuja el vector t versus el vector x. Esto quiere decir que si el
vector t es t = [t1 t2 t3 . . .] y x = [x1 x2 x3 . . .] entonces plot(t,x) dibuja una poligonal que
une los puntos (t1 , x1 ), (t2 , x2 ), t3 , x3 ), etc. Si estos puntos estan suficientemente proximos el
efecto 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 lnea de comando (recuerda
las dificultades que hay para usar en picasso y que este operador se puede sustituir por
power):
31

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 espaciadas entre a y b. Si estos puntos no estan muy alejados entre s, cada componente del vector
esta muy pr
oxima a la siguiente.
Otra posibilidad es escribir cada orden en una lnea:
>> 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 un
fichero, 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 peque
no) con c
odigo ejecutable por MATLAB. La traduccion de script
en castellano es algo as como gui
on pero seguiremos utilizando el original en ingles.
Una vez escrito, se salvara con el nombre que se desee, por ejemplo parabola.m (la extensi
on
.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 de
comandos; 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

Programacion en MATLAB

33

Figura 4.2: Ventana gr


afica con la parabola producida por el script parabola.m
puntos (1, a1 ), (2, a2 ), . . . . Si lo que se quiere es se
nalar con el smbolo los puntos (x1 , y1 ),
(x2 , y2 ),. . . , (xn , yn ) pero sin unirlos a traves de una poligonal basta crear los vectores x e y y
usar el comando plot(x,y,*).

4.1.1.

Operadores relacionales y l
ogicos

Para programar en MATLAB se pueden usar bucles de la forma for . . . end, o bifurcaciones
de la forma while . . . end, if. . . end y switch . . . case Su sintaxis es como en cualquier otro
lenguaje de programaci
on. La idea es que cierta accion se realice dependiendo de si una condici
on
es verdadera o no. La verdad o falsedad de estas condiciones se suele evaluar comparando dos
expresiones. Para ello existen operadores relacionales y l
ogicos. MATLAB dispone de los
siguiente operadores relacionales:
<
>
<=
>=
==
~=

menor que
mayor que
menor o igual que
mayor o igual que
igual que
distinto que

En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que
tengan un significado especial. Por ejemplo, dada una matriz A la comparacion abs(A)<eps
genera una matriz de 0s y 1s con el mismo tama
no de A. El elemento (i, j) de dicha matriz es
1 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

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

Y la sentencia any(any(abs(A)<eps)) produce un 0 (i.e. false) si todos los elementos de


any(B) son cero y 1 (true) en caso contrario.
>> any(any(B))
ans =
1
As pues, la sentencia any(any(abs(A)<eps)) se puede utilizar como una condicion. Sera verdadera si y s
olo si alg
un elemento de A es, en modulo, mas peque
no que eps. En caso contrario
es falsa.
Hay un operador l
ogico similar: all. Responde true si todos los elementos del vector son distintos
de cero; en caso contrario, responde false. Con la matriz A de mas arriba:
>> all(A)
ans =
0

En efecto, la u
nica columna de A con todos sus elementos distintos de cero es la segunda. Pero
como ninguna columna de A tiene todos sus elementos menores que eps:
>> all(abs(A)<eps)
ans =
0
0
0
Vemos en estos ejemplos que al igual que en otros lenguajes de programacion, si una comparaci
on
se cumple el resultado es 1 (true), mientras que si no se cumple es 0 (false). Recprocamente,
cualquier valor distinto de cero es considerado como true y el cero equivale a false. Cuando
los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tama
no,
la comparaci
on se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del
mismo tama
no, que recoge el resultado de cada comparacion entre elementos. Por ejemplo:

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 de
las muchas funciones l
ogicas que empiezan por is. He aqu una seleccion de ellas. Para obtener
un listado completo escribe doc is tras el prompt de MATLAB
ischar
isempty
isequal
isfinite
isfloat
isinf
isinteger
isnan
isnumeric
isprime
is real
isvector

verdadero si la entrada es un vector de caracteres


verdadero si la entrada es un vector vaco
verdadero si los vectores son iguales
detecta los elementos finitos de un vector
verdadero si el vector es de elementos en coma flotante
detecta los elementos infinitos de un vector
verdadero si el vector es de n
umeros enteros
detecta los elementos que son NaN en un vector
veradero si el vector es de n
umeros (no de caracteres)
detecta los n
umeros primos en un vector
verdadero si todos los n
umeros del vector son reales
verdadero si se trata de un vector

Algunos ejemplos adicionales con la matriz A de mas arriba


>> A
A =
1
2
0
3
>> isfinite(A)

Programacion en MATLAB

36

ans =
1
1
1
1
>> isnumeric(A)
ans =
1
>> isreal(A)
ans =
1
>> isvector(A)
ans =
0

Ademas una condici


on puede constar de una o mas operaciones relacionales. Estas
normalmente
estan concatenadas con expresiones l
ogicas cuya verdad o falsedad sigue las leyes de la logica
formal. Los operadores l
ogicos de MATLAB son los siguientes:
&
|
~
xor
any
all

y
o
negaci
on l
ogica
o excluyente
verdad si cualquiera de los elementos de un vector es no cero
verdad si todos lo elemntos de un vector son no cero

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)

Programacion en MATLAB

37

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

Una primera aplicaci


on es extraer de x los elementos no nulos:
>> x(f)
ans =
-3

-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

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

Programacion en MATLAB

38

C =
1
1
0
0
>> C(:)
ans =
1
0
1
0
0
1
>> find(A<B)
ans =
1
3
6

0
1

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 que
los de B.

4.1.2.

Bifurcaciones y Bucles

Tal y como hemos dicho m


as arriba las bifurcaciones de MATLAB son while . . . end, if. . . end
y switch . . . case. Este u
ltimo tipo de bifurcaciones no lo vamos a comentar; se puede consultar
la ayuda de MATLAB para saber como funciona. Tambien se dispone de bucles for . . . end.
La forma m
as simple de una bifurcaci
on del tipo if. . . end es la siguiente
if condicion
sentencias
end

Programacion en MATLAB

39

Existe tambien la bifurcaci


on m
ultiple, en la que pueden concatenarse tantas condiciones como
se desee, y que tiene la forma:
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opci
on por defecto para cuando no se cumplan las condiciones 1,2,3
bloque4
end
donde la opci
on por defecto else puede ser omitida: si no esta presente no se hace nada en caso
de que no se cumpla ninguna de las condiciones que se han chequeado.
Exponemos un ejemplo a continuaci
on. Recordemos que los operadores logicos se pueden combinar con los relacionales para poder comprobar el cumplimiento de condiciones m
ultiples.
Ejemplo 4.1.1 .- El siguiente programa comprueba si un n
umero es positivo, si no lo es produce
un mensaje de error con el comando disp que sirve para escribir mensajes en la pantalla (m
as
adelante se explica con detalle la acci
on de este comando). A continuacion comprueba si, siendo
positivo, es par . La orden rem(p,q) calcula el resto de la division eucldea de p por q. Si el
n
umero 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 n
umero positivo);
elseif rem(n,2)==0
a=n/2;
else
a=(n+1)/2
end
Naturalmente la condici
on n<0 | n==0 podra sustituirse por la mas compacta n<=0. Se ha
escrito de la forma expuesta para hacer uso de una condicion con dos relaciones y un operador
logico.

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

Programacion en MATLAB

40

donde condici
on puede ser una expresion vectorial o matricial. Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en condicion; es decir, mientras haya alg
un
o algunos elementos true. El bucle se termina cuando todos los elementos de condicion son
false (es decir, cero).
Ejemplo 4.1.2 .- En el siguiente ejemplo se ejecutan una serie de operaciones sobre un cierto
n
umero n mientras este se mantenga mayor que 1. Concretamente, si n es par se divide por 2 y
si es impar se multiplica por 3 y se le suma 1:
while n>1
if rem(n,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, misterio
de Siracusa, problema de Kakutani, algoritmo de Hasse o problema de Ulam).
Finalmente, los bucles del tipo for . . . end tienen la siguiente sintaxis:
for variable= expresi
on
sentencias
end
Habitualmente la expresi
on es un vector de la forma i:s:j y las sentencias se ejecutan sucesivamente con la variable igual a cada elemento de la expresi
on. Por ejemplo, para sumar los 25
primeros terminos de la serie n1 :
>> n=0;
>> for i=1:25
n=n+1/i;
end
>> n
n =
3.8160
Otra forma de definir una expresi
on 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

Programacion en MATLAB

41

Y por supuesto, se pueden encajar m


ultiples bucles for. . . end unos dentro de otros. El siguiente
codigo proporciona una matriz simetrica 5 5 con el elemento ji 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.5000
1.0000
0.3333
0.6667
0.2500
0.5000
0.2000
0.4000

4.1.3.

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

Presentaci
on de los resultados

Si en MATLAB hacemos
>> v=1:5
la respuesta es la exposici
on del resultado
v =
1

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

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). Lo
que sucede es que hay vectores de n
umeros como
>> v=[1 2 3]
v =
1
2

y hay vectores de letras o caracteres o strings como


>> v=ke kosa
v =
ke kosa
As, una frase entre acentos es un vector de caracteres. Por eso en el programa de mas arriba
escribimos disp( t sen(2*pi*t) ) para que en la pantalla aparezca exactamente la frase
t
sen(2*pi*t) .
Si se quieren conseguir formatos m
as especiales se puede usar el comando sprintf. Su uso en
MATLAB 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. Hay
dos 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 o
Java. Los ficheros M son, por lo tanto, secuencias de comandos de MATLAB que se almacenan
en ficheros y que tienen alg
un prop
osito concreto. Un fichero M puede hacer referencia a otros
ficheros M e incluso a s mismos (es decir, esta permitida la autorecursividad). Los ficheros M
son especialmente apropiados para

Programacion en MATLAB

43

experimentar con algoritmos escribiendoles en un fichero sobre el que poder hacer correcciones 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 variables
que producen un determinado resultado numerico o grafico,
construir programas que pueden ser utilizados con posterioridad varias veces,
o, simplemente, intercambiar con alg
un amigo o colega ficheros de mutuo interes.
En la pagina web de Mathworks mencionada en la Introduccion pueden encontrarse numerosos
ficheros M escritos con distintos prop
ositos, desde puramente computacionales a didacticos o
por puro placer.
Hay dos tipos de ficheros M:
Sripts o ficheros de comandos. Por lo general no tienen argumentos de entrada ni de salida
y operan con las variables del espacio de trabajo. Es decir, recogen variables ya existentes e
interact
uan con ellas para producir resultados numericos o graficos y quiza nuevas variables.
Funciones. Deben contener una primera lnea en la que aparece la palabra function.
Se diferencian de los scripts en que aceptan entradas y devuelven salidas. Las variables
internas son locales a la funci
on (salvo que sean declaradas como global)
Ya hemos visto en la secci
on anterior como hacer ficheros M de tipo script. Simplemente son
ficheros que ejecutan sucesivamente varios comandos de MATLAB con un objetivo especfico
y siempre que se ejecutan producen el mismo resultado. Volveremos sobre ellos mas adelante
para 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 en
lenguaje C o Pascal. Lo que exponemos a continuacion esta inspirado en el primer captulo del
libro Introduction to Scientific Computation de Charles F. van Loan.
Sabemos de c
alculo elemental que la serie de Taylor
Tn (x) =

n
X
xk
k=0

k!

aproxima la funci
on exponencial, ex , cerca de x = 0. Nuestro objetivo es estudiar esta aproximacion. Es decir, cu
an cerca est
a Tn (x) de ex para los diversos valores de n? Teoricamente cuanto
mayor es n m
as cerca est
a Tn (x) de ex . Para que valores de n nuestro ordenador no distingue
x
entre Tn (x) y e ?. Para ello damos por bueno el calculo que hace MATLAB de la exponencial y
creamos una funci
on de MATLAB que nos devuelva el valor de Tn (x) en funcion de x y n. Esta
funcion sera la siguiente:
function y= miexp1(x,n)
%
%Precondiciones: acepta dos valores x=n
umero real y

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 lneas en un fichero de texto y salvarlo con
el 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 s
olo puede ser
el que hemos dado a la funci
on. Debemos tener cuidado, ademas, con que el nombre de la funci
on
no coincida con un nombre ya existente en el path de MATLAB. Como las distribuciones de
MATLAB incorporan infinidad de funciones debemos elegir nombres significativos para nosotros
pero no demasiado standard; por ejemplo, podemos empezar los nombres de nuestras funciones
con el prefijo mi. . . o escoger un nombre en euskera, etc.
Al escribir una funci
on en MATLAB debes seguir unas pocas, simples e importantes reglas:
El fichero debe empezar con la palabra function y tiene la siguiente estructura
function variables de salida= Nombre de la funci
on(variables de entrada)
%
% Comentarios que definen completamente las variables que deben pasarse a la funci
on
% (variables de entrada) y el resultado que produce la funci
on (variables de salida)
%
cuerpo de la funci
on: comanos de MATLAB
En alg
un sitio del cuerpo de la funcion se debe pasar a la variable de salida el valor deseado.
Los comentarios que definen completamente la funcion deben hacerse inmediatamente
despues de la definici
on de la funcion. Esto es importante porque cuando en la ventana
de comandos se escriba help nombredelafuncion, MATLAB respondera escribiendo los
comentarios que ah se escriban. Opcionalmente, y es recomendable hacerlo, se pueden
escribir comentarios en otros lugares del cuerpo de la funcion para clarificar el objetivo de
uno o varios de los comandos que se utilizan. Estos comentarios deben ir siempre precedidos
del smbolo %.
Las variables de entrada y salida son parametros formales (es decir, letras). Cuando se
llama a la funci
on para que realice la accion que se desea, deben ser sustitudos por
parametros reales (es decir, n
umeros, vectores, matrices,...). Por ejemplo, la funcion miexp1
debe ser llamada con dos n
umeros concretos. x=miexp1(0.1,3) devolvera en la variable x
el valor de la aproximaci
on de Taylor de tercer orden en 0,1.

Programacion en MATLAB

45

Las variables que se definan en el interior de la funcion (en nuestro caso t y k) son variables
locales. Puede haber otras con el mismo nombre en el espacio de trabajo de MATLAB sin
ning
un problema.
El fichero que contiene la funci
on debe estar en el path de MATLAB.
Lo importante de las funciones de MATLAB, sean nativas o creadas por nosotros mismos, es
que pueden ser llamadas por cualquier otro programa de MATLAB, bien sea un script u otra
funcion. Por ejemplo, si queremos las graficas para cuatro valores de n = 4, 8, 16, 20 del error
relativo 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 lneas en un fichero .m (por ejemplo, smiexp1.m) tenemos un script que al
ejecutarlo en MATLAB
>> smiexp1
nos produce cuatro gr
aficas (figura 4.3), cada una correspondiente a un valor de n, con el
error relativo de la aproximaci
on. Observese el efecto del comando subplot(n,m,p). Crea una
matriz de nm figuras y asigna a la p-esima el siguiente comando plot. As p=1 corresponde a
la figura en al posici
on (1, 1), p=2 a la figura en la posicion (1, 2), etc. Todos los demas comandos
en el script ya son conocidos.
En el script hemos creado el vector x=linspace(-1,1,100) de 100 componentes y se lo hemos
pasado a la funci
on exponencial obteniendo otro vector de 100 componentes que hemos llamado
exacto. Sin embargo, para calcular Tn (x) hemos tenido que hacerlo componente a componente.
Ello es debido a que la funci
on miexp1 solo acepta escalares y devuelve escalares. MATLAB
esta pensado para trabajar con vectores, y como veremos enseguida lo hace mas rapido. Conviene
que modifiquemos nuestra funci
on para que admita vectores y produzca vectores. La modificaci
on
es muy sencilla: hay que redefinir y y t para que sean vectores del mismo tama
no que x y cuyas
componentes sean todas igual a 1. Ademas hay que usar el producto componente a componente
entre x y t.

Programacion en MATLAB

46
6

n= 4

n= 8

x 10

0.02

7
6

0.015

5
4

0.01
3
2

0.005

1
0
1

0.5

15

0.5

0
1

16

n=16

x 10

0.5

0.5

0.5

n=20

x 10

7
6

5
4

4
3
2

1
0
1

0.5

0.5

0
1

0.5

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


function y= miexp2(x,n)
%
%Precondiciones: acepta dos valores x=vector de n
umeros 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 sera igual que en el caso anterior.
As pues las variables de entrada y de salida pueden ser cualquier tipo de variable soportada por
MATLAB. No s
olo eso, pueden aparecer mezcladas. Por ejemplo las variables de entrada de la
funcion miexp2 son un vector y un n
umero. Tambien las variables de salida pueden ser varias

Programacion en MATLAB

47

y de distintos tipos. Por ejemplo, la siguiente funcion calcula el tiempo que tarda MATLAB en
crear (no escribir en pantalla, sino poner en la memoria del ordenador) m matrices aleatorias de
tama
no n n y nos proporciona la u
ltima matriz creada. Es un ejemplo un poco artificial pero
sirve para ilustrar las ideas que estamos comentando: la salida es un vector formado por dos
variables, la primera es un n
umero 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, se
trata de funciones del propio sistema, bien sean precompiladas o definidas a partir de ficheros
M): clock asigna a la variable correspondiente la hora del sistema y etime cuenta el tiempo (en
segundos) que ha pasado entre dos instantes obtenidos con clock.
Podemos hacer uso de estas dos funciones para comprobar que MATLAB emplea menos tiempo
cuando trabaja con vectores como un todo que cuando trabaja componente a componente. El
siguiente script nos sirve para comprobar el tiempo que tarda MATLAB en calcular el valor de
Tn (x) para un determinado valor de n y para vectores x de distinto tama
no con componentes
en el intervalo [-1,1]:
disp(length(x)
miexp1(x)
miexp2(x))
disp(
tiempo
tiempo )
disp(------------------------------------------------)
for k=1000:1000:10000
x=linspace(-1,1,k);
ti=clock;
y=[];
for i=1:k
y(i)=miexp1(x(i),17);
end
tf=clock;
t1=etime(tf,ti);
ti=clock;

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 MATLAB
realiza las operaciones no s
olo depende del codigo que se emplee sino, sobre todo, de las caractersticas del propio ordenador (procesador, memoria, bus,. . . ). La salida debe parecerse a una
tabla con la siguiente forma
length(x)

miexp1(x)
miexp2(x)
tiempo
tiempo
-----------------------------------------------1000
0.11
0.0006
2000
0.20
0.0007
3000
0.25
0.0010
4000
0.35
0.0013
5000
0.43
0.0016
6000
0.52
0.0020
7000
0.61
0.0023
8000
0.71
0.0025
9000
0.81
0.0029
10000
0.93
0.0033
Una u
ltima observaci
on. Se podra querer tener tablas comparativas para diversos valores de n
y de la longitud de x. Para conseguirlo bastara 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 aproximaci
on de exp(x) mediante
% la aproximaci
on 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;

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 m
as arriba. La ventaja es que ahora podemos probar con diversos
valores de k y n sin tener que modificar el script cada vez.
Debe notarse que no hay variable de salida. Esta funcion produce un resultado: una tabla con
la comparativa de tiempos pero no almacena esta salida en ninguna variable. El recproco, que
una funcion tenga variables de salida pero no de entrada, tambien es posible pero muy poco
frecuente.

Captulo 5

N
umeros complejos y polinomio

MATLAB trabaja indistintamente con n


umeros reales o complejos, pero hay algunas propiedades especficas de estos u
ltimos que hay que tener en cuenta. Polinomios son vectores cuyas
componentes son los coeficientes del polinomio. Sumar polinomios es como sumar vectores, pero
tambien se puede multiplicar y dividir polinomios. MATLAB tiene una serie de funciones que
ayudan a trabajar con polinomios c
omodamente.

5.1.

N
umeros Complejos

El comando abs(a) devuelve el valor absoluto o el modulo del n


umero a seg
un que este sea real
o complejo. De la misma forma abs(A) devuelve una matriz cuyos elementos son los modulos
o los valores absolutos de los elementos de A seg
un que estos sean n
umeros complejos o reales.
Ademas, como ya se dijo en el Captulo 2, MATLAB no produce un error si se le pide la raz
cuadrada o el logaritmo de un n
umero negativo sino que devuelve el correspondiente n
umero
complejo. La unidad imaginaria es una constante predefinida en MATLAB. Las letras que la
designan son bien i, bien j.
Hay que tener cuidado con la trasposicion. Si A es una matriz de n
umeros complejos entonces
A0 es la transpuesta conjugada de A (lo que nosotros solemos designar como A ). Si queremos
la transpuesta de A debemos usar A.0 . Por ejemplo
>> A=[1-i 2+i; 3+i i]
A =
1.0000 - 1.0000i

2.0000 + 1.0000i
50

N
umeros complejos y polinomio
3.0000 + 1.0000i

51
0 + 1.0000i

>> Atc=A
Atc =
1.0000 + 1.0000i
2.0000 - 1.0000i

3.0000 - 1.0000i
0 - 1.0000i

>> At=A.
At =
1.0000 - 1.0000i
2.0000 + 1.0000i

3.0000 + 1.0000i
0 + 1.0000i

Finalmente, el comando plot cuando se emplea con n


umeros complejos tiene un significado especial: Si y es un vector de n
umeros complejos la sentencia plot(y) es equivalente a
plot(real(y),imag(y)).

5.2.

C
alculo con Polinomios

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

-8

-10

>> roots(pol)
ans =
-3.2800
>> polyval(pol,1)

2.6748

0.3026 + 1.0238i

0.3026 - 1.0238i

N
umeros complejos y polinomio

52

ans =
-11
Hay una funci
on similar a polyval pero para matrices: la funcion plyvalm. Dada una matriz
A y polinomio p() = pol, la funci
on polyvalm(pol,A) devuelve la matriz p(A). As con el
polinomio pol=[1 0 -8 6 -10] definido mas arriba:
>> A=ceil(rand(3,3)*5-7)
A =
-2
-5
-3

-4
-2
-3

-4
-6
-2

>> polyvalm(pol,A)
ans =
3130
3818
2568

2896
3526
2370

3688
4476
2998

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

-2

>> pol2=[1 0 3 -4]


pol2 =
1

-4

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

-2

-10

20

-16

Para dividir polinomios existe otra funcion llamada deconv(). Las funciones orientadas al calculo
con polinomios son las siguientes:
poly(A)

polinomio caracterstico de la matriz A

N
umeros complejos y polinomio
poly(v)
roots(pol)
polyval(pol,x)
polyvalm(pol,A)
conv(p1,p2)
[c,r]=deconv(p,q)
residue(p1,p2)
polyder(pol)
polyder(p1,p2)
polyfit(x,y,n)

53

polinomio cuyas races son los elementos de v


races del polinomio pol
evaluaci
on del polinomio pol para el valor de x. Si x es un
vector, pol se eval
ua para cada elemento de x
evaluaci
on del polinomio pol de la matriz A
producto de convolucion de dos polinomios p1 y p2
divisi
on del polinomio p por el polinomio q. En c se devuelve
el cociente y en r el resto de la division
descompone el cociente entre p1 y p2 en suma de fracciones
simples (ver >> help residue)
calcula la derivada de un polinomio
calcula la derivada del producto de polinomios
calcula los coeficientes de un polinomio p(x) de grado n que
se ajusta a los datos (xi , yi ), en el sentido de los mnimos
cuadrados.

Existen tambien algunas funciones orientadas a la interpolacion polinomial que no vamos a


considerar aqu. Si quieres saber algo sobre ellas utiliza la ayuda.

Ap
endice A

Funciones incorporadas en MATLAB


En este apendice se relacionan algunas (muchas) funciones nativas de MATLAB. Algunas de
ellas estan incorporadas al n
ucleo de MATLAB y otras son ficheros M. Nosotros no vamos
a distinguir entre ambos tipos de funciones. Las hemos clasificado de acuerdo a su proposito
general pero algunas de ellas podran estar en varios grupos.
Se describe brevemente lo que hacen y en muchos casos tanto las variables de entrada (los tipos
de variables que aceptan) como las de salida (lo que producen) son 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
2
0
0
0
0

0
0
3
0

0
0
0
4

Es decir, diag(v) devuelve la matriz diagonal cuya diagonal es el vector v. Pero


>> diag(v,1)
ans =
0
1
0
0
0
0
0
0
0
0

0
2
0
0
0

0
0
3
0
0

0
0
0
4
0

devuelve una matriz 5 5 cuya superdiagonal es v.


Tanto para una explicaci
on m
as detallada de cada una de las funciones como de toda su potencialidad se recomienda utilizar el sistema de ayuda. Conociendo el nombre de la funcion lo m
as
54

Funciones incorporadas en MATLAB

55

rapido es utilizar el comando help funci


on.

A.1.

Funciones que act


uan sobre escalares

Hay funciones matem


aticas elementales que operan de modo escalar. Estas funciones, que comprenden las funciones matem
aticas trascendentales y otras funciones basicas, act
uan sobre cada
elemento de la matriz como si se tratase de un escalar. Se aplican de la misma forma a escalares, vectores y matrices. Algunas de las funciones de este grupo son las que se relacionan a
continuacion. Se debe entender que si el argumento o argumentos sobre los que act
ua la funci
on
son matrices o vectores entonces dicha funcion act
ua 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)
cos(x)
tan(x)
cot(x)
sec(x)
csc(x)
asin(x)
acos(x)
atan(x)
atan2(x,y)
acot(x)
asec(x)
acsc(x)
sinh(x)
cosh(x)
tanh(x)
coth(x)
sech(x)
csch(x)
asinh(x)
acosh(x)
atanh(x)
acoth(x)
asech(x)
acsch(x)

seno
coseno
tangente
cotangent
secante
cosecante
arco seno
arco coseno
arco tangente (devuelve un angulo entre /2 y +/2)
arco tangente (devuelve un angulo entre y +); se le
pasan 2 argumentos, proporcionales al seno y al coseno
arco cotangente
arco secante
arco cosecante
seno hiperb
olico
coseno hiperbolico
tangente hiperbolica
cotangente hiperbolica
secante hiperbolica
cosecante hiperbolica
arco seno hiperbolico
arco coseno hiperbolico
arco tangente hiperbolica
arco cotangente hiperbolica
arco secante hiperbolica
arco cosecante hiperbolica

Funciones incorporadas en MATLAB


EXPONENCIALES
exp(x)
log(x)
log10(x)
log2(x)
sqrt(x)
realpow(x)
reallog(x)
realsqrt(x)

funci
on exponencial
logaritmo natural (neperiano)
logaritmo decimal
logaritmo en base 2
raz cuadrada
potencia que da error si x no es real
logaritmo neperiano de n
umeros reales
raz cuadrada de n
umeros mayores o iguales a cero

COMPLEJAS
abs(x)
angle(x)
complex(x,y)
conj(x)
real(x)
imag(x)
isreal(x)

valor absoluto o modulo si x es un n


umero complejo
argumento del n
umero complejo x
devuelve el n
umero complejo x + iy
complejo conjugado
parte real
parte imaginaria
devuelve 1 si x es real y 0 si x tiene parte imaginaria

DE REDONDEO Y RESTO
sign(x)

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

devuelve -1 si x < 0, 0 si x = 0 y 1 si x > 0. Aplicada a un


n
umero complejo, devuelve un vector unitario en la misma
direcci
on que x
resto de la division de x entre y. Los argumentos son n
umeros
reales (no necesariamente enteros)
similar a rem (Ver diferencias con el sistema de ayuda)
redondeo hacia el entero mas proximo
redondea hacia el entero mas proximo a 0
valor entero mas proximo hacia
valor entero mas proximo hacia +
m
aximo com
un divisor
mnimo com
un m
ultiplo

56

Funciones incorporadas en MATLAB

57

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

A.2.

Funciones que act


uan sobre vectores

Las siguientes funciones act


uan sobre vectores. Aqu se presentan solo algunas funciones. Una
relacion completa de todas las funciones soportadas por MATLAB se puede obtener consultando
la ayuda: matlab/datafun.
length(x)
[vM,pM]=max(x)
[vm, pm]=min(x)
sum(x)
cumsum(x)

mean(x)
std(x)
prod(x)
cumprod(x)
[y,i]=sort(x)

devuelve la longitud del vector x


m
aximo elemento de un vector. Devuelve el valor maximo
vM y la posicion que ocupa pM en el vector
mnimo elemento de un vector. Devuelve el valor mnimo y
la posici
on que ocupa
suma de los elementos de un vector
devuelve el vector suma acumulativa de los elementos de un
vector. Es decir, el primer elemento del nuevo vector es el
mismo que el de x, el segundo es la suma de los dos primeros
de x, el tercero es la suma de los tres primeros vectores de
x, y as sucesivamente
valor medio de los elementos de un vector
desviaci
on tpica
producto de los elementos de un vector
devuelve el vector producto acumulativo de los elementos de
un vector (como en cumsum pero respecto al producto)
ordenaci
on de menor a mayor de los elementos de un vector
x. Devuelve el vector ordenado y, y un vector i con las posiciones 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 aplican
por separado a cada columna de la matriz, dando como valor de retorno un vector resultado de
aplicar la funci
on a cada columna de la matriz considerada como vector. Si estas funciones se
quieren aplicar a las filas de la matriz basta aplicar dichas funciones a la matriz traspuesta.

A.3.

Funciones que act


uan sobre matrices

Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen
algunas de las funciones m
as u
tiles y potentes de MATLAB. No estan todas las que soporta
MATLAB. La relaci
on completa se puede consultar a traves de la ayuda: matlab/elmat y
matlab/matfun principalmente. Se clasificaran en varios subgrupos:

Funciones incorporadas en MATLAB

58

FUNCIONES MATRICIALES ELEMENTALES


A
A.

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

calcula la traspuesta (conjugada) de la matriz A


calcula la traspuesta (sin conjugar) de la matriz A. Si la
matriz A es de n
umeros reales A. y A producen el mismo
resultado.
devuelve la traza de la matriz cuadrada A
devuelve el n
umero de filas m y de columnas n de una matriz
rectangular A
devuelve el n
umero de elementos de la matriz A.

FUNCIONES MATRICIALES ESPECIALES


power(A,b)
power(b,A)
exp(A)
sprt(A)
log(A)
mpower(A,n)
expm(A)
sqrtm(A)
logm(A)

Si A = [aij ] devuelve la matriz cuyos elementos son abij .


devuelve la matriz cuyos elementos son baij .
devuelve una matriz cuyos elementos son exp(aij ) = eaij .

devuelve una matriz cuyos elementos son aij .


devuelve una matriz cuyos elementos son ln(aij ).
devuelve la matriz A . . . A n veces, si n es un entero.
devuelve
la exponencial de A; i.e. eA .
devuelve A; i.e. una matriz que multiplicada por s misma
da A.
devuelve la matriz ln(A); i.e. una matriz B tal que eB = A.

Los comandos A.^n y A^ n son equivalentes a las funciones power(A,n) y powerm(A,n) respectivamente.
FUNCIONES PARA MANIPULAR MATRICES
cat(Dim,A,B)

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

concatena las matrices A y B, i.e. las pone una junto a la


otra. Si Dim=1 B debajo de A y si Dim=2 pone B detras de
A
cambia el tama
no de A a una matriz m n
dependiendo del argumento se emplea para construir una
matriz diagonal o para extraer la diagonal de una matriz
construye una matriz diagonal por bloques
extrae la parte triangular inferior de A
extrae la parte triangular superior de A
permuta las columnas de A: la u
ltima pasa a ser la primera,
la ante
ultima pasa a ser la segunda, etc..

Funciones incorporadas en MATLAB


flipud(A)
rot90(A)
[I,J,V]= find(A)

end(A)

lo mismo que fliplr pero por filas


rota A 90 grados
encuentra las filas y columnas donde estan los elementos no
nulos de A y los almacena en I y J, respectivamente. En V
pone el vector de elementos no nulos.
devuelve el u
ltimo ndice de A

FUNCIONES DE ANALISIS
MATRICIAL
n=norm(v)
n=normest(A)

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

norma `2 del vector v o de la matriz, si el argumento es una


matriz.Hay variantes para otras normas
estimaci
on de la norma `2 de la matriz A. Se usa cuando el
tama
no de A es muy grande y se consume mucho tiempo en
calcular norm(A)
rango de la matriz A
determinante de A
traza de A
las columnas de N forman una base del n
ucleo de A
las columnas de Q forman una base ortonormal del espacio
imagen de A
angulo entre los subespacios generados por las columnas de

AyB

DE MATRICES Y
FUNCIONES DE FACTORIZACION

DE RESOLUCION DE SISTEMAS LINEALES


/y\
B = inv(A)
c = cond(A)
U = chol(A)
[L,U] = lu(A)

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

soluci
on de sistemas lineales (ver la ayuda help slash)
inversa de A
n
umero de condicion de A en la norma `2 . Hay una variante
para otras normas
descomposicion de Cholesky de una matriz definida positiva
descomposicion LU (con pivotamiento) de la matriz A. Es
decir, P A = LU , P una matriz de permutacion, L triangular
inferior con 1s en la diagonal y U una matriz triangular
superior.
descomposicion QR de A
Determinante de la matriz cuadrada A
reducci
on a forma de escalera por filas de una matriz rectangular A
descomposicion de Cholesky de una matriz definida positiva

59

Funciones incorporadas en MATLAB


P=pinv(A)

pseudoinversa (o inversa de Moore-Penrose) de A

FUNCIONES PARA CALCULO DE VALORES PROPIOS Y SINGULARES


E=eig(A)
[U,S,V]=svd(A)
P=poly(X)

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

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

devuelve el vector E con los valores propios de A


descomposicion de A en valores singulares: A = U SV
si X es una matriz cuadrada, P es un vector cuyas componentes son los coeficientes del polinomio caracterstico de X.
Si X es un vector, P es un polinomio cuyas races son las
componentes de X
forma Hessenberg de A
forma de Schur de A. U es la matriz unitaria tal que A =
U SU
transforma la forma de Schur real en la compleja. La forma
de Scur compleja es la habitual: una matriz triangular superior con los valores propios (posiblemente complejos) en
la diagonal. La forma real de Schur se refiere a una matriz
real cuyos valores propios complejos aparecen en pares conjugados. La matriz R de la forma de Schur es real y en ella
aparecen bloques diagonales 2 2 asociados a los valores
propios complejos conjugados.
el recproco del anterior. Convierte la forma diagonal compleja de Schur de una matriz real a la forma real.

60

Ap
endice B

Consejos para el uso de Matlab en


picasso
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. Aparecer
a 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 contrase
na y puerto escribe
22. A continuaci
on pulsa la tecla Entrar.
4. Confirma la conexi
on si as te lo pide.
5. Aparecer
a una ventana como la siguiente:
61

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 todava no lo has creado
procede de la siguiente forma: Pincha con el boton derecho del raton en cualquiera de
las ventanas correspondientes a picasso. Te aparece un men
u en el que puedes seleccionar
crear directorio. Una vez hecho, aparece una ventanita con el path completo del
directorio que se crear
a. Comprueba que es correcto y escribe el nombre del directorio; en
este caso, matlab (en min
usculas).
7. Para trasladar ficheros entre el cliente y el servidor muevete al directorio que contiene el
fichero que quieres transferir y al directorio de destino. Arrastra entonces el fichero de una
ventana 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 Matematica
Aplicada 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

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 instalada
en picasso) con el sistema operativo Solaris y hay que definir uno que s lo haga. Hemos
elegido 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 a
nadiendo un icono al escritorio de modo que
al pinchar sobre el se lance MATLAB. El procedimiento es el siguiente:
1. Coloca el rat
on en cualquier punto libre del escritorio y haz click con el boton derecho.
Aparece un men
u.
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 dem
as 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 posibles
dibujos a utilizar.
8. En el recuadro superior pone /usr/share/pixmaps. Sustit
uyelo 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 se
debera abrir MATLAB. No olvides cambiar el editor.

También podría gustarte