Está en la página 1de 63

Prácticas de Ampliación

de Métodos Numéricos
con MATLAB

Ion Zaballa
Índice general

1. Lo Básico 4

1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2. Comienzo y Fin de una sesión de MATLAB . . . . . . . . . . . . . . . . . . . . . 5

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

1.4. Edición en la Lı́nea de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2. Matrices y Vectores 9

2.1. Generación de matrices explı́citamente . . . . . . . . . . . . . . . . . . . . . . . . 9

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

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

2.2. Manipulación 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 búsqueda (SEARCH PATH) de MATLAB . . . . . . . . . . . . . . 27

3.3. Manipulación de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.3.1. Ejecución de Programas Externos . . . . . . . . . . . . . . . . . . . . . . 30

2
3

4. Programación en MATLAB 31

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

4.1.1. Operadores relacionales y lógicos . . . . . . . . . . . . . . . . . . . . . . . 33

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

4.1.3. Presentación de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . 41

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

5. Números complejos y polinomio 50

5.1. Números Complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.2. Cálculo con Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

A. Funciones incorporadas en MATLAB 54

A.1. Funciones que actúan sobre escalares . . . . . . . . . . . . . . . . . . . . . . . . . 55

A.2. Funciones que actúan sobre vectores . . . . . . . . . . . . . . . . . . . . . . . . . 57

A.3. Funciones que actúan 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


Capı́tulo 1

Lo Básico

1.1. Introducción

Este documento pretende ser una guı́a básica para introducirse de forma personal en el uso
de MATLAB y en relación con las asignaturas Análisis Matricial Aplicado y Ampliación de
Métodos Numéricos. Por lo tanto, aquı́ sólo se cubrirán aquellos aspectos de MATLAB que
tienen relación con la materia discutida en dichas asignaturas. En otros documentos, que se
entregarán en clase, se plantearán ejercicios en base al contenido de esta guı́a y que deben ser
resueltos personalmente. Si se quiere disponer de una buena y completa guı́a de MATLAB, mi
recomendación 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 manipulación y computación de


y con matrices, durante los últimos años ha evolucionado de forma que hoy se puede considerar
como un software de propósito general para todas las ramas de la matemática y la ingenierı́a
desde el punto de vista numérico y computacional. También es posible el cálculo simbólico con
MATLAB siempre que se disponga del toolbox apropiado; en este caso el Symbolic toolbox. Exis-
ten muchos otros toolboxes que, sobre la base del núcleo de MATLAB, proporcionan funciones
especı́ficas para el cálculo numérico de ciertas partes concretas de la matemática, la ingenierı́a
y otras ciencias. Si se quiere información sobre los productos relacionados con MATLAB puede
visitarse la página web de la empresa que lo desarrolla: www.mathworks.com.

Trabajando con MATLAB se debe tener muy claro que las unidades básicas 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 prácticas se
realizarán en la sala de informática del Departamento de Matemática Aplicada y EIO o en una

4
Lo Básico 5

de las aulas de ordenadores de la Facultad de Ciencias. En el primer caso, la sala está compuesta
de una serie de terminales gráficos 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 él. 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ón 6 los interfaces gráficos 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. Además, las últimas versiones de MATLAB (desde Release
14–MATLAB 7) corrigen algunas deficiencias de edición con el teclado en castellano (como
la ubicación del sı́mbolo [ o el acento circunflejo ^) que tenı́an las versiones anteriores para los
sistemas UNIX. Esto significa que las explicaciones que damos en estas notas son, en su mayorı́a,
de aplicación para MATLAB bajo ambos sistemas.

1.2. Comienzo y Fin de una sesión de MATLAB

Una sesión de MATLAB se comienza de forma diferente según la plataforma sobre la que lo
ejecutemos. En un PC o Mac basta hacer doble “click” con el botón izquierdo del ratón sobre
el icono de MATLAB. En picasso podemos ejecutar MATLAB en modo consola o utilizando un
interfaz gráfico. En cualquier caso, se debe abrir primero una sesión 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 gráfico, que es más sencillo, se debe escribir
matlab y pulsar la tecla de entrada.

Trabajando en picasso en modo gráfico, MATLAB puede consumir muchos recursos del sistema;
principalmente si hay muchos usuarios conectados y dependiendo de la calidad de los terminales
gráficos. Si este fuera el caso (que se nota por una excesiva ralentización del sistema) es reco-
mendable trabajar en modo consola. En este modo hay una serie de reglas que se recomienda
utilizar y que se exponen en el Apéndice B.

Trabajando en modo gráfico, bien sea bajo UNIX o MSWindows, una vez ejecutadas las acciones
mencionadas, aparecerá el logotipo de MATLAB y a continuación 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 todavı́a 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 sólo nos interesa la última de ellas
que es la ventana de comandos de MATLAB. Por ello, aunque no es estrictamente necesario,
cerramos las demás con un click del ratón en el sı́mbolo de cada ventana. En realidad hay
otras ventanas ocultas que se pueden ir cerrando sucesivamente hasta que no quede más que la
ventana Command Window. Todas estas ventanas tienen, de momento, un interés secundario y
Lo Básico 6

Figura 1.1: Ventana inicial de MATLAB.

siempre se pueden volver a abrir seleccionándolas con el ratón en el menú view de la ventana
principal.

En la ventana de comandos de MATLAB aparece el sı́mbolo >> (éste es el “prompt” de


MATLAB) y el cursor parpadeando. El programa está preparado para recibir órdenes.

Para finalizar la sesión en cualquier sistema basta escribir el comando quit. Alternativamente
se puede elegir Exit MATLAB en el menú File del menú principal.

Cuando hablamos de usar un comando (por ejemplo quit), nos referimos a escribir detrás 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 función o comando. Empe-
zando por lo ú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 más bonito (en el segundo),
explicando todo lo relativo a dicho comando.

Lo anterior implica que se sabe lo que se busca. Hay niveles más generales de ayuda. Por ejemplo,
tecleando helpwin aparece una relación de las carpetas de MATLAB que contienen ayuda y una
breve descripción 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 función.

Los dos niveles de ayuda anteriores (help función y helpwin) están disponibles tanto en modo
gráfico como en modo consola. Si se trabaja en modo gráfico hay, además, una tercera posibilidad
de ayuda más general. Pinchando en Help en el menu principal de MATLAB y seleccionando
Product Help aparecerá una nueva ventana como la de la Figura 1.2 con toda la ayuda de
Lo Básico 7

MATLAB. En la parte izquierda aparece un menú 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 apropiado


como en un navegador de internet.

1.4. Edición en la Lı́nea de Comandos

Si se comete algún error cuando se está introduciendo un comando de MATLAB, no es necesario


volver a reescribir todo de nuevo. Las teclas de flechas o la combinación de la tecla ctrl y otra
pueden ayudarte:

↑ ctrl-p Reescribe la lı́nea anterior


↓ ctrl-n Reescribe la lı́nea siguiente
← ctrl-b Mueve el cursor un carácter hacia atrás
→ ctrl-f Mueve el cursor un carácter hacia adelante
ctrl-→ ctrl-r Mueve el cursor una palabra a la derecha
ctrl-← ctrl-l Mueve el cursor una palabra a la izquierda
Inicio ctrl-a Mueve el cursor al comienzo de la lı́nea
Fin ctrl-e Mueve el cursor al final de la lı́nea
Esc ctrl-u Borra la lı́nea
Supr ctrl-d Borra el carácter sobre el cursor
Backspace ctrl-h Borra el carácter que está 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 reconozca
la lı́nea entera, se puede dar entrada estando el cursor en cualquier punto de dicha lı́nea. Esto
suele suceder cuando se ha observado un error al escribir y se mueve el cursor hacia atrás para
corregir el fallo.

Si se va a volver a utilizar un comando ya usado anteriormente (o parte de él), basta teclear


unos pocos caracteres de dicho comando y entonces usar la tecla ↑. MATLAB recordará el último
Lo Básico 8

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

También se puede utilizar el clásico sistema de copiar y pegar para producir órdenes en la lı́nea
de comandos.
Capı́tulo 2

Matrices y Vectores

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

Introduciendo una lista explı́cita de elementos.

Generando matrices con funciones predefinidas en MATLAB.

Cargando matrices desde un fichero de datos externo.

Creando matrices con funciones definidas por el usuario/a a través de ficheros M.

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

2.1. Generación de matrices explı́citamente

La forma más sencilla de introducir matrices es escribiendo explı́citamente los elementos de la


matriz. Las otras formas de generar matrices las iremos viendo posteriormente. Para obtener
una matriz escribiendo sus elementos sólo 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úmero 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
 
16 3 2 13
 5 10 11 8 
A=  9 6 7 12 

4 15 14 1

escribirı́amos:

>> A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

La respuesta de MATLAB, una vez pulsada la tecla de retorno, serı́a:

A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1

A veces el número de elementos en cada fila es muy grande y es preferible introducir una fila en
cada lı́nea, lo único 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 observarse
que con MATLAB no hay que declarar las variables. Se podrı́a haber introducido la matriz sin
asignársela 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
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ás.
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 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 mayúsculas y minúsculas de forma que a y A son dos variables distintas.
Para saber las variables que tienes definidas puedes usar el comand who. Éstas también aparecen
en la ventana workspace. En el siguiente capı́tulo se explica cómo 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úmeros enteros, pero en realidad los
elementos de una matriz pueden ser cualquier expersión válida 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úmero de funciones elementales matemáticas, incluyendo valor


absoluto abs, raı́z cuadrada sqrt,√ exponencial exp, seno sin, etc. Todas ellas se usan más o
menos 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 número negativo, sino que devuelve el correspon-
diente número complejo. También proporciona muchas funciones matemáticas avanzadas como
las funciones de Bessel o la función 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 Apéndice A se resumen algunas


de la funciones más importantes de MATLAB.

También hay una serie de constantes predefinidas:

pi 3.14159265. . . √
i la unidad imaginaria, −1.
j lo mismo que i.
eps precisión relativa de los números en coma flotante, 2−52 = 2,204e − 16. Es decir distancia
de 1.0 al siguiente número más próximo en coma flotante.
realmin número en coma flotante más pequeño, 2−1022 .
realmax número en coma flotante más grande, (2 − eps)21023 .
inf infinito. Se produce al dividir un número 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 más 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 decimales
format hex cifras hexadecimales
format bank números con dos cifras decimales
format short e notación cientı́fica con 4 decimales
format short g notación cientı́fica o decimal, dependiendo del valor
format long e notación cientı́fica con 15 decimales
format 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 números a cocientes de enteros; i.e. números
racionales

MATLAB aplica un factor de escala general a las matrices cuando los elementos más grandes o
más pequeños son superiores o inferiores, respectivamente, a una determinada cantidad (103 y
10−3 ).
Matrices y Vectores 13

Las expresiones se pueden construir con números (reales o complejos) y utilizando los operadores
aritméticos y las reglas de precedencia habituales (en caso de duda siempre se pueden utilizar
paréntesis):

+ adición
− sustracción
∗ multiplicación
/ división por la derecha
\ división por la izquierda
ˆ potenciación
’ transposición

Estos mismos operadores se utilizan con matrices, por eso se incluye la transposición y la división
por la izquierda. Si A y B son matrices y A es invertible entonces A\B = A−1 B y B/A = BA−1 .
Ambas producen lo mismo cuando son aplicadas a números. Ası́ 1/4 y 1 \ 4 producen el mismo
valor numérico: 0,25. De la misma forma A0 es la transpuesta de A y si a es un número 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 teorı́a). 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 (únicas si A es invertible)
de las ecuaciones AX = B y XA = B, respectivamente.

Hay otras operaciones especiales para matrices:

.∗ multiplicación término a término


./ división a la derecha
término a término
.\ división a la izquierda
término a término
.ˆ potenciación término a término

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ón” (en el sentido de más arriba) habituales. Cuando estos operadores
están precedidos por un punto, la operación 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ón 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.0000
1.5000 2.0000

¿Qué responderá 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ólo 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 potenciación ˆ 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. Manipulación de vectores y matrices

Puesto que las unidades básicas de MATLAB son las matrices, dispone de varias formas de crear
vectores y matrices de forma casi automática, y de manipular los elementos de una matriz.

El operador dos puntos, : , es uno de los más importantes. Sirve para generar vectores y
matrices cuyos elementos están 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:


Matrices y Vectores 15

y =
0 0.7854 1.5708 2.3562 3.1416

También 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 última y el número de ellas:

>> k=linspace(-sqrt(3),pi,5)
k =
-1.7321 -0.5136 0.7048 1.9232 3.1416

El número 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 más arriba (que utilizaremos a lo largo de esta sección):

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

>> A(2,4)

MATLAB nos devuelve:

ans =
8

Se puede modificar el elemento de cualquier posición sin más que cambiar su valor. La respuesta
de MATLAB es toda la matriz con el nuevo valor en dicha posición. Para seguir manteniendo,
para los siguientes ejemplos, la misma matriz A, primero almacenamos en c el elemento que
vamos a cambiar y a continuación 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 lı́nea de comandos hemos puesto dos órdenes: c=A(2,4),A(2,4)= 3*sqrt(A(1,4))


-1/log10(A(3,4)). Tal y como se ha mencionado más arriba escribir ; después de una orden
produce el efecto de que el resultado no se escribe en la pantalla. En cada lı́nea de comandos
podemos poner cuantas órdenes queramos separadas bien sea por comas (en cuyo caso los re-
sultados correspondientes aparecerán sucesivamente en la pantalla) o bien por ; para que los
resultados no aparezcan en la pantalla. (Más abajo hay un ejemplo).

Por otra parte, si pedimos el valor del elemento en la posición (4, 5), MATLAB nos devuelve un
mensaje de error porque el tamaño de A es 4 × 4:

>> A(4,5)
??? Index exceeds matrix dimensions.

Desde la versión 5 de MATLAB se puede usar end para indicar el último elemento de una matriz,
respecto de una dimensión 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
Matrices y Vectores 17

No sólo se puede extraer cada elemento de una matriz sino cualquier submatriz. Para ello basta
expresar la submatriz deseada en notación vectorial. Ası́, para obtener el “subvector” de a
formado por los últimos 5 primeros elementos escribirı́amos:

>> a(1:5)
ans =
4 5 6 7 8

y el formado por los últimos 4:

>> a(end-3:end)
ans =
7 8 9 10

Para obtener la submatriz formada por los elementos que ocupan las posiciones donde se 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 dos
puntos:

>> 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 técnica para generar submatrices correspondientes a filas o columnas
igualmente espaciadas. Por ejemplo, si A 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 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 notación vectorial para los subı́ndices 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, 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 sólo queremos permutar las dos primeras filas:

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


B =
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 añadirle filas y columnas sin más que especificar el vector con los
elementos que se quiere añadir. Por ejemplo, si a nuestra matriz A le queremos añadir 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 también podrı́amos definir primero el vector fila que vamos a añadir y luego añadirlo:

>> 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 añadir una columna actuarı́amos por transposición (recordemos que r0 es
la 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 más pequeñas nos permite ir creando matrices
sobre la marcha empezando desde una “matriz vacı́a”. En efecto, la orden >> B=[] nos devuelve
una matriz sin elementos a la que podemos ir añadiéndole filas o columnas como hemos hecho
más 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 vacı́a”. Simplemente
igualamos a [] la submatriz que queramos eliminar:

>> B2(:,2)=[]
B2 =
1 7
2 8
3 9

nos devuelve la submatriz de B2 que se obtiene al suprimir la segunda columna.

2.3. Matrices a partir de funciones predefinidas en MATLAB

Hay un buen número de funciones de matrices predefinidas en MATLAB. Una relación de todas
ellas con la descripción 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ás elementales:

zeros(m,n) Crea una matriz de tamaño m × n cuyos elementos son todos 0.


ones(m,n) Crea una matriz de tamaño m × n cuyos elementos son todos 1.
rand(m,n) Crea una matriz de tamaño m × n con elementos aleatorios distribuı́dos
uniformemente entre 0 y 1
randn(m,n) Crea una matriz de tamaño m × n con elementos aleatorios elegidos
con una distribución normal de media 0 y varianza y desviación standrad 1
eye(m,n) Crea una matriz de tamaño m × n con 1’s en la diagonal principal
diag(v,k) El argumento v es un vector y el argumento k es opcional pero si
se da, debe ser un número entero. MATLAB crea una matriz cuadrada de tamaño
n + |k|, con todos lo elementos cero excepto los de la k-ésima diagonal
que son los elementos del vector v. Poner k = 0 o no dar un valor
explı́cito produce el mismo resultado: una matriz diagonal con el vector v
en la diagonal principal. Si k > 0 el vector v aparece en la k-ésima
Matrices y Vectores 21

supradiagonal y si k < 0 en la k-ésima subdiagonal.


diag(A,k) El argumento A es una matriz y el agumento k es opcional pero si
se da, debe ser un número 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 continuación cómo 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 especı́fico donde almacenar estos y otros posibles ficheros. Hablaremos más ex-
tensamente sobre este tema y otros relacionados cuando estudiemos el entorno de trabajo de
MATLAB. Ahora comentamos sólo lo necesario para crear matrices a partir de ficheros externos.

Me referiré a matlabdir como el directorio donde se guardarán todos los ficheros de MATLAB
creados por nosotros mismos. El nombre real de este directorio para cada cuál puede ser diferente.
En primer lugar se debe crear. Para ello conviene comprobar primero en qué 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 órdenes correspondientes al sistema operativo que se
verán más adelante. También 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ñadirlo al “path” de MATLAB con el comando addpath. Por ejemplo: addpath
/ruta completa/matlabdir. Si ahora tecleamos path, en la primera lı́nea deberá 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 éstos deben estar organizados como una tabla rectangular de números, separados
Matrices y Vectores 23

por espacios en blanco, con una fila por lı́nea y con igual número 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 lı́neas:

16,0 3,0 2,0 13,0


5,0 10,0 11,0 8,0
9,0 6,0 7,0 12,0
4,0 15,0 14,0 1,0

Guardamos este 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 más matrices. Los ficheros M son parte
fundamental de MATLAB y los analizaremos posteriormente. Por ahora sólo 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.
Capı́tulo 3

El Entorno de Trabajo de MATLAB

3.1. El Espacio de Trabajo

El espacio de trabajo (workspace en inglés) es el área de memoria accesible desde la lı́nea de


comandos de MATLAB. Si estamos trabajando en modo gráfico hay dos formas de acceder a él:
abriendo la ventana correspondiente o mediante los comandos who y whos. Empezando por lo
segundo, estos dos comandos muestran el contenido del espacio de trabajo en cada momento. El
comando who proporciona una lista corta, mientras que whos da, además, el tamaño y alguna
información adicional sobre almacenamiento de las variables que se han utilizado. He aquı́ un
ejemplo:

>> 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 menú Desktop (versión 7) o View (versiones anteriores a la 7), que está en el

24
El Entorno de Trabajo de MATLAB 25

menú principal de MATLAB, y allı́ seleccionamos workspace. Cualquier otra ventana de las
disponibles en Desktop (View) se abre igual. Puede suceder que la ventana workspace, o
cualquier otra que se desee abrir, ya esté 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ú principal y
ver si está allı́ relacionada. Si no lo está se abre como se ha mencionado más arriba. Y si lo está y
no se ve es que está 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á la ventana del espacio de trabajo con la información que
proporciona el comando whos(ver la figura 3.1)

Figura 3.1: Ventana del Espacio de Trabajo.

Esta información puede ser interesante cuando se están 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ú Desktop (o View para versiones anteriores a la 7) o pinchar en el sı́mbolo .

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

3.1.1. Comandos save y load

En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB y poderlo
recuperar más tarde en el mismo punto en el que se dejó (con las mismas variables definidas,
con los mismos resultados intermedios, etc.). Hay que tener en cuenta que al salir del programa
todo el contenido de la memoria se borra automáticamente. También 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ú File. Esta segunda forma
de hacerlo es muy intuitiva y no requiere comentarios. Los comandos save y load apenas los
usaremos en estas prácticas 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 sesión, pero
no sirven para guardar todo lo que hemos ido tecleando y ha ido saliendo en la ventana de
comandos. Existe una forma sencilla de almacenar todos estos datos en un fichero de texto. Esto
se hace con el comando diary. El uso general es de la forma siguiente:

>> diary filename.txt

De esta forma se va escribiendo en el fichero filename.txt todo lo que aparece, lı́nea tras
lı́nea, en la ventana de comandos de MATLAB con posterioridad a la utilización del comando.
Esto significa que si se quiere guardar todo lo que vaya apareciendo en la ventana de comandos
desde el principio, se debe utilizar este comando en cuanto se empieza la sesión. ¡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, éste se salva (en Windows)
en el subdirectorio work del directorio principal de MATLAB (es decir, en la subcarpeta work
de la carpeta de instalación 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 file-
name.txt con un editor de texto es necesario que diary esté 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ú Desktop se
guardan las sesiones anteriores (hasta cierto punto) especificadas por el dı́a y la hora en que se
comenzaron.

3.1.3. Lı́neas de comentarios

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

3.2. El Camino de búsqueda (SEARCH PATH) de MATLAB

El search path de MATLAB es una lista de directorios que se puede ver y modificar a partir
de la lı́nea de comandos. El comando path hace que se escriba el search path de MATLAB (el
resultado depende de en qué directorio está instalado MATLAB):

>> path

MATLABPATH

/home/Ion/matlab
/home/Ion/matlab/prog
/home/Ion/matlab/prog/clase/anal_matr
/usr/local/share/matlab6/toolbox/matlab/general
/usr/local/share/matlab6/toolbox/matlab/ops
/usr/local/share/matlab6/toolbox/matlab/lang
/usr/local/share/matlab6/toolbox/matlab/elmat
/usr/local/share/matlab6/toolbox/matlab/elfun
/usr/local/share/matlab6/toolbox/matlab/specfun
/usr/local/share/matlab6/toolbox/matlab/matfun

Para ver cómo MATLAB utiliza el search path supóngase que se utiliza la palabra nombre1
en un comando. El proceso que sigue MATLAB para tratar de conocer qué es nombre1 es el
siguiente:

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

2. Comprueba si nombre1 es una función del usuario (hablaremos más adelante de las fun-
ciones en MATLAB).

3. Comprueba si nombre1 es una función 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 más 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 está buscando se
detiene la búsqueda 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ú File. Una vez seleccionado se abre otra nueva
ventana en la que se muestra la lista de directorios en la que MATLAB buscará (MATLAB
search path) (ver Figura 3.2. Seleccionando Add Folder se pueden añadir nuevos directorios.

Figura 3.2: Ventana con el path de MATLAB.

Se puede especificar, además que se incorporen al “search path” todos los subdirectorios del
directorio seleccionado. También se pueden quitar directorios con la opción Remove (es mejor
que ni lo intentes salvo que estés seguro/a de lo que haces). El nuevo directorio se puede añadir 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úsqueda: si una función está en dos directorios, se utilizará 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 próxima vez
que se empieza una sesión de MATLAB las carpetas añadidas aparecerán 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á instalado MATLAB es exclusiva del administrador del sistema. Para
añadir permanentemente unos directorios al “search path” en UNIX hay que hacerlo a través
del fichero startup.m del que hablaremos enseguida.

También se puede incluir un directorio de búsqueda desde la lı́nea de comandos de MATLAB.


La forma de hacerlo depende del sistema operativo sobre el que esté 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ámetros con los que se inicia cada sesión de MATLAB es matla-
brc.m que se encuentra en el subdirectorio toolbox/local de la instalación de MATLAB (en
sistemas UNIX). En sistemas multiusuario, como picasso, sólo 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 sesión
de MATLAB, éste se inicie con los parámetros 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á instalado MATLAB (posiblemente C:\matlabr14 o algo ası́). Por ejemplo,
un fichero startup.m que contenga las siguientes lı́neas:
El Entorno de Trabajo de MATLAB 29

cd \$HOME/matlab
format compact
addpath ’/usr/alu/julen/matlab/practicas’ -end
!texedit
disp(’Kaixo’)

hará lo siguiente cuando el usuario correspondiente (en este caso posiblemente Julen) empiece
una sesión de MATLAB en picasso:

Cambiará al directorio matlab, donde posiblemente se encuentren los trabajos de MATLAB


de Julen.
Utilizará el formato compact para exponer las salidas producidas por MATLAB (este
formato, como ya se dijo en el Capı́tulo 2, suprime algunos saltos de lı́nea y presenta las
salidas más compactas).
Añadirá el directorio /usr/alu/julen/matlab al final del search path.
Abrirı́a el editor de openxt y
Escibirá 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 análoga, al abandonar la ejecución de MATLAB con el comando quit se ejecuta


automáticamente 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ón 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 sistemas
operativos 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
El Entorno de Trabajo de MATLAB 30

Como en todos los sistemas operativos se pueden utilizar los caracteres comodı́n, pathnames y
nombres de los discos o directorios en la forma habitual. Ası́ los comandos

>> cd c:\matlab
>> delete *.dos

producirı́an, bajo MS-DOS o Windows, un cambio al directorio matlab que se encuentra en


el disco C (en caso de que tal directorio exista; si no, produce un mensaje de error). Y a
continuación se borrarı́an todos los ficheros cuya extensión 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 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 (como
en UNIX) para conocer en qué directorio nos encontramos trabajando.

3.3.1. Ejecución de Programas Externos

El cierre de exclamación, !, indica que el resto de la lı́nea es un comando del sistema operativo.
Esto puede ser ú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 él el fichero parabola.m. El sı́mbolo & le pide al sistema
operativo que lo ejecute en background; es decir, que deje la ventana de comandos de MATLAB
libre para seguir tecleando nuevas órdenes.
Capı́tulo 4

Programación 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 programación con cantidad de funciones primitivas que
facilitan mucho la tarea de programar.

Un ejemplo muy simple es el siguiente: supongamos que queremos dibujar la parábola 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 sólo lo usaremos de la forma más sencilla, pero si quieres saber todo lo que puede
hacer, puedes usar el comando helpwin → graph2d → plot. Por ahora la única información
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 están suficientemente próximos 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 órdenes en la misma lı́nea de comando (recuerda
las dificultades que hay para usar ˆ en picasso y que este operador se puede sustituir por
power):

31
Programación 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 también que linspace(a,b) forma un vector de 100 componentes igualmente espa-
ciadas entre a y b. Si estos puntos no están muy alejados entre sı́, cada componente del vector
está muy próxima 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 más interesante: escribir el conjunto de órdenes en un
fichero, mediante un editor. Ya se ha dicho más arriba cómo 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 edición para escribir programas de MATLAB

programa (en este caso pequeño) con código ejecutable por MATLAB. La traducción de “script”
en castellano es algo ası́ como guión pero seguiremos utilizando el original en inglés.

Una vez escrito, se salvarı́a con el nombre que se desee, por ejemplo parabola.m (la extensión
.m es obligatoria, es la forma en que MATLAB sabe que es un fichero con código ejecutable).
Para ejecutar las órdenes 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 gráfica de la parábola.

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


Programación en MATLAB 33

Figura 4.2: Ventana gráfica con la parábola producida por el script parabola.m

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

4.1.1. Operadores relacionales y lógicos

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ón. La idea es que cierta acción se realice dependiendo de si una condición
es verdadera o no. La verdad o falsedad de estas condiciones se suele evaluar comparando dos
expresiones. Para ello existen operadores relacionales y lógicos. 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 comparación abs(A)<eps
genera una matriz de 0’s y 1’s con el mismo tamaño de A. El elemento (i, j) de dicha matriz es
1 si |Aij | < eps, siendo eps el epsilon de la máquina (=2.204e-16).

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


A =
-1 2 0
0 -1 -3
1 -1 0
Programación 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 es


cero y 1 en caso contrario. Es decir, any responde true si algún elemento no es cero y false si
todos 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 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 condición. Será ver-
dadera si y sólo si algún elemento de A es, en módulo, más pequeño que eps. En caso contrario
es falsa.

Hay un operador lógico similar: all. Responde true si todos los elementos del vector son distintos
de cero; en caso contrario, responde false. Con la matriz A de más arriba:

>> all(A)
ans =
0 1 0

En efecto, la ú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 programación, si una comparación
se cumple el resultado es 1 (true), mientras que si no se cumple es 0 (false). Recı́procamente,
cualquier valor distinto de cero es considerado como true y el cero equivale a false. Cuando
los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamaño,
la comparación se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del
mismo tamaño, que recoge el resultado de cada comparación entre elementos. Por ejemplo:
Programación 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 expresión isequal(A,B)

>> isequal(A,B)
ans =
0

La expresión isequal(A,B) es equivalente a all(all(A==B)). Por otra parte, isequal es una de


las muchas funciones lógicas que empiezan por is. He aquı́ una selección de ellas. Para obtener
un listado completo escribe doc is tras el prompt de MATLAB

ischar verdadero si la entrada es un vector de caracteres


isempty verdadero si la entrada es un vector vacı́o
isequal verdadero si los vectores son iguales
isfinite detecta los elementos finitos de un vector
isfloat verdadero si el vector es de elementos en coma flotante
isinf detecta los elementos infinitos de un vector
isinteger verdadero si el vector es de números enteros
isnan detecta los elementos que son NaN en un vector
isnumeric veradero si el vector es de números (no de caracteres)
isprime detecta los números primos en un vector
is real verdadero si todos los números del vector son reales
isvector verdadero si se trata de un vector

Algunos ejemplos adicionales con la matriz A de más arriba

>> A
A =
1 2
0 3
>> isfinite(A)
Programación en MATLAB 36

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

Además una condición puede constar de una o más operaciones relacionales. Éstas normalmente
están concatenadas con expresiones lógicas cuya verdad o falsedad sigue las leyes de la lógica
formal. Los operadores lógicos de MATLAB son los siguientes:

& y
| o
~ negación lógica
xor o excluyente
any verdad si cualquiera de los elementos de un vector es no cero
all 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)
Programación en MATLAB 37

ans =
0
>>

Para terminar con los operadores lógicos estudiamos otro comando muy ú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 0
>> f=find(x)
f =
1 2 4

Una primera aplicación es extraer de x los elementos no nulos:

>> x(f)
ans =
-3 1 -Inf

Podemos extraer los elementos finitos

> x(find(isfinite(x)))
ans =
-3 1 0 0

o reemplazar las componentes negativas por cero:

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

Cuando find se aplica a una matriz se hace mirándola 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
Programación 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) están los elementos de A que son menores que
los de B.

4.1.2. Bifurcaciones y Bucles

Tal y como hemos dicho más arriba las bifurcaciones de MATLAB son while . . . end, if. . . end
y switch . . . case. Este último tipo de bifurcaciones no lo vamos a comentar; se puede consultar
la ayuda de MATLAB para saber como funciona. También se dispone de bucles for . . . end.

La forma más simple de una bifurcación del tipo if. . . end es la siguiente

if condicion
sentencias
end
Programación en MATLAB 39

Existe también la bifurcación múltiple, 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ón por defecto para cuando no se cumplan las condiciones 1,2,3
bloque4
end

donde la opción por defecto else puede ser omitida: si no está 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ón. Recordemos que los operadores lógicos se pueden com-
binar con los relacionales para poder comprobar el cumplimiento de condiciones múltiples.

Ejemplo 4.1.1 .- El siguiente programa comprueba si un número es positivo, si no lo es produce


un mensaje de error con el comando disp que sirve para escribir mensajes en la pantalla (más
adelante se explica con detalle la acción de este comando). A continuación comprueba si, siendo
positivo, es par . La orden rem(p,q) calcula el resto de la división euclı́dea de p por q. Si el
número 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úmero positivo’);
elseif rem(n,2)==0
a=n/2;
else
a=(n+1)/2
end

Naturalmente la condición n<0 | n==0 podrı́a sustituirse por la más compacta n<=0. Se ha
escrito de la forma expuesta para hacer uso de una condición con dos relaciones y un operador
lógico.

SENTENCIA WHILE.- La estructura del bucle while es muy similar a la de cualquier otro
lenguaje de programación. Su sintaxis es la siguiente:

while condicion
sentencias
end
Programación en MATLAB 40

donde condición puede ser una expresión vectorial o matricial. Las sentencias se siguen ejecu-
tando mientras haya elementos distintos de cero en condicion; es decir, mientras haya algún
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úmero n mientras éste 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ón


sentencias
end

Habitualmente la expresión 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 expresión. Por ejemplo, para sumar los 25
primeros términos 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ón es usando notación 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
Programación en MATLAB 41

Y por supuesto, se pueden encajar múltiples bucles for. . . end unos dentro de otros. El siguiente
código proporciona una matriz simétrica 5 × 5 con el elemento ji en la posición (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. Presentación de los resultados

Si en MATLAB hacemos

>> v=1:5

la respuesta es la exposición del resultado

v =
1 2 3 4 5

A veces, sin embargo se quiere disponer de un formato de salida un poco más estructurado. Por
ejemplo se quiere mostrar una tabla de los valores de sen(2πt) para 10 valores de t igualmente
espaciados en el intervalo [0,1].Con el comando disp lo podemos hacer fácilmente. 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:
Programación 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úmeros 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 más 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ás especiales se puede usar el comando sprintf. Su uso en
MATLAB es muy parecido al del comando homónimo 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 programación 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ún propósito concreto. Un fichero M puede hacer referencia a otros
ficheros M e incluso a sı́ mismos (es decir, está permitida la autorecursividad). Los ficheros M
son especialmente apropiados para
Programación en MATLAB 43

experimentar con algoritmos escribiéndoles 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 numérico, como una lista de comandos y variables


que producen un determinado resultado numérico o gráfico,

construir programas que pueden ser utilizados con posterioridad varias veces,

o, simplemente, intercambiar con algún amigo o colega ficheros de mutuo interés.

En la página web de Mathworks mencionada en la Introducción pueden encontrarse numerosos


ficheros M escritos con distintos propósitos, desde puramente computacionales a didácticos 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úan con ellas para producir resultados numéricos o gráficos y quizá 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 variables
internas son locales a la función (salvo que sean declaradas como global)

Ya hemos visto en la sección anterior cómo hacer ficheros M de tipo “script”. Simplemente son
ficheros que ejecutan sucesivamente varios comandos de MATLAB con un objetivo especı́fico
y siempre que se ejecutan producen el mismo resultado. Volveremos sobre ellos más adelante
para recalcar su diferencia con el otro tipo de ficheros M, y que son los más importantes:
las funciones. Las funciones en MATLAB guardan una gran similitud con las funciones en
lenguaje C o Pascal. Lo que exponemos a continuación está inspirado en el primer capı́tulo del
libro Introduction to Scientific Computation de Charles F. van Loan.

Sabemos de cálculo elemental que la serie de Taylor


n
X xk
Tn (x) =
k!
k=0

aproxima la función exponencial, ex , cerca de x = 0. Nuestro objetivo es estudiar esta aproxima-


ción. Es decir, ¿ cuán cerca está Tn (x) de ex para los diversos valores de n? Teóricamente cuanto
mayor es n más cerca está Tn (x) de ex . ¿Para qué valores de n nuestro ordenador no distingue
entre Tn (x) y ex ?. Para ello damos por bueno el cálculo que hace MATLAB de la exponencial y
creamos una función de MATLAB que nos devuelva el valor de Tn (x) en función de x y n. Esta
función serı́a la siguiente:

function y= miexp1(x,n)
%
%Precondiciones: acepta dos valores x=número real y
Programación 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 con
el nombre miexp1.m en un directorio (o carpeta) que esté en el path de MATLAB; por ejemplo,
en nuestro directorio de trabajo. Debe observarse que ahora el nombre del fichero sólo puede ser
el que hemos dado a la función. Debemos tener cuidado, además, con que el nombre de la función
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ón 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ón(variables de entrada)


%
% Comentarios que definen completamente las variables que deben pasarse a la función
% (variables de entrada) y el resultado que produce la función (variables de salida)
%
cuerpo de la función: comanos de MATLAB

En algún sitio del cuerpo de la función se debe pasar a la variable de salida el valor deseado.
Los comentarios que definen completamente la función deben hacerse inmediatamente
después de la definición de la función. Esto es importante porque cuando en la ventana
de comandos se escriba help nombredelafuncion, MATLAB responderá escribiendo los
comentarios que ahı́ se escriban. Opcionalmente, y es recomendable hacerlo, se pueden
escribir comentarios en otros lugares del cuerpo de la función para clarificar el objetivo de
uno o varios de los comandos que se utilizan. Estos comentarios deben ir siempre precedidos
del sı́mbolo %.
Las variables de entrada y salida son parámetros formales (es decir, letras). Cuando se
llama a la función para que realice la acción que se desea, deben ser sustituı́dos por
parámetros reales (es decir, números, vectores, matrices,...). Por ejemplo, la función miexp1
debe ser llamada con dos números concretos. x=miexp1(0.1,3) devolverá en la variable x
el valor de la aproximación de Taylor de tercer orden en 0,1.
Programación en MATLAB 45

Las variables que se definan en el interior de la función (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ún problema.

El fichero que contiene la función 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
función. Por ejemplo, si queremos las gráficas 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 lı́neas en un fichero .m (por ejemplo, smiexp1.m) tenemos un “script” que al
ejecutarlo en MATLAB
>> smiexp1
nos produce cuatro gráficas (figura 4.3), cada una correspondiente a un valor de n, con el
error relativo de la aproximación. Obsérvese el efecto del comando subplot(n,m,p). Crea una
“matriz” de n×m figuras y asigna a la p-ésima el siguiente comando plot. Ası́ p=1 corresponde a
la figura en al posición (1, 1), p=2 a la figura en la posición (1, 2), etc. Todos los demás 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ón 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ón miexp1 sólo acepta escalares y devuelve escalares. MATLAB
está pensado para trabajar con vectores, y como veremos enseguida lo hace más rápido. Conviene
que modifiquemos nuestra función para que admita vectores y produzca vectores. La modificación
es muy sencilla: hay que redefinir y y t para que sean vectores del mismo tamaño que x y cuyas
componentes sean todas igual a 1. Además hay que usar el producto componente a componente
entre x y t.
Programación en MATLAB 46

n= 4 −6 n= 8
x 10
0.02 7

6
0.015
5

4
0.01
3

2
0.005
1

0 0
−1 −0.5 0 0.5 1 −1 −0.5 0 0.5 1

−15 n=16 −16 n=20


x 10 x 10
8 7

6
6
5

4
4
3

2
2
1

0 0
−1 −0.5 0 0.5 1 −1 −0.5 0 0.5 1

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

function y= miexp2(x,n)
%
%Precondiciones: acepta dos valores x=vector de números 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 por
MATLAB. No sólo eso, pueden aparecer mezcladas. Por ejemplo las variables de entrada de la
función miexp2 son un vector y un número. También las variables de salida pueden ser varias
Programación en MATLAB 47

y de distintos tipos. Por ejemplo, la siguiente función calcula el tiempo que tarda MATLAB en
crear (no escribir en pantalla, sino poner en la memoria del ordenador) m matrices aleatorias de
tamaño n × n y nos proporciona la ú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úmero 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 última 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ño 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;
Programación 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ólo depende del código que se emplee sino, sobre todo, de las carac-
terı́sticas del propio ordenador (procesador, memoria, bus,. . . ). La salida debe parecerse a una
tabla con la siguiente forma

length(x) miexp1(x) miexp2(x)


tiempo tiempo
------------------------------------------------
1000 0.11 0.0006
2000 0.20 0.0007
3000 0.25 0.0010
4000 0.35 0.0013
5000 0.43 0.0016
6000 0.52 0.0020
7000 0.61 0.0023
8000 0.71 0.0025
9000 0.81 0.0029
10000 0.93 0.0033

Una última observación. Se podrı́a querer tener tablas comparativas para diversos valores de n
y de la longitud de x. Para conseguirlo bastarı́a convertir el “script” anterior en una función:

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ón de exp(x) mediante
% la aproximación 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;
Programación 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ás 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 función produce un resultado: una tabla con
la comparativa de tiempos pero no almacena esta salida en ninguna variable. El recı́proco, que
una función tenga variables de salida pero no de entrada, también es posible pero muy poco
frecuente.
Capı́tulo 5

Números complejos y polinomio

MATLAB trabaja indistintamente con números reales o complejos, pero hay algunas propie-
dades especı́ficas de estos últimos que hay que tener en cuenta. Polinomios son vectores cuyas
componentes son los coeficientes del polinomio. Sumar polinomios es como sumar vectores, pero
también se puede multiplicar y dividir polinomios. MATLAB tiene una serie de funciones que
ayudan a trabajar con polinomios cómodamente.

5.1. Números Complejos

El comando abs(a) devuelve el valor absoluto o el módulo del número a según que éste sea real
o complejo. De la misma forma abs(A) devuelve una matriz cuyos elementos son los módulos
o los valores absolutos de los elementos de A según que éstos sean números complejos o reales.
Además, como ya se dijo en el Capı́tulo 2, MATLAB no produce un error si se le pide la raı́z
cuadrada o el logaritmo de un número negativo sino que devuelve el correspondiente número
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 trasposición. Si A es una matriz de números 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úmeros 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 números complejos tiene un significa-
do especial: Si y es un vector de números complejos la sentencia plot(y) es equivalente a
plot(real(y),imag(y)).

5.2. Cálculo 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 él, como por ejemplo evaluarlo para un
determinado valor de x (función polyval()) y calcular las raı́ces (función 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)
Números complejos y polinomio 52

ans =
-11

Hay una función similar a polyval pero para matrices: la función plyvalm. Dada una matriz
A y polinomio p(λ) = pol, la función polyvalm(pol,A) devuelve la matriz p(A). Ası́ con el
polinomio pol=[1 0 -8 6 -10] definido más 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 función llamada conv() (de
producto de convolución). En el siguiente ejemplo se va a ver cómo se multiplica un polinomio
de segundo grado por otro de tercer grado:

>> pol1=[1 -2 4]

pol1 =
1 -2 4

>> pol2=[1 0 3 -4]

pol2 =
1 0 3 -4

>> pol3=conv(pol1,pol2)

pol3 =
1 -2 7 -10 20 -16

Para dividir polinomios existe otra función llamada deconv(). Las funciones orientadas al cálculo
con polinomios son las siguientes:

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


Números 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) evaluación del polinomio pol para el valor de x. Si x es un
vector, pol se evalúa para cada elemento de x
polyvalm(pol,A) evaluación del polinomio pol de la matriz A
conv(p1,p2) producto de convolución de dos polinomios p1 y p2
[c,r]=deconv(p,q) división del polinomio p por el polinomio q. En c se devuelve
el cociente y en r el resto de la división
residue(p1,p2) descompone el cociente entre p1 y p2 en suma de fracciones
simples (ver >> help residue)
polyder(pol) calcula la derivada de un polinomio
polyder(p1,p2) calcula la derivada del producto de polinomios
polyfit(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ı́nimos
cuadrados.

Existen también algunas funciones orientadas a la interpolación polinomial que no vamos a


considerar aquı́. Si quieres saber algo sobre ellas utiliza la ayuda.
Apéndice A

Funciones incorporadas en MATLAB

En este apéndice se relacionan algunas (muchas) funciones nativas de MATLAB. Algunas de


ellas están incorporadas al núcleo de MATLAB y otras son ficheros M. Nosotros no vamos
a distinguir entre ambos tipos de funciones. Las hemos clasificado de acuerdo a su propósito
general pero algunas de ellas podrı́an estar en varios grupos.

Se describe brevemente lo que hacen y en muchos casos tanto las variables de entrada (los tipos
de variables que aceptan) como las de salida (lo que producen) son más de las que se relacionan.
Es decir, se explica su objetivo principal pero pueden hacer más 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 explicación más 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 función lo más

54
Funciones incorporadas en MATLAB 55

rápido es utilizar el comando help función.

A.1. Funciones que actúan sobre escalares

Hay funciones matemáticas elementales que operan de modo escalar. Estas funciones, que com-
prenden las funciones matemáticas trascendentales y otras funciones básicas, actúan sobre cada
elemento 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 a
continuación. Se debe entender que si el argumento o argumentos sobre los que actúa la función
son matrices o vectores entonces dicha función actúa término a término. Ası́, si x es una matriz,
sin(x) devuelve una matriz cuyos elementos son los senos de los elementos de la matriz x.

TRIGONOMÉTRICAS

sin(x) seno
cos(x) coseno
tan(x) tangente
cot(x) cotangent
sec(x) secante
csc(x) cosecante
asin(x) arco seno
acos(x) arco coseno
atan(x) arco tangente (devuelve un ángulo entre −π/2 y +π/2)
atan2(x,y) arco tangente (devuelve un ángulo entre −π y +π); se le
pasan 2 argumentos, proporcionales al seno y al coseno
acot(x) arco cotangente
asec(x) arco secante
acsc(x) arco cosecante
sinh(x) seno hiperbólico
cosh(x) coseno hiperbólico
tanh(x) tangente hiperbólica
coth(x) cotangente hiperbólica
sech(x) secante hiperbólica
csch(x) cosecante hiperbólica
asinh(x) arco seno hiperbólico
acosh(x) arco coseno hiperbólico
atanh(x) arco tangente hiperbólica
acoth(x) arco cotangente hiperbólica
asech(x) arco secante hiperbólica
acsch(x) arco cosecante hiperbólica
Funciones incorporadas en MATLAB 56

EXPONENCIALES

exp(x) función exponencial


log(x) logaritmo natural (neperiano)
log10(x) logaritmo decimal
log2(x) logaritmo en base 2
sqrt(x) raı́z cuadrada
realpow(x) potencia que da error si x no es real
reallog(x) logaritmo neperiano de números reales
realsqrt(x) raı́z cuadrada de números mayores o iguales a cero

COMPLEJAS

abs(x) valor absoluto o módulo si x es un número complejo


angle(x) argumento del número complejo x
complex(x,y) devuelve el número complejo x + iy
conj(x) complejo conjugado
real(x) parte real
imag(x) parte imaginaria
isreal(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 un


número complejo, devuelve un vector unitario en la misma
dirección que x
rem(x,y) resto de la división de x entre y. Los argumentos son números
reales (no necesariamente enteros)
mod(x,y) similar a rem (Ver diferencias con el sistema de ayuda)
round(x) redondeo hacia el entero más próximo
fix(x) redondea hacia el entero más próximo a 0
floor(x) valor entero más próximo hacia −∞
ceil(x) valor entero más próximo hacia +∞
gcd(x,y) máximo común divisor
lcm(x,y) mı́nimo común múltiplo
Funciones incorporadas en MATLAB 57

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

A.2. Funciones que actúan sobre vectores

Las siguientes funciones actúan sobre vectores. Aquı́ se presentan sólo algunas funciones. Una
relación completa de todas las funciones soportadas por MATLAB se puede obtener consultando
la ayuda: matlab/datafun.

length(x) devuelve la longitud del vector x


[vM,pM]=max(x) máximo elemento de un vector. Devuelve el valor máximo
vM y la posición que ocupa pM en el vector
[vm, pm]=min(x) mı́nimo elemento de un vector. Devuelve el valor mı́nimo y
la posición que ocupa
sum(x) suma de los elementos de un vector
cumsum(x) 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
mean(x) valor medio de los elementos de un vector
std(x) desviación tı́pica
prod(x) producto de los elementos de un vector
cumprod(x) devuelve el vector producto acumulativo de los elementos de
un vector (como en cumsum pero respecto al producto)
[y,i]=sort(x) ordenación 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 también 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ón 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úan sobre matrices

Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen
algunas de las funciones más útiles y potentes de MATLAB. No están todas las que soporta
MATLAB. La relación completa se puede consultar a través de la ayuda: matlab/elmat y
matlab/matfun principalmente. Se clasificarán en varios subgrupos:
Funciones incorporadas en MATLAB 58

FUNCIONES MATRICIALES ELEMENTALES

A’ calcula la traspuesta (conjugada) de la matriz A


A.’ calcula la traspuesta (sin conjugar) de la matriz A. Si la
matriz A es de números reales A.’ y A’ producen el mismo
resultado.
trace(A) devuelve la traza de la matriz cuadrada A
[m,n] = size(A) devuelve el número de filas m y de columnas n de una matriz
rectangular A
numel(A) devuelve el número 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) la exponencial de A; i.e. eA .
devuelve √
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 la


otra. Si Dim=1 B debajo de A y si Dim=2 pone B detrás de
A
reshape(A,m,n) cambia el tamaño de A a una matriz m × n
diag dependiendo del argumento se emplea para construir una
matriz diagonal o para extraer la diagonal de una matriz
blkdiag(A,B) construye una matriz diagonal por bloques
tril(A) extrae la parte triangular inferior de A
triu(A) extrae la parte triangular superior de A
fliplr(A) permuta las columnas de A: la última pasa a ser la primera,
la anteúltima pasa a ser la segunda, etc..
Funciones incorporadas en MATLAB 59

flipud(A) lo mismo que fliplr pero por filas


rot90(A) rota A 90 grados
[I,J,V]= find(A) encuentra las filas y columnas donde están los elementos no
nulos de A y los almacena en I y J, respectivamente. En V
pone el vector de elementos no nulos.
end(A) devuelve el último ı́ndice de A

FUNCIONES DE ANÁLISIS MATRICIAL

n=norm(v) norma `2 del vector v o de la matriz, si el argumento es una


matriz.Hay variantes para otras normas
n=normest(A) estimación de la norma `2 de la matriz A. Se usa cuando el
tamaño de A es muy grande y se consume mucho tiempo en
calcular norm(A)
r=rank(A) rango de la matriz A
d=det(A) determinante de A
t=trace(A) traza de A
N=null(A) las columnas de N forman una base del núcleo de A
Q=orth(A) las columnas de Q forman una base ortonormal del espacio
imagen de A
subspace1(A,B) ángulo entre los subespacios generados por las columnas de
AyB

FUNCIONES DE FACTORIZACIÓN DE MATRICES Y


DE RESOLUCIÓN DE SISTEMAS LINEALES

/y\ solución de sistemas lineales (ver la ayuda “help slash”)


B = inv(A) inversa de A
c = cond(A) número de condición de A en la norma `2 . Hay una variante
para otras normas
U = chol(A) descomposición de Cholesky de una matriz definida positiva
[L,U] = lu(A) descomposición LU (con pivotamiento) de la matriz A. Es
decir, P A = LU , P una matriz de permutación, L triangular
inferior con 1’s en la diagonal y U una matriz triangular
superior.
[Q,R]=qr(A) descomposición QR de A
d = det(A) Determinante de la matriz cuadrada A
E = rref(A) reducción a forma de escalera por filas de una matriz rec-
tangular A
U = chol(A) descomposición de Cholesky de una matriz definida positiva
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) descomposición de A en valores singulares: A = U SV ∗
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 las
componentes 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 =
U SU ∗
[U,S]=rsf2csf(U,R) transforma la forma de Schur real en la compleja. La forma
de Scur compleja es la habitual: una matriz triangular su-
perior 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 con-
jugados. 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.
[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.
Apéndice 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 . Verás el siguiente icono:

2. Aparecerá la siguiente ventana

3. En la ventanita Servidor escribe la dirección de picasso: 158.227.5.31, En Nombre de


ususario escribe el nombre de tu cuenta. En Contrase~na tu contraseña y puerto escribe
22. A continuación pulsa la tecla “Entrar”.

4. Confirma la conexión si ası́ te lo pide.

5. Aparecerá 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 estás actuando
(el cliente) y las de la derecha el de tu cuenta en picasso (servidor).

6. En picasso cambia al directorio matlab pinchando sobre él. Si todavı́a no lo has creado
procede de la siguiente forma: Pincha con el botón derecho del ratón en cualquiera de
las ventanas correspondientes a picasso. Te aparece un menú en el que puedes seleccionar
crear directorio. Una vez hecho, aparece una ventanita con el “path” completo del
directorio que se creará. Comprueba que es correcto y escribe el nombre del directorio; en
este caso, matlab (en minúsculas).

7. Para trasladar ficheros entre el cliente y el servidor muévete 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 Matemática
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 razón es que el editor que tiene por defecto MATLAB no funciona bien (en la versión 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ñadiendo un icono al escritorio de modo que
al pinchar sobre él se lance MATLAB. El procedimiento es el siguiente:

1. Coloca el ratón en cualquier punto libre del escritorio y haz “click” con el botón derecho.
Aparece un menú.

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ás 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 abrirá una ventana con posibles
dibujos a utilizar.

8. En el recuadro superior pone /usr/share/pixmaps. Sustitúyelo por


/opt/matlab2007/X11/icons/matlab48c icon.xpm y pincha en OK.

Aparecerá el icono de MATLAB en tu escritorio. Ahora pinchando (doble click) sobre él se
deberı́a abrir MATLAB. No olvides cambiar el editor.

También podría gustarte