Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Intromatlab
Intromatlab
A MATLAB
INTRODUCCION
c Victoriano Carmona Centeno y
Julio R. Fern
andez Garca
Profesores del Departamento de Matem
atica Aplicada II
Escuela Universitaria Politecnica
Universidad de Sevilla
ISBN 84-8264-257-X
Deposito Legal SE-233-98
Imprime Librera Papelera Panella
C/Virgen de Africa 8, 41011 Sevilla
Febrero de 1998
MATLAB es una marca registrada de
The Math Works, Inc.
INTRODUCCION
Hace ya bastante tiempo que el ordenador es utilizado en el c
alculo cientfico y su uso
cada vez se impone con m
as fuerza tanto en el terreno de la investigaci
on como pedag
ogicodidactico. Es por ello, que hayan salido al mercado distintos programas en los que aparecen
implementados algunos de los metodos que utilizamos da a da en la resoluci
on de nuestros
problemas.
Uno de estos programas es MATLAB (MATrix LABoratory, Laboratorio de Matrices)
que procede de los proyectos LINPACK y EISPACK y que ha evolucionado durante varios
a
nos hasta su forma actual. MATLAB destaca por su facil aprendizaje, f
acil utilizacion, gran
potencia y pocas exigencias de equipamiento inform
atico. Naturalmente, esta buena relaci
on
calidad-precio hace que sea uno de los programas de software matem
atico m
as extendido.
La potencia de MATLAB se manifiesta por dos caractersticas fundamentales: la
conjugaci
on entre programaci
on cl
asica y funcional y la gran variedad de problemas que es
capaz de resolver (Sistemas de Ecuaciones, Optimizacion, Ecuaciones diferenciales...). Su
facil uso y rapido aprendizaje estan ntimamente relacionados con su car
acter funcional y
con el ente primordial o elemental en MATLAB: La matriz. De esta forma, los datos en
MATLAB son, casi exclusivamente, matrices y la resoluci
on de un determinado problema se
lleva a cabo aplicando a las matrices introducidas las funciones que MATLAB dispone (o
que el usuario ha definido previamente).
MATLAB se presenta entonces como una herramienta eficaz y flexible en el C
alculo
Numerico (sobre todo en el Calculo Numerico Matricial) con excelente posibilidades gr
aficas,
que ayudan al profesor y al alumno tanto en sus trabajos docentes y de estudio como en su
labor de investigacion.
Estas paginas no pretenden agotar, en absoluto, todas las posibilidades que MATLAB
ofrece. Aquellos que deseen profundizar m
as en este tema pueden hacerlo consultando alguno
de los excelentes manuales de la bibliografa y las referencias que en ellos se citan. En ella
hemos incluido libros de ALGEBRA LINEAL para aquellos lectores que necesiten repasar
algunos de los conceptos que se van desarrollando.
El presente manual fue utilizado en 1997 como texto de referencia en el Curso de
Introducci
on a Matlab, celebrado en el Centro Inform
atico Cientfico de Andaluca
(C.I.C.A.) del 7 al 14 de Abril. Este curso, que fue dirigido por los autores, estuvo organizado
por el Vicerrectorado de Relaciones Institucionales y Extension Cultural de la Universidad
de Sevilla y fue homologado por la Consejera de Educacion y Ciencia.
Por u
ltimo deseamos hacer constar la colaboracion del profesor D. Francisco Felix
Lara Martn en la elaboraci
on de unos apuntes preliminares a esta obra.
LOS AUTORES
Indice General
1 Elementos b
asicos
1.1 Formatos de salida . . . . . . . .
1.2 Matrices por bloques . . . . . . .
1.3 Operaciones con Matrices. . . . .
1.4 Operaciones elemento a elemento
.
.
.
.
3
16
18
20
23
25
25
26
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
29
29
30
31
33
33
34
35
37
39
39
39
4 Autovalores y polinomios
4.1 Autovalores y autovectores . . . . . . . . . . . . . . . .
4.2 Valores singulares y pseudoinversa . . . . . . . . . . . .
4.3 Tratamiento de polinomios . . . . . . . . . . . . . . . .
4.3.1 Polinomio caracterstico de una matriz cuadrada
4.3.2 Operaciones con polinomios . . . . . . . . . . . .
4.3.3 Races de polinomios . . . . . . . . . . . . . . . .
4.3.4 Aproximaci
on por polinomios en el sentido de los
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
mnimos
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
cuadrados .
43
43
45
47
47
48
50
52
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
INDICE GENERAL
2
4.3.5
5 Posibilidades gr
aficas
5.1 Graficos en el plano . . . . . . . . . . . .
5.1.1 Poligonales y curvas . . . . . . . .
5.1.2 Curvas en polares . . . . . . . . .
5.1.3 Curvas en parametricas . . . . . .
5.1.4 Histogramas y diagramas de barras
5.2 Curvas en el espacio y superficies . . . . .
5.2.1 Curvas en parametricas . . . . . .
5.2.2 Superficies . . . . . . . . . . . . . .
5.2.3 Curvas de nivel y vector gradiente
54
.
.
.
.
.
.
.
.
.
57
57
57
60
61
63
63
63
65
66
73
73
81
7 Aspectos de an
alisis num
erico
84
7.1
7.2
7.3
7.4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Resoluci
on de Ecuaciones y Sistemas no Lineales .
Integraci
on numerica . . . . . . . . . . . . . . . . .
Optimizacion en una y varias variables . . . . . . .
Resoluci
on de Ecuaciones Diferenciales Ordinarias
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8 Consejos pr
acticos
8.1 Las ordenes help, lookfor y demo . . . . . . . . . . . . . . . . . .
8.2 Informaci
on sobre variables declaradas. Instrucciones para guardar
variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 Relaci
on con el sistema operativo. El comando diary . . . . . . . .
.
y
.
.
. . . .
salvar
. . . .
. . . .
10 Relaci
on de ejercicios
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
84
85
87
87
91
91
92
93
95
102
Captulo 1
Elementos b
asicos
En esta primera secci
on explicaremos aquello que es necesario conocer para comenzar a
utilizar MATLAB. En particular describiremos:
1. La introducci
on de matrices y sus elementos, declaraciones y variables MATLAB.
2. C
omo obtener informacion, terminar y salvar variables declaradas en una sesion.
3. N
umeros y expresiones aritmeticas.
4. Utilizaci
on de la ayuda.
5. Funciones de MATLAB.
DE MATRICES
LA INTRODUCCION
MATLAB trabaja esencialmente con matrices rectangulares cuyos elementos pueden ser
reales, complejos y/o cadenas de caracteres. En ocasiones consideraremos matrices de orden
1 por 1, que son escalares, y matrices con una fila o una columna, que representaran vectores.
En MATLAB podemos introducir las matrices de varias formas:
Introduciendo explcitamente una lista de elementos.
Generando matrices usando variables y funciones incorporadas.
Creando matrices en Mficheros.
Leyendo matrices desde ficheros de datos externos.
El lenguaje MATLAB no contiene ninguna declaracion de dimension u otro tipo de
declaraciones, como sucede en algunos lenguajes de programaci
on. MATLAB asigna y
almacena automaticamente, dependiendo de las caractersticas de cada ordenador.
El modo m
as facil de introducir matrices peque
nas es introducir explcitamente sus elementos, siguiendo las convenciones: Separar explcitamente la lista de elementos con espacios
3
CAPITULO 1. ELEMENTOS BASICOS
en blanco o comas, encerrar los elementos entre corchetes ([ ]) y usar ; para indicar el fin de
cada fila.
Por ejemplo, introduciendo la asignacion
>>A=[1 2 3;4 5 6;7 8 9]
resulta la salida
A =
1
4
7
2
5
8
3
6
9
2
5
8
3
6
9
2
5
8
3
6
9
El comando load y la funcion fread permiten leer matrices generadas durante sesiones
anteriores, importar matrices de otros programas o exportarlas. Pero este es un aspecto que
ser
a tratado mas adelante.
Las matrices pueden incluir algunas expresiones MATLAB; por ejemplo al teclear
5
>>x=[-1.3 sqrt(3) (1+2+3)*4/5]
resulta
>>x=
-1.3000
1.7321
4.8000
Los coeficientes de la matriz pueden referenciarse individualmente utilizando ndices encerrados dentro de un parentesis. Si continuamos con el ejemplo anterior, la asignaci
on
>>x(5)= abs(x(1))
produce
>>x=
-1.3000
1.7321
4.8000
1.3000
11
12
CAPITULO 1. ELEMENTOS BASICOS
6
>>A = A(1:3,:)
A =
1
2
4
5
7
8
3
6
9
toma las tres primeras filas de la matriz A y todas las columnas, y nos devuelve el resultado
introducido en la matriz original. Estos y otros aspectos los veremos mas adelante con mucho
mas detalle.
ASIGNACIONES Y VARIABLES MATLAB
MATLAB es un lenguaje de expresiones: interpreta y eval
ua las expresiones introducidas. Las asignaciones MATLAB son con frecuencia de la forma
variable=expresi
on
o simplemente
expresion
Podemos componer expresiones con operadores, caracteres especiales, funciones y variables. La evaluaci
on produce en la mayora de los casos una matriz. La matriz aparece, si se
desea, en pantalla y es asignada a una variable para su posterior uso. Si omitimos el nombre
de la variable y el signo =, MATLAB automaticamente crea una variable con el nombre
ans (variable de respuesta), donde almacena el resultado. Por ejemplo, si introducimos la
expresi
on
>>sqrt(2)/15
se obtiene
ans =
0.0943
Si una expresion es bastante complicada (y larga) y no es suficiente una lnea para escribirla completamente, podemos a
nadir al final tres puntos ( . . . ) seguidos de un retorno de
carro para indicar que la asignaci
on contin
ue en la lnea siguiente. Por ejemplo,
>>s= 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;
+ 1/7
...
eval
ua la suma de estas fracciones y asigna dicha suma a la variable s. Los espacios en blanco
tras los signos =, + y son opcionales, pero se incluyen para facilitar la lectura.
7
Podemos dar nombres a variables y funciones que empezaran siempre por letras y que
pueden estar seguidas de otras letras o dgitos. MATLAB solo reconoce los 19 primeros
caracteres de un nombre.
MATLAB es muy sensible: distingue entre letras may
usculas y min
usculas. A y a no son
la misma variable. Todos los nombres de funciones deben escribirse con min
usculas; inv(A)
es la inversa de A, pero INV(A) no est
a definida. El comando casesen anula (o activa) esta
sensibilidad.
EN EL ESPACIO DE TRABAJO (WORKSPACE)
RECOGIENDO INFORMACION
En los ejemplos previos hemos creado variables que han sido almacenadas en el espacio de
trabajo de MATLAB. Podemos listar estas variables tecleando who o whos dependiendo
de la informacion que necesitemos de las variables almacenadas.
>>who
Your variables are:
A
ans
r
Esto muestra que los ejemplos anteriores han generado cinco variables, incluyendo la
variable ans.
VARIABLES PERMANENTES
La variable ans y la variable eps tienen un significado especial para MATLAB.
Ellas son permanentes y no pueden borrarse con la orden clear1 . La variable eps es una
tolerancia para considerar cero aquellas variables que sean casi nulas (bastante u
til para
detener los procesos iterativos). El valor estandar de eps para estaciones de trabajo y
ordenadores compatibles es:
eps = 252
que es aproximadamente 2.22 1016 . Podemos inicializar eps a cualquier otro valor
incluido el cero.
Relacionadas con estas variables nos encontramos con las funciones pi, Inf y NaN que
generan valores especiales.
Por ejemplo, la funci
on pi nos devuelve el n
umero , precalculado por el programa
como 4 arctan(1) (cuatro veces el arco cuya tangente es uno). Otra posibilidad es calcular
tecleando imag(log(1)) (parte imaginaria del logaritmo principal de 1).
La funcion Inf, que se utiliza para infinito, se encuentra en algunas calculadoras o
lenguajes de computacion. Un camino para generar el valor que nos devuelva Inf es
1
CAPITULO 1. ELEMENTOS BASICOS
8
>>s=1/0
Warning: Divide by zero
s =
Inf
9
\matlab\graphics
\matlab\color
\matlab\sounds
\matlab\strfun
\matlab\iofun
\matlab\demos
CAPITULO 1. ELEMENTOS BASICOS
10
eig
poly
hess
qz
rsf2csf
cdf2rdf
schur
balance
svd
Matrix functions.
expm
- Matrix exponential.
expm1
- M-file implementation of expm.
expm2
- Matrix exponential via Taylor series.
expm3
- Matrix exponential via eigenvalues and eigenvectors.
logm
- Matrix logarithm.
sqrtm
- Matrix square root.
funm
- Evaluate general matrix function.
Si ahora tecleamos help lu obtenemos informaci
on de la factorizaci
on LU de una matriz.
>>help lu
LU
Factors from Gaussian elimination.
[L,U] = LU(X) stores a upper triangular matrix in U and a
"psychologically lower triangular matrix", i.e. a product
of lower triangular and permutation matrices, in L , so
that X = L*U.
[L,U,P] = LU(X) returns lower triangular matrix L, upper
triangular matrix U, and permutation matrix P so that
P*X = L*U.
By itself, LU(X) returns the output from LINPACKS ZGEFA routine.
Si tecleamos
>>help inverse
MATLAB nos contesta
inverse not found
pues en MATLAB inverse no es el nombre de ninguna funcion o comando, a menos que
haya sido a
nadida por alg
un usuario.
11
Una informaci
on mas general nos la proporciona lookfor. Por ejemplo
>>lookfor inverse
INVHILB Inverse Hilbert matrix.
ACOS Inverse cosine.
ACOSH Inverse hyperbolic cosine.
ACOT Inverse cotangent.
ACOTH Inverse hyperbolic cotangent.
ACSC Inverse cosecant.
ACSCH Inverse hyperbolic cosecant.
ASEC Inverse secant.
ASECH Inverse hyperbolic secant.
ASIN Inverse sine.
ASINH Inverse hyperbolic sine.
ATAN Inverse tangent.
ATAN2 Four quadrant inverse tangent.
ATANH Inverse hyperbolic tangent.
ERFINV Inverse of the error function.
INVERF Inverse Error function.
INV Matrix inverse.
PINV Pseudoinverse.
IFFT Inverse discrete Fourier transform.
IFFT2 Two-dimensional inverse discrete Fourier transform.
nos da una lista de funciones relacionadas con la palabra inverse.
TERMINANDO Y GUARDANDO EL ESPACIO DE TRABAJO (WORKSPACE)
Para terminar una sesi
on con MATLAB teclearemos quit o exit. Al finalizar
una sesion MATLAB se borran todas las variables del espacio de trabajo (i.e., las variables declaradas en la sesi
on actual). Antes de terminar podemos guardar el contenido del
workspace, para una sesion posterior, tecleando
>>save
Este comando salva todas las variables en un fichero llamado matlab.mat. La proxima
vez que MATLAB sea llamado podremos ejecutar load para restaurar, en el workspace,
el contenido de matlab.mat.
Podemos utilizar save y load con otros nombres de fichero.mat o bien guardar s
olo
aquellas variables en las que estemos interesados. El comando save temp X guarda en el
fichero temp.mat s
olo la variable X, mientras que save temp X Y Z almacena en temp.mat
CAPITULO 1. ELEMENTOS BASICOS
12
las variables X,Y y Z. load temp cargas todas las variables almacenadas en el fichero
temp.mat
Por u
ltimo, con los comandos load y save podemos importar y exportar ficheros con
datos ASCII. (Ver mas adelante).
NUMEROS
Y EXPRESIONES ARITMETICAS
MATLAB utiliza la notacion decimal, pudiendo incluir factores con potencias de diez o
unidades imaginarias. Algunos ejemplos de n
umeros legales son:
3,
99,
9.6397238,
0.00001,
1.60210E 20,
6.02252e23,
3e5i,
2i
La aproximacion del n
umero es eps, i.e., aproximadamente 16 dgitos decimales significativos cuando se usa aritmetica de punto flotante. El rango de la mantisa es [308, 308].
Podemos combinar expresiones con los operadores aritmeticos usuales y las reglas de precedencia2 . Las operaciones elementales son:
+ Suma
Resta
Multiplicaci
on
/ Divisi
on derecha
\ Divisi
on izquierda
Potencia
Las operaciones con matrices hacen conveniente tener dos smbolos para la division. Esto
se analizara con m
as detalle cuando abordemos el estudio de las operaciones y funciones con
matrices. Pero, adelantamos que por ejemplo, las expresiones escalares 1/4 y 4\1 tienen el
mismo valor numerico, es decir 0.25.
NUMEROS COMPLEJOS, CADENAS DE CARACTERES Y MATRICES
MATLAB trabaja con n
umeros complejos y representa la unidad imaginaria por i
o j.
El n
umero z en forma binomica podemos escribirlo de dos formas
>>z=3+4*i
z =
3.0000 + 4.0000i
>>z=3+4*j
z =
3.0000 + 4.0000i
2
13
Otra opci
on consiste en utilizar la notaci
on exponencial W=r*exp(i*theta).
>>w=4*exp(i*pi/2)
w =
0.0000 + 4.0000i
Dos formas para introducir matrices complejas son:
>>A=[1 2; 3 4] + i*[5 6; 7 8]
A =
1.0000 + 5.0000i
2.0000 + 6.0000i
3.0000 + 7.0000i
4.0000 + 8.0000i
>> A=[ 1 + 5*i 2 + 6*i; 3 + 7*i 4 + 8*i]
A =
1.0000 + 5.0000i
2.0000 + 6.0000i
3.0000 + 7.0000i
4.0000 + 8.0000i
En las versiones m
as actuales de MATLAB se pueden escribir los n
umeros complejos sin
necesidad de utilizar *. Pero hay que tener cuidado en no dejar espacios en blanco al escribir
la parte imaginaria de un n
umero complejo. Si escribimos
>>1+ 4i
se obtiene
1.0000 + 4.0000i
en cambio, al introducir
>>1 + 4 i
aparece el siguiente mensaje de error
???
1+4 i
\vert
Missing operator, comma, or semi-colon.
Esto tambien hay que tenerlo en cuenta cuando se utiliza la notacion exponencial con
n
umeros reales. Si introducimos
>>1.23e-4
la respuesta es
1.2300e-004
en cambio
CAPITULO 1. ELEMENTOS BASICOS
14
>>1.23 e-4
produce el siguiente mensaje de error
??? 1.23 e
\vert
Missing operator, comma, or semi-colon.
15
z =
1.0000 + 1.0000i
Realmente MATLAB s
olo maneja matrices, pero los elementos de estas pueden ser
n
umeros (reales o complejos) o cadenas de caracteres. Por ejemplo si tecleamos
>> 34
ans =
34
aparece el n
umero 34, en cambio introduciendo matrices formadas por cadenas de caracteres
(incluido el espacio en blanco) podemos leer, por ejemplo, la profunda conversaci
on:
>> saludo=[Hola, Buenos d
as],respuesta=[Buenos d
as]
saludo =
Hola, Buenos d
as
respuesta =
Buenos d
as
FUNCIONES
La potencia de MATLAB se deriva de su extenso conjunto de funciones. Algunas funciones son intrnsecas al proceso de MATLAB en s mismo. Otras funciones se pueden
encontrar en una librera externa de ficheros.m distribuida con MATLAB, llamadas cajas
de herramientas (MATLAB Toolboxes).
Todava se est
an a
nadiendo funciones que han sido creadas por usuarios individuales,
o grupos de usuarios, para aplicaciones m
as especializadas. Este es un hecho importante,
cada usuario puede crear sus propias funciones y trabajar con ellas conjuntamente con las
CAPITULO 1. ELEMENTOS BASICOS
16
8. Ecuaciones diferenciales
9. Ecuaciones no lineales y optimizaci
on
10. Integraci
on numerica
11. Procesamiento de la se
nal
1.1
Formatos de salida
17
1/2
1/3
1/4
1/5
1/6
1/3
1/4
1/5
1/6
1/7
1/4
1/5
1/6
1/7
1/8
1/5
1/6
1/7
1/8
1/9
CAPITULO 1. ELEMENTOS BASICOS
18
-+
++
+
Para volver al formato corto usual podemos teclear format o bien format short.
En relacion con la presentaci
on por pantalla tenemos los comandos format compact
y format loose. El primero de ellos nos suprime las lneas en blanco que, por defecto,
aparecen en una sesi
on MATLAB, mostrando de esta forma m
as informacion en pantalla;
el segundo de los comandos anula el anterior.
1.2
Es posible manejar bloques completos de una matriz utilizando los dos puntos (:). Por
ejemplo:
>> A=[4 5 3 2;3 5 7 -1;2 5 8 0]
A =
4
5
3
2
3
5
7
-1
2
5
8
0
>> A(1,:)
Nos proporciona la primera fila de la matriz A.
ans =
4
5
>> b=B(:,2)
5
5
19
5.0000
0.5000
6.0000
0
5.0000
6.0000
9.0000
2.0000
0
0.2500
-1
-3
1
3
1
2
0
1
-1
-3
Si se definen nuevos elementos de una matriz en una fila o columna no existente, los
elementos no definidos (en la filas o columnas no existentes) se toman como nulos.
CAPITULO 1. ELEMENTOS BASICOS
20
>>P(3,2)=pi
P =
3.0000
-2.0000
0
5.0000
0.5000
3.1416
6.0000
9.0000
0
Los dos puntos se pueden utilizar con otra finalidad. Podemos definir un vector cuyos
elementos est
an en progresion artimetica:
>> t=0:2:10
t =
0
2
10
Los dos puntos tambien se pueden utilizar para transformar una matriz en un vector
columna, siguiendo el orden de las columnas.
>>A(:)
ans =
4
3
2
5
5
5
3
7
8
2
-1
0
1.3
En esta seccion mostraremos como las operaciones con matrices se realizan en MATLAB
de forma bastante natural.
Dada una matriz A, A0 nos proporciona la traspuesta de A, si esta es real, o la adjunta
en sentido hermtico, si A es de n
umeros complejos.
>> T=J
T =
-3
1
0
0
-3
0
0
0
4
0
0
0
21
0
0
1
4
>> C=[3+2*i 6-2*i;7 2*i]
C =
3.0000 + 2.0000i
6.0000 - 2.0000i
7.0000
0 + 2.0000i
>> T=C
T =
3.0000 - 2.0000i
7.0000
6.0000 + 2.0000i
0 - 2.0000i
La suma de matrices (+), el producto (*) y la potencia nesima de una matriz (A n) se
realizan como sigue.
>> S=T+C
S =
6.0000
13.0000
>> E=[6 3
E =
6
-1
5
>> P=E*E
P =
49
1
55
>>NI=[0 1
NI =
0
0
0
>>NI^3
ans =
0
0
0
13.0000 - 2.0000i
+ 2.0000i
0
2;-1 3 -1;5 3 8]
3
3
3
2
-1
8
1
55
11
-4
-4
98
-2;0 0 15;0 0 0]
1
0
0
-2
15
0
0
0
0
0
0
0
Para calcular el determinante de una matriz cuadrada usaremos la funcion det. Por
ejemplo, para la matriz de Hilbert de orden 5 el determinante es:
>>format rat
>>H=hilb(5)
CAPITULO 1. ELEMENTOS BASICOS
22
H=
1
1/2
1/3
1/4
1/5
>> det(H)
ans =
1/266716800000
1/2
1/3
1/4
1/5
1/6
1/3
1/4
1/5
1/6
1/7
1/4
1/5
1/6
1/7
1/8
1/5
1/6
1/7
1/8
1/9
Para calcular la traza emplearemos trace, para obtener el rango rank y para hallar
la inversa inv. Esto se ilustra en el siguiente ejemplo:
>>A=[1 2 3;0 1 2;0 0 1]
A =
1
0
0
2
1
0
3
2
1
-2
1
0
1
-2
1
>>trace(A)
ans =
3
>>rank(A)
ans =
3
>>inv(A)
ans =
1
0
0
La orden size nos da un vector cuyas componentes nos indican el orden de la matriz.
23
Por u
ltimo, indicar que la orden nnz determina el n
umero de elementos no nulos de la
matriz.
>>nnz(A)
ans =
6
1.4
CAPITULO 1. ELEMENTOS BASICOS
24
ans =
1
125
Cuando una de las matrices sea de orden 1 por 1 (i.e., un escalar), las operaciones anteriores tambien tienen sentido. Vease
>> 3 .^v
ans =
3
9
>>3 ./v
ans =
3.0000
27
1.5000
1.0000
10
11
Captulo 2
Matrices especiales.
0
0
0
0
As, las funciones anteriores pueden tener uno o dos argumentos de entrada dependiendo
de la finalidad que persigamos. Esta caracterstica no la poseen s
olo las funciones anteriores, sino que la mayora de las funciones de MATLAB gozan de la misma, como iremos
descrubiendo mas adelante.
Adem
as, la anterior caracterstica est
a ntimamente ligada con la funci
on (variable intrseca) nargin (n
umero de argumentos de entrada) que nos proporciona, una vez que
25
26
1
1
1
1
Para la versi
on 4.2c de MATLAB las ordenes ones(A), eye(A) y size(A) han
quedado obsoletas y conviene sustituirlas por ones(size(A)), eye(size(A)) y zeros(size(A)).
Tambien es posible generar algunas matrices especiales como por ejemplo matrices de
Hilbert. As, hilb(n) produce la matriz de Hilbert de orden n:
>> H=hilb(5)
H =
1.0000
0.5000
0.3333
0.2500
0.2000
2.2
0.5000
0.3333
0.2500
0.2000
0.1667
0.3333
0.2500
0.2000
0.1667
0.1429
0.2500
0.2000
0.1667
0.1429
0.1250
0.2000
0.1667
0.1429
0.1250
0.1111
Existen varias funciones MATLAB que permiten redefinir la estructura de una matriz:
>>rot90(E)
Esta instrucci
on realiza un giro de 90o grados (en sentido positivo) de la matriz E.
ans =
0
0
0
1
0
0
1
0
A partir de una matriz A podemos conseguir nuevas matrices con los mismos elementos,
pero diferente estructura mediante instrucciones como:
reshape(A,m,n)que nos proporciona, a partir de los elementos de A, una matriz de
orden m n siguiendo el orden de las columnas. Naturalmente, A debe tener m n
elementos.
27
fliplr(A) que nos da la matriz A pero con las columnas en orden inverso.
flipud(A) que tiene el mismo efecto que fliplr(A), pero para las filas de A.
>> A=[3 4 6 8;1 0 7 20;-3 -2 8 0]
A =
3
4
6
8
1
0
7
20
-3
-2
8
0
>> R=reshape(A,2,6)
R =
3
-3
0
6
8
20
1
4
-2
7
8
0
>>fliplr(A),flipud(A)
ans =
8
6
4
3
20
7
0
1
0
8
-2
-3
ans =
-3
-2
8
0
1
0
7
20
3
4
6
8
Dada una matriz A existe la posibilidad de generar diversas matrices a traves de la(s)
diagonal(es) de A.
Para obtener la diagonal de una matriz A, (que puede no ser cuadrada) basta teclear
>> D=diag(A)
D =
3
0
8
Si v es un vector diag(v) nos da una matriz diagonal (cuadrada) cuya diagonal es v.
>> diag([5
ans =
5
0
0
7 -3])
0
7
0
0
0
-3
La orden diag(A) posee como variante la orden diag(A,k) que muestra la kesima
superdiagonal de A, si k es positivo, y la kesima subdiagonal, si k es negativo. (Observese
de nuevo la posibilidad de dar distinto n
umero de argumentos de entrada a una funcion
MATLAB).
28
>> D2=diag(A,2)
D2 =
6
20
>> D_1=diag(A,-1)
D_1 =
1
-2
De manera totalmente an
aloga a la orden diag(A) nos encontramos las ordenes triu(A)
y tril(A) que generan matrices triangulares superiores y triangulares inferiores, respectivamente, con los elementos superiores e inferiores, respectivamente, a la diagonal de A y
con los elementos diagonales de la misma.
>> TS=triu(A)
TS =
3
4
0
0
0
0
6
7
8
8
20
0
8
20
0
El lector puede practicar estas instrucciones descomponiendo una matriz cuadrada A como
suma de una matriz triangular inferior L, una matriz diagonal D y una matriz triangular
superior U . (Esta descomposici
on resulta u
til en la resoluci
on de S.E.L. mediantes metodos
iterativos).
Captulo 3
Resoluci
on de S.E.L.
Sistemas cuadrados
Si se desea resolver el S.E.L. (S) : Ax = b, donde A es una matriz cuadrada (no singular);
puede obtenerse la solucion mediante la operaci
on A\b. Esta operaci
on nos indica que estamos
dividiendo, por la izquierda, el vector columna b por la matriz A, i.e., estamos haciendo la
on no se realiza calculando la inversa1
operaci
on A1 b. Como se puede imaginar esta operaci
de A, se lleva a cabo de forma general mediante el metodo de Gauss con estrategia de pivoteo
parcial. Por ejemplo, para resolver el sistema
x + 2y =
3
3x 4y = 1
se realizan las siguientes instrucciones:
Introducci
on de la matriz de coeficientes y el vector columna b.
Resoluci
on del sistema mediante la divisi
on izquierda A\b.
>> A=[1 2;3 -4];b=[3 -1];
>> x=A\b
x =
1.0000
1.0000
Si A es singular, a
un cuando el sistema sea compatible, MATLAB nos proporcionara un
mensaje de error.
1
Pues el c
alculo de la inversa de una matriz es demasiado costoso desde el punto de vista computacional.
29
3.1.2
tol =
2.9790e-015
DE S.E.L.
3.1. RESOLUCION
3.1.3
31
Tiempo de c
alculo y n
umero de operaciones
3.2. DESCOMPOSICIONES
3.2
33
Descomposiciones
3.2.1
Factorizaci
on LU.
4.0000
2.0000
0
0
1.0000
6.0000
14.0000
14.3333
P =
1
0
0
0
0
1
0
1
0
3.2.2
Descomposici
on de Cholesky
3.2. DESCOMPOSICIONES
35
3.2.3
Factorizacion QR
La factorizaci
on QR de una matriz A, no necesariamente cuadrada, puede realizarse mediante la orden [Q,R]=qr(A); Q ser
a entonces una matriz ortogonal (o unitaria en el caso
complejo) y R una matriz triangular superior del mismo tipo que A, tales que A = QR. Tal
descomposicion se lleva a efecto mediante transformaciones de Householder y como se puede
observar en el siguiente ejemplo los elementos diagonales de R no tienen porque ser positivos.
(Se realiza la descomposici
on de esta forma por cuestiones de estabilidad en el metodo).
>> M=[4 6 -2 7;2 4 10 -1;-12 4 -3 0];
>> [Q,R]=qr(M)
Q =
-0.3123
-0.7840
0.5365
-0.1562
-0.5147
-0.8430
0.9370
-0.3471
0.0383
R =
-12.8062
1.2494
-3.7482
-2.0303
0
-8.1510
-2.5375
-4.9732
0
0
-9.6183
4.5984
Podemos comprobar que Q es ortogonal, es decir, (salvo errores de redondeo) Qt Q = I.
-0.0000
1.0000
-0.0000
-0.0000
-0.0000
1.0000
De la misma forma que la funcion lu, la funcion qr tambien puede ser ejecutada
con tres argumentos de salida: la orden [Q,R,P]=qr(A) proporciona una matriz ortogonal
(unitaria) Q, una matriz R triangular superior con elementos diagonales decrecientes y una
matriz C de permutacion de columnas, tales que AC = QR.
>>[Q,R,MPC]=qr(M)
Q =
-0.3123
0.3187
-0.1562
-0.9464
0.9370
-0.0515
R =
-12.8062
-3.7482
0
-9.9474
0
0
MPC =
1
0
0
0
0
1
0
1
0
0
0
0
0.8949
0.2826
0.3454
1.2494
-2.0792
7.8814
-2.0303
3.1777
5.9817
0
0
0
1
-0.5976
-0.2417
-0.5323
0.5487
3.2. DESCOMPOSICIONES
0
0
0
0
37
-0.0000
0
3.2.4
Ortonormalizaci
on y espacio nulo
Gracias a la descomposici
on QR que se obtiene mediante MATLAB podemos calcular una
base ortonormal del espacio columna y una base ortonormal del espacio nulo (n
ucleo) de una
matriz A.
La funcion que permite obtener una base ortonormal del espacio columna de A es orth(A) y una base ortonormal del espacio nulo nos la proporciona la funci
on null(A).
>>Or=orth(M)
Or =
0.3123
-0.3187
0.1562
0.9464
-0.9370
0.0515
>> nulo=null(M)
nulo =
-0.2672
-0.5444
0.3430
0.7173
0.8949
0.2826
0.3454
-0.0000
1.0000
-0.0000
0.0000
-0.0000
1.0000
tol =
2.9790e-15
39
De este forma, todas las soluciones del sistema anterior vienen dadas por
x=
0.8944
y = 1.5 + 0.4472
3.3
3.3.1
con R
Normas y n
umero de condici
on
Normas vectoriales y matriciales
3.3.2
N
umero de condici
on y rango
El n
umero de condici
on de una matriz nos proporciona el valor m
aximo de amplificaci
on de
los errores relativos en la resoluci
on de un S.E.L. sometido a perturbaciones. Si el n
umero de
condicion es mucho mayor que uno, la matriz esta mal condicionada y no debemos fiarnos de
la soluci
on del sistema; si por el contrario es pr
oximo a uno, la matriz se dice bien condicionada
y los posibles errores relativos en la soluci
on est
an acotados por los errores relativos cometidos
en los datos del sistema (matriz y termino independiente).
El n
umero de condici
on de una matriz A se calcula mediante MATLAB con la funcion
cond(A). Para la matriz de Hilbert anterior
x + 2y + 3z = 1
4x + 5y + 6z = 0
7x + 8y + 9z = 0
mediante MATLAB, se efect
uan las siguientes instrucciones:
41
Apreciamos en la obtenci
on de la resolucion del sistema un mensaje de error que nos
informa que la matriz de coeficientes puede ser casi singular (estar mal condicionada). De
hecho la soluci
on que hemos obtenido no es soluci
on del sistema, basta observar que Ax 6= b.
En efecto,
>>A*x
ans =
0.5000
-1.0000
-2.5000
De hecho, la matriz A no es casi singular es, sin lugar a dudas, singular :
>>det(A)
ans =
0
Esto no impide que MATLAB obtenga la inversa de esta matriz:
>>inv(A)
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 2.937385e-18
ans =
1.0e+16 *
0.3152
-0.6304
0.3152
-0.6304
1.2609
-0.6304
0.3152
-0.6304
0.3152
Como se observa MATLAB nos ha dado el mismo mensaje anterior y adem
as ha calculado la inversa de A. Evidentemente esta matriz no es la inversa de A, pues A ans no
da como resultado la matriz identidad:
>>A*ans
ans =
1.0e+17 *
-0.0901
-0.1801
-0.3603
-0.7206
-0.6305
-1.2610
-0.2702
-1.0809
-1.8915
Adem
as, como puede comprobarse f
acilmente, nuestro sistema es INCOMPATIBLE.
on adicional (como la mostrada en el
Advertencia: Aunque MATLAB nos da informaci
ejemplo anterior) cuando resolvemos un S.E.L. o calculamos la inversa de una matriz, se han
detectado, en algunas versiones de MATLAB (en distintos entornos de trabajo), y para el
S.E.L. anterior que no aparece ning
un mensaje de precaucion a la hora de resolver el sistema
[A]
[B]
x +
y = 2
x + 1.0001y = 2
x +
y =
2
x + 1.0001y = 2.0001
Captulo 4
Autovalores y polinomios
4.1
Autovalores y autovectores
Los autovectores y autovalores (complejos) de una matriz cuadrada pueden calcularse conjuntamente por medio de la funci
on eig:
>>V=[1 4;8 -1];
V =
1
4
8
-1
>>[X,D]=eig(V)
X =
0.6446
-0.5101
0.7645
0.8601
D =
5.7446
0
0
-5.7446
As, se obtiene una matriz diagonal D cuya diagonal contiene los autovalores de la matriz
V y una matriz X que verifica la condici
on: V X = XD. Por tanto, las columnas de X son
autovectores de V .
En el siguiente ejemplo comprobamos que las columnas de X no tienen por que ser
linealmente independientes (tenganse en cuenta los errores de redondeo).
>>N=[1 1;0 1];
>>[X,D]=eig(N)
X =
1.0000
-1.0000
0
0.0000
D =
1
0
43
44
0
>>rank(X)
ans =
1
La funci
on eig(A) puede utilizar uno o dos argumentos de salida. En el caso de utilizar
dos argumentos se obtienen los autovectores y los autovalores como se ha descrito anteriormente. Cuando utilizamos un u
nico argumento de salida obtenemos un vector columna que
contiene los autovalores (puede que repetidos) de la matriz A.
>>aut=eig(V)
aut =
5.7446
-5.7446
>>VV=[1 2;-2 1]
VV =
1
2
-2
1
>>autVV=eig(VV)
autVV =
1.0000 + 2.0000i
1.0000 - 2.0000i
Estrechamente relacionadas con el c
alculo de autovalores tenemos la funciones hess(A)
y schur(A) que calculan la forma de Hessenberg y la forma de Schur (superior) de A,
respectivamente. Para la matriz de Hilbert de orden cinco y la matriz V anterior se obtiene:
>>hess(H)
ans =
0.0001
0.0002
0
0
0
>>schur(V)
ans =
5.7446
-0.0000
0.0002
0.0079
0.0143
0
0
0
0.0143
0.2556
-0.3302
0
0
0
-0.3302
1.4126
-0.3222
0
0
0
-0.3222
0.1111
-4.0000
-5.7446
4.2
45
La descomposici
on en valores singulares de una matriz A cualquiera se efect
ua por medio de
la funcion svd. De esta forma, la orden [U,S,V]=svd(A) proporciona una matriz diagonal
S, del mismo tipo que A, y dos matrices ortogonales (unitarias) U y V tales que A = U SV t .
Los elementos de la diagonal de S son por tanto los valores singulares de la matriz A, i.e.,
la raz cuadrada1 de los autovalores de la matriz simetrica (hermtica) semidefinida positiva
At A (A A).
>>A=[1 2;-1 1;0 3]
A =
1
2
-1
1
0
3
>>[U,S,V]=svd(A)
U =
0.5531
0.6006
0.2436
-0.7793
0.7967
-0.1787
S =
3.7527
0
0
1.3846
0
0
V =
0.0825
0.9966
0.9966
-0.0825
-0.5774
-0.5774
0.5774
Podemos comprobar que la raz cuadrada de los autovalores de At A son los valores singulares de A:
>>sqrt(eig(A*A))
ans =
1.3846
3.7527
Vease que la funci
on sqrt ha actuado sobre cada uno de los elementos del vector columna
formado por los autovalores de At A.
Naturalmente la descomposici
on en valores singulares tambien es posible para matrices
con elementos complejos:
>>C=[2+i -i;3 3+2*i];
>>[U,S,V]=svd(C)
1
46
U =
0.2292 + 0.0156i -0.7696 - 0.5958i
0.9710 + 0.0660i
0.1817 + 0.1406i
S =
4.7900
0
0
2.2485
V =
0.7071
-0.7071
0.6325 - 0.3162i
0.6325 - 0.3162i
La funcion svd permite la posibilidad de incluir varios argumentos de salidas. En
concreto, podemos utilizar uno o tres argumentos de salida. En el caso de la utilizaci
on de
svd con tres argumentos se obtienen las tres matrices anteriores y cuando se utiliza un solo
argumento de salida, se almacenan en el, los valores singulares formando un vector columna.
>>MN=[1 2 3;4 5 6;5 7 9]
MN =
1
4
5
2
5
7
3
6
9
>>vs=svd(MN)
vs =
15.6633
0.8126
0.0000
Notese que uno de los valores singulares de MN es nulo; esto sucede porque MN no es de
rango maximo.
Relacionada con el algoritmo de c
alculo de los valores singulares de una matriz A se
encuentra la orden pinv(A) que calcula la pseudoinversa (de Moore-Penrose) de A. Recordamos que la pseudoinversa de una matriz A de orden m n (denotada por A+ ) puede ser
calculada, una vez obtenida la descomposici
on en valores singulares de A, como A+ = V S + U
donde S + es la matriz diagonal de orden n m cuyos elementos diagonales no nulos son los
inversos de los elementos no nulos de S. Recuerdese ademas, que A+ A = I y que la pseudoinversa de A coincide con la inversa de A si esta es cuadrada y regular.
>>ps=pinv(A)
ps =
0.4444
-0.5556
0.1111
0.1111
>>ps*A
ans =
1.0000
-0.0000
-0.1111
0.2222
47
0.0000
1.0000
>>AA=[1 2;5 1];
>>inv(AA)
ans =
-0.1111
0.2222
0.5556
-0.1111
>>pinv(AA)
ans =
-0.1111
0.2222
0.5556
-0.1111
4.3
Tratamiento de polinomios
El tratamiento que MATLAB realiza con los polinomios en una indeterminada es muy
simple: s
olo hace falta introducir los coeficientes del polinomio (en orden decreciente de
potencias) en un vector fila2 . Aquellos resultados que nos muestren como salidas polinomios
tambien seran recogidos de esta forma.
As, el polinomio p(x) = 2x3 3x + 7 es representado por MATLAB como
>>p=[2 0 -3 7]
p =
2
0
4.3.1
-3
La instrucci
on poly(A) nos proporciona los coeficientes del polinomio caraterstico (pA () =
det(I A)) de una matriz cuadrada A.
>>M=[4 6 -2 ;2 4 10;-12 4 -3]
M =
4
6
-2
2
4
10
-12
4
-3
>>pcM=poly(M)
pcM =
1.0e+03 *
0.0010
-0.0050
>>pcM=rats(poly(M))
pcM =
1
-5
2
-0.0840
-84
1.0040
1004
La dimesi
on del vector fila ser
a mayor en una unidad que el grado del polinomio.
48
4.3.2
Puesto que los polinomios se recogen en vectores filas, la suma y diferencia de dos polinomios
se realiza con las operaciones suma y diferencia (+ y ) de matrices. Pero, tengase en cuenta
que para sumar o restar matrices estas deben tener la misma dimensi
on y por consiguiente,
podemos realizar suma o diferencia de polinomios, siempre y cuando, estos tengan el mismo
grado. Por ejemplo si p(x) = 3x3 + 2x2 x + 1 y q(x) = 7x3 + 3x2 + 2x 15 la suma y
diferencia de ambos se realiza como sigue:
>>p=[3 2 -1 1],q=[-7 3 2 -15]
p =
3
2
-1
1
q =
-7
3
2
-15
>>s=p+q
s =
-4
5
1
-14
>>d=p-q
d =
10
-1
-3
16
En cambio si q(x) = 3x2 + 2x 15 la suma de ambos polinomios no puede realizarse de
forma tan simple:
>>q=[3 2 -15]
q =
3
2
-15
>>p+q
??? Error using ==> +
Matrix dimensions must agree.
49
El lector debera pensar una estrategia que permita sumar o restar polinomios de grados
diferentes. La multiplicacion y divisi
on de los polinomios p y q se llevan a cabo con las
funciones conv(p,q) y [c,r]=deconv(p,q). Para la funci
on deconv se entiende que en c
se guarda el cociente de la divisi
on de p entre q y en r el resto de la misma.
>>p=[1 -2 1],q=[1 -1 1]
p =
1
-2
1
q =
1
-1
1
>>conv(p,q)
ans =
1
-3
4
-3
Por el c
alculo anterior se obtiene que
(x2 2x + 1)(x2 x + 1) = x4 3x3 + 4x2 3x + 1
El cociente y el resto de la divisi
on
>>p=[1
-2
-1
p =
1
-2
-1
>>q=[1 -2 1]
q =
1
-2
1
>>[c,r]=deconv(p,q)
c =
1
0
-2
r =
0
0
0
x5 2x4 x3 + 7x2 6x + 2
se calculan mediante:
x2 2x + 1
-6
2]
-6
-1
3
0
50
4.3.3
Races de polinomios
-1
Si el polinomio posee races complejas MATLAB tambien nos las proporciona. Las races
de q(x) = x3 2x2 + x 2 son:
51
-2
-0.5000
1.7500
El algoritmo que MATLAB utiliza para calcular las races de un polinomio esta basado
en la funci
on compan(p) que determina la matriz compa
nera del polinomio p; esto es, la
52
matriz cuyo polinomio caracterstico es, salvo constante multiplicativa, el polinomio dado.
Por ejemplo, la matriz compa
nera del polinomio p(x) = 2x2 2x + 4 es:
>>p=[2 -2 4]
p =
2
-2
>>A=compan(p)
A =
1
-2
1
0
4.3.4
1.3229i
1.3229i
1.3229i
1.3229i
Aproximaci
on por polinomios en el sentido de los mnimos cuadrados
53
1
0.8
2
2.1
3
2.6
4
3
5
3.1
6
3.3
Se pide:
1. Encontrar la recta que mejor aproxime a los datos anteriores.
2. Con la recta obtenida, estimar el tiempo que tardara en salir del laberinto una persona
que ha permanecido en la habitacion 10 horas.
Puesto que nos piden una recta debemos encontrar el polinomio de grado uno que mejor
aproxime a los punto de la tabla anterior:
>>x=1:6
x =
1
2
3
4
5
>>y=[0.8 2.1 2.6 3 3.1 3.3]
y =
0.8000
2.1000
2.6000
>>recta=polyfit(x,y,1)
recta =
0.4543
0.8933
>>rats(recta)
ans =
159/350
67/75
3.0000
3.1000
3.3000
Luego la recta que mejor aproxima, en el sentido de los mnimos cuadrados, viene dada
por la ecuaci
on y = 159/350x + 67/75 y el tiempo estimado para salir del laberinto despues
de diez horas en la habitaci
on se obtiene como sigue:
>>estimado=polyval(recta,10)
estimado =
5.4362
Es decir, el tiempo estimado para salir del laberinto es 5.4362 minutos.
Una nueva estimaci
on se puede obtener calculando el polinomio de interpolaci
on de los
puntos (xi , yi ) para i = 1, . . . , 6. Esto se consigue con la siguientes instrucciones:
>>poliinterp=polyfit(x,y,5)
poliinterp =
0.0125
-0.2250
1.5542
-5.2250
9.0833
>>rats(poliinterp)
ans =
1/80
-9/40
373/240
-209/40
-4.4000
109/12
-22/5
54
Tiempo en el laberinto
6
5
4
3
2
1
0
1
5
6
7
Tiempo en la habitacion
10
>>estimado2=polyval(poliinterp,10)
estimado2 =
118.1000
Es decir, el polinomio de interpolaci
on tiene por ecuacion y = 1/80x5 9/40x4 +373/240x3
209/40x2 +109/12x22/5 y el tiempo estimado son 118.1 minutos3 . La recta de mejor aproximacion puede contemplarse en la siguiente figura, que ha sido realizada con MATLAB. (En
el captulo dedicado a las posibilidades gr
aficas aprenderemos a generarla).
4.3.5
-1
55
>>polyvalm(p,A)
ans =
0
8
-4
0
Se puede as comprobar el Teorema de Cayley-Hamilton que afirma que el polinomio
caracterstico de una matriz se anula en dicha matriz. (Tengase en cuenta los errores de
redondeo).
>>pcA=poly(A)
pcA =
1.0000
-2.0000
>>polyvalm(pcA,A)
ans =
1.0e-15 *
0.4441
0
0
0.4441
3.0000
0.8556 + 0.0000i
1.1688 - 0.0000i
1.3510 + 0.0000i
0.5493 - 0.0000i
N
otese que, salvo errores de redondeo, sqrtm(A)*sqrt(A)=A y logm(expm(A))=A.
>>logariteA=logm(expoA)
logariteA =
1.0000
2.0000 - 0.0000i
-1.0000 - 0.0000i
1.0000 + 0.0000i
>>raizA*raizA
56
ans =
1.0000 + 0.0000i
-1.0000 + 0.0000i
2.0000 + 0.0000i
1.0000 - 0.0000i
No solo las anteriores funciones pueden ser evaluadas matricialmente, sino que cualquier
funcion elemental puede ser evaluada en una matriz. Esto se consigue con la ayuda de la
funcion de MATLAB funm(A,funci
on) que determina el valor de funci
on en la matriz
A. Por el ejemplo, sen(A) es:
>>sA=funm(A,sin)
sA =
1.8329 + 0.0000i
-0.7393 - 0.0000i
1.4786 - 0.0000i
1.8329 - 0.0000i
Captulo 5
Posibilidades gr
aficas
A continuacion detallamos algunas de las posibilidades de representaci
on gr
afica que nos
ofrece MATLAB. Como siempre recomendamos una viva lectura del manual para una visi
on
mas extensa de las posibilidades de visualizaci
on gr
afica.
5.1
Gr
aficos en el plano
5.1.1
Poligonales y curvas
La curva m
as simple que podemos dibujar es una poligonal. Para ello, basta introducir un
vector M y teclear plot(M); esto produce la representaci
on de la poligonal que une los
puntos (i, M (i)), i = 1, . . . , max(size(M )). La figura 5.1 recoge esta poligonal.
>> M=[2 4 6 -2 0];
>> plot(M)
Podemos poner un ttulo a la grafica y etiquetas a los ejes mediante las instrucciones:
>> title(POLIGONAL)
>> xlabel(eje de abcisa)
>> ylabel(eje de ordenada)
Para obtener un mallado del gr
afico tecleamos
>> grid
De manera an
aloga, si introducimos dos vectores x e y, de la misma dimensi
on, la instrucci
on plot(x,y) nos proporcionar
a la gr
afica que se obtiene al unir los puntos (x(i),y(i)).
En la figura 5.2 representamos la curva y = x2 para x [3, 4] con este procedimiento.
>>
>>
>>
>>
x=-3:.1:4;
px=x.^2-1;
plot(x,px),title(PARABOLA),gtext(Figura 5.2)
grid
57
CAPITULO 5. POSIBILIDADES GRAFICAS
58
POLIGONAL
6
5
eje de ordenada
4
3
2
1
0
-1
-2
1.5
2.5
3
eje de abcsisa
3.5
4.5
PARABOLA
16
14
12
10
Figura 5.2
8
6
4
2
0
-2
-3
-2
-1
5.1. GRAFICOS
EN EL PLANO
59
PARBOLA
3
2.5
2
1.5
1
0.5
0
-0.5
-1
-2
-1.5
-1
-0.5
0.5
1.5
CAPITULO 5. POSIBILIDADES GRAFICAS
60
3
2.5
2
1.5
1
0.5
0
-0.5
-1
-2
-1.5
-1
-0.5
0.5
1.5
>>
>>
>>
>>
>>
>>
>>
t=-8:.2:8;
Y1=sin(t);
Y2=cos(t);
r=1/16*t+1/2;
plot(x,px,*,t,Y1,-.,t,Y2,o,t,r,:)
axis([-2 2 -1 3])
title(DISTINTOS TIPOS DE LINEA)
5.1.2
Curvas en polares
Para dibujar una curva dada en coordenadas polares disponemos del comando polar(t,r)
donde t representa el argumento y r el radio (m
odulo). Como ejemplo, en la figura 5.5 se
representa una espiral logartmica:
>>
>>
>>
>>
th=0:.08:100;
R=exp(0.1*th);
polar(th,R)
title(ESPIRAL LOGARITMICA)
5.1. GRAFICOS
EN EL PLANO
120
61
ESPIRAL LOGARITMICA
90
2.5e+004
2e+004
60
1.5e+004
150
30
1e+004
5000
180
210
330
240
300
270
>>
>>
>>
>>
hold on
polar(th,R)
title(ESPIRAL LOGARITMICA)
hold off
5.1.3
Curvas en param
etricas
t=0:.1:2*pi;
x=5*cos(t)-cos(5*t);
y=5*sin(t)-sin(5*t);
plot(x,y)
grid
title(EPICICLOIDE)
axis(square)
CAPITULO 5. POSIBILIDADES GRAFICAS
62
ESPIRAL LOGARITMICA
EPICICLOIDE
-2
-4
-6
-6
-4
-2
63
60
50
40
30
20
10
0
-4
-3
-2
-1
5.1.4
5.2
5.2.1
La representaci
on de una curva en el espacio dada mediante sus ecuaciones parametricas se
hace de modo similar al caso plano. Se utiliza la orden plot3
>> t = 0:pi/50:10*pi;
>> plot3(sin(t),cos(t),t);
>>title(HELICE)
CAPITULO 5. POSIBILIDADES GRAFICAS
64
60
50
40
30
20
10
0
-2
-1
HELICE
35
30
25
20
15
10
5
0
1
0.5
1
0.5
-0.5
-1
-0.5
-1
65
EL SOMBRERO
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
10
Superficie
10
5
-5
-10
-5
-10
5.2.2
Superficies
[x,y]=meshgrid(-8:.5:8,-8:.5:8);
R=sqrt(x.^2+y.^2)+eps;
z=sin(R)./R;
mesh(x,y,z),title(EL SOMBRERO),text(-2.6,-10,-0.15,Superficie)
CAPITULO 5. POSIBILIDADES GRAFICAS
66
subplot(221),mesh(x,y,z),view(45,0)
subplot(222),mesh(x,y,z),view(45,-25)
subplot(223),mesh(x,y,z),view(45,-50)
subplot(224),mesh(x,y,z),view(45,-75)
5.2.3
MATLAB permite dibujar las lneas de contorno de una superficie, las curvas de nivel y
vectores gradiente.Esto se ilustra en los siguientes ejemplos:
2
2
En primer lugar dibujamos en la figura 5.13 la superficie de ecuaci
on z = xex y ,
utilizando mesh(x,y,z)
>>[x,y] = meshgrid(-2:.1:2);
>> z = x .* exp(-x.^2 - y.^2);
>> mesh(x,y,z)
>>title(SUPERFICIE)
Para obtener las lneas de contorno escribiremos contour3(x,y,z)
>> contour3(x,y,z)
>> title(Lineas de contorno)
Para obtener las curvas de nivel contour(x,y,z)
>> contour(x,y,z)
>> title(Curvas de nivel)
Si quisieramos identificar las curvas de nivel deberamos utilizar la orden clabel. Para
ilustrarlo considerar el siguiente ejemplo:
>> cs=contour(x,y,z);clabel(cs)
>> title(Curvas de nivel)
Para obtener la gr
afica simult
anea de la superficie y de las curvas de nivel utilizaremos
meshc(x,y,z)
67
1
1
0.5
0.5
0
-0.5
-10
-0.5
-10
-10
10
10
1
0
-1
-10
10
0
10 -10
1
0
-1
-10
10
10
0
10 -10
Figura 5.12: Distintos tipos de vista
0
10 -10
CAPITULO 5. POSIBILIDADES GRAFICAS
68
SUPERFICIE
0.5
-0.5
2
1
2
1
-1
-2
-1
-2
2 y 2
Figura 5.13: z = ex
Lineas de contorno
0.4
0.2
0
-0.2
-0.4
2
1
2
1
-1
-2
-1
-2
69
Curvas de nivel
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2
-1.5
-1
-0.5
0.5
1.5
Curvas de nivel
2
1.5
1
-0.1
0.3
0.5
-0.3
-0.4
0.4
0
-0.5
0.2
-0.2
-1
0.1
-1.5
-2
-2
0
-1.5
-1
-0.5
0.5
1.5
CAPITULO 5. POSIBILIDADES GRAFICAS
70
0.5
-0.5
2
1
2
1
-1
-2
-1
-2
Figura 5.17: Gr
afica realizada con meshc
>> meshc(x,y,z)
>> title(Superficie y curvas de nivel)
Si queremos visualizar las curvas de nivel y los vectores gradiente utilizaremos las ordenes
gradient y quiver. Esta u
ltima orden visualiza un vector cuyas componentes vienen dadas
por gradient
>>
>>
>>
>>
>>
>>
[x,y] = meshgrid(-2:.1:2);
z = x .* exp(-x.^2 - y.^2);
[px,py] = gradient(z,.1,.1);
contour(x,y,z);
hold on, quiver(x,y,px,py), hold off
title(Curvas de nivel y gradiente)
71
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2
-1.5
-1
-0.5
0.5
1.5
CAPITULO 5. POSIBILIDADES GRAFICAS
72
2
1.5
0.1
-0.1
1
0.2
0.3
0.5
-0.2
-0.4
0.4
-0.3
-0.5
-1
-1.5
-2
-2
-1.5
-1
-0.5
0.5
1.5
Captulo 6
74
-3
4
La matriz A no aparece en pantalla debido al ; sin embargo, a partir de este momento, las
matrices A y B podran ser utilizadas en la sesi
on como si hubieran sido definidas de manera
explcita. Naturalmente, esto resulta interesante, entre otras cosas, si vamos a trabajar con
una matriz suficientemente grande en distintas sesiones de MATLAB.
Al disponer MATLAB de instrucciones del tipo IF, WHILE y FOR (an
alogas a las que
podemos encontrar en lenguajes de programacion como FORTRAN o PASCAL) si un M
fichero nombre.m contiene una sucesion de instrucciones de este tipo que describen una
cierta tarea, al teclear dentro de una sesi
on el nombre del fichero, dichas instrucciones se
ejecutar
an secuencialmente dando un resultado similar a la ejecuci
on de un programa por un
interprete.
Antes de continuar describiremos las instrucciones if, while y for anteriormente
mencionadas y algunas otras que resultan u
tiles en este contexto. Para ello comentaremos,
dentro de un ejemplo concreto, el uso y posibilidades de estas ordenes.
El fichero bg.m contiene:
%BG: Metodo de biseccon o dicotomia.
% El programa BG resuelve la ecuacion g(x)=0 (para una funcion
% g que debe estar definida en un archivo.m) por el metodo
% de dicotomia (o biseccion).
gc=0;
c=0;
disp(Deme el extremo inferior del intervalo)
a=input(a= );
disp(Deme el extremo superior del intervalo)
b=input(b= );
if b<=a
error(Intervalo degenerado)
end
disp(Introduzca el nombre del archivo donde se encuentra la funcion)
g=input(nombre de funcion= ,s);
6.1. INSTRUCCIONES EN MATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR . . .
disp(Deme el valor del test de parada)
ep=input(ep= );
if ep<=0
error(El test de parada debe ser >0)
end
if feval(g,a)==0
solucion=a
return
end
if feval(g,b)==0
solucion=b
return
end
if feval(g,a)*feval(g,b)>0
error(El intervalo podria no contener solucion)
end
i=0;
while b-a>=ep
i=i+1;
c(i)=(a+b)/2;
gc(i)=feval(g,c(i));
if gc(i)==0
disp(La solucion se ha obtenido en uno de los puntos medios)
disp(de los subintervalos)
solucion=c(i)
return
end
if feval(g,a)*gc(i)<0
b=c(i);
else
a=c(i);
end
end
d=(a+b)/2;%Cuando hemos conseguido la tolerancia dada en ep,
%tomamos como solucion el punto medio del intervalo.
solucion=d
disp(El numero de iteraciones es:)
i
iop=menu(Desea la representacion grafica de las Aproximaciones,...
Si,No);
if iop==1
76
plot(gc)
grid
title(Representacion grafica de la aproximacion)
end
Las primeras lneas del programa bg son lneas de comentario. Si en una lnea aparece
el caracter %, todo lo que escribamos en esa lnea a continuacion del tanto por ciento ser
a
interpretado como un comentario y no se evaluara.
La lnea,
disp(Deme el extremo inferior del intervalo)
hace que el programa disponga en pantalla el texto escrito entre las comillas. (La funci
on
disp(matriz) hace que la matriz1 aparezca en pantalla).
La orden:
a=input(a= );
detiene moment
aneamente la ejecuci
on del programa, mostrando en pantalla a=, esperando
la introduccion de un dato numerico que sera asignado a la variable a. La opci
on
g=input(nombre de funcion= ,s);
detiene el programa a la espera de la introducci
on de una cadena de caracteres, que se asignar
a
a la variable g.
La instrucci
on feval(g,a) nos da el valor n
umerico de la funci
on g en el punto a. La
variable g debe contener, como cadenas de caracteres, el nombre del fichero que contiene
la definicion de la funcion que deseamos aplicar sobre a. Por ejemplo, sen(1/2) y log(1)
se pueden obtener con ayuda de la funcion feval como sigue:
>>feval(sin,1/2)
ans =
0.4794
>>feval(log,-1)
ans =
0 + 3.1416i
El conjunto de instrucciones
if feval(g,a)*gc(i)<0
b=c(i);
else
a=c(i);
end
1
Recuerdese que una matriz puede estar formada por cadena de caracteres.
6.1. INSTRUCCIONES EN MATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR . . .
act
ua de la siguiente manera:
si la condici
on feval(g,a)*gc(i)<0 se satisface, entonces la variable b toma el valor c(i),
en caso contrario a tomara el valor c(i).
La estructura general de un bloque IF es la siguiente:
if condici
on1
instrucciones1
elseif condici
on2
instrucciones2
.
.
.
else instruccionesN end
y act
ua de la siguiente forma:
Si condicion1 se satisface se ejecutar
an solamente las instrucciones1, si por el contrario
se satisface condici
on2 solo las instrucciones2se ejecutaran, . . . . Si ninguna de estas
condiciones es satisfecha se ejecutar
a s
olo el bloque instruccionesN. Las condiciones que
aparecen en un bloque IF son expresiones del tipo: expresi
on1 S expresion2, donde S puede
ogicos & (y), | (o),
ser: == (igual), <, >, <=, >= y = (distinto), incluidos los operadores l
(No) y las funciones l
ogicas que se encuentran en los cuadrosresumen del u
ltimo captulo.
La orden
error(texto)
detiene definitivamente la ejecuci
on del programa mostrando un mensaje de error aclarado
por el texto incluido.
>>bg
Deme el extremo inferior del intervalo
a= 1
Deme el extremo superior del intervalo
b= -1
??? Error using ==> bg
Intervalo degenerado
Las instrucciones de tipo WHILE son f
aciles de entender. La estructura general es:
while condici
on
instrucciones
end
78
6.1. INSTRUCCIONES EN MATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR . . .
if iop==1
plot(gc)
grid
title(Representacion grafica de la aproximacion)
end
Si por el contrario seleccionamos el n
umero 2, la representaci
on no se realizara.
Si se desea interrumpir por un momento el programa (por ejemplo, para comprobar
algunos datos) incluimos en el la orden pause que lo detendr
a hasta que alguna tecla
sea pulsada. Tambien disponemos de la opci
on pause(n) que lo detiene por n segundos.
Para terminar comentamos los bucles FOR. La estructura de uno de estos bucles es:
for expresi
on
instrucciones
end
Por ejemplo, usando FOR podemos crear una matriz triangular inferior mediante dos
bucles anidados:
>> for i=1:4
for j=1:1:i
A(i,j)=1;
end
end
>> A
A =
1
0
1
1
1
1
1
1
0
0
1
1
0
0
0
1
Por u
ltimo, se
nalamos que los programas en MATLAB, como el programa bg, no
poseen variables internas al mismo. Esto es, cualquier variable definida en el programa pasa,
automaticamente, a formar parte de las variables del espacio de trabajo. Por consiguiente, si
en una sesion definimos la variable a como:
>>a=[1 2;2 4]
a =
1
2
2
4
y seguidamente calculamos la soluci
on de log x = 0 en [1/2, 3] con la ayuda de bg:
80
>>bg
Deme el extremo inferior del intervalo
a= 1/2
Deme el extremo superior del intervalo
b= 3
Introduzca el nombre del archivo donde se encuentra la funcion
nombre de funcion= log
Deme el valor del test de parada
ep= 0.00001
solucion =
1.0000
El numero de iteraciones es:
i =
18
----- Desea la representacion grafica de las Aproximaciones ----1) Si
2) No
DE FUNCIONES
6.2. DEFINICION
6.2
81
Definici
on de funciones
0.2121
0.8485
-0.4848
0
0
0
0
1.0000
82
Las primeras lneas de comentario definidas en el fichero house.m nos informan del
cometido de la funcion house(x). As, con ayuda de la orden help podemos obtener
informaci
on de la funci
on house.
>>help house
La funcion house(x) calcula la matriz de Householder
asociada al vector columna x (si x=0 se toma la identidad)
La primera lnea de comentario se denomina lnea H1. La orden lookfor palabra realiza
una busqueda de palabra en la lnea H1 de todas las funciones contenidas en la ruta de acceso
de MATLAB. Para que lookfor realice una busqueda en el conjunto de las primeras lneas
de comentario basta teclear la orden lookfor palabra -all.
Para acabar este captulo recordamos que algunas funciones de MATLAB pueden ser
ejecutadas con distintos argumentos de entrada y distintos argumentos de salida y que esta
caracterstica estaba ntimamente ligada con las variables nargin (n
umero de argumentos de
entrada) y nargout (n
umero de argumentos de salida). Pues bien, como no poda ser menos,
cualquier funci
on creada por el usuario puede poseer esta caracterstica si as lo explicitamos
en la definici
on de nuestra funcion. Para ver esto nos creamos la funcion numero que nos
daran el n
umero de argumentos de entrada y el n
umero de argumentos de salida cuando
realizamos una llamada a la funcion numero.
El fichero numero.m contiene:
function [y1,y2,y3,y4,y5,y6,y7,y8,y9,y10]=numero(x1,x2,x3,x4,x5,...
x6,x7,x8,x9,x10)
%NUMERO: Numero de argumentos de entrada y salida
%Esta funcion nos proporciona el numero de argumentos de entrada
%y salida. Como maximo podemos dar diez argumentos de entrada y diez
%de salida.
y1=nargin;
y2=nargout;
De esta forma si teclamos
>>[a,b,c,d]=numero(1,2,[1 2],sqrt(1),4)
las variables a y b contendran el n
umero de argumentos de entrada y de salida, respectivamente, en la llamada a la funcion numero. Vease
a =
5
b =
4
c =
DE FUNCIONES
6.2. DEFINICION
83
[]
d =
[]
Observamos as que cuando realizamos la llamada a una funcion MATLAB, autom
aticamente
se determinan el n
umero de argumentos de entrada y el n
umero de argumentos de salida de
la llamada efectuada.
Por ejemplo, podemos crearnos una funcion que con dos argumentos de entrada nos
proporcione la suma de ambos y que con tres argumentos de entrada nos de el producto de
esos tres n
umeros. Llamamos a esta funci
on sumpro y est
a definida como:
function y=sumpro(x1,x2,x3)
%SUMPRO: Suma o producto
%La funcion sumpro nos proporciona la suma de dos numeros si
%introducimos dos argumentos de entrada y el produto de tres
%numeros, si son tres los argumentos de entrada.
na=nargin;
if na==1,
error(No hay bastantes argumentos de entrada)
elseif na==2
y=sum([x1 x2]);
else
y=prod([x1 x2 x3]);
end
Se pueden presentar las siguientes situaciones:
>>sumpro(2)
??? Error using ==> sumpro
No hay bastantes argumentos de entrada
>>sumpro(1,2)
ans =
3
>>sumpro(1,2,5)
ans =
10
>>sumpro(1,2,3,4)
??? Error using ==> sumpro
Too many input arguments.
Captulo 7
Aspectos de an
alisis num
erico
En esta seccion comentaremos, de forma breve, como Matlab puede ser utilizado para resolver los problemas que con mas frecuencia se pueden encontrar en el campo del An
alisis
Numerico: sistemas de ecuaciones (no lineales), integraci
on, optimizacion y ecuaciones diferenciales.
Solo vamos a comentar las versiones b
asicas de estas ordenes, que poseen numerosas
variantes. Como siempre recomendamos una lectura a fondo del manual.
7.1
Resoluci
on de Ecuaciones y Sistemas no Lineales
1. Ecuaciones:
Imaginemos que queremos resolver la ecuaci
on g(x) = 0 y adem
as que hemos podido
averiguar que una de las soluciones de tal ecuacion esta cercana al punto x0 . Entonces,
la orden fzero(g,x0) nos proporciona la raz de g m
as pr
oxima a x0 .
Se
nalamos que la funcion g debe estar introducida en un fichero denominado g.m. Por
ejemplo, para g(x) =sen(x2 ) 3x + 1 (ver figura 7.1) se tiene:
>>format long e
>>solucion=fzero(g,0)
solucion =
3.817356369038296e-001
que nos da la soluci
on mas cercana a cero de sen(x2 ) 3x + 1 = 0
2. Sistemas:
Para resolver un sistema de ecuaciones (no lineal1 ), como por ejemplo, (ver figura 7.2)
x2 + y 2 1 = 0
xy =0
1
84
NUMERICA
7.2. INTEGRACION
85
definimos la funci
on dim2(X, Y ) = (X 2 + Y 2 1, X Y )mediante el fichero dim2.m
que contiene:
function y=dim2(p)
x=p(1);z=p(2);
y=zeros(2,1);
% Es esencial
y(1)=x2+z2-1;
y(2)=x-z;
y tecleando:
>>sol1=fsolve(dim2,[1 1])
sol1 =
7.071078431372548e-001
7.071078431372548e-001
obtenemos la solucion del sistema m
as proxima al punto del plano (1, 1). Pero observese
que la circunferencia y la recta se cortan en otro punto, opuesto al anterior:
>>sol2=fsolve(dim2,[-1 -1])
sol2 =
-7.071078431372548e-001
-7.071078431372548e-001
7.2
Integraci
on num
erica
86
Resolucion y minimizacion
1
0
cero
-1
-2
-3
-4
-5
-6
-7
minimo
-8
0
0.5
1.5
2.5
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.5
0.5
7.3
87
Optimizaci
on en una y varias variables
4x
x2 + y 2 + 1
alcanza su valor mnimo en el punto (1, 0), donde vale 2 (ver figura 7.3). Esto puede
4x
en el archivo maximini.m y teclemos las ordenes
calcularse si definimos f (x, y) = 2
x + y2 + 1
>>mini=fmins(maximini,[0,0.5])
mini =
0.9999
0.0001
>>maximini(mini)
ans =
-2.0000
El archivo maximini.m contiene
function z=maximini(p)
x=p(1);y=p(2);
z=zeros(1,1);
z=(-4*x)./(x.^2+y.^2+1);
7.4
Resoluci
on de Ecuaciones Diferenciales Ordinarias
en [0, 3]
Para ello se define la funcion dife(t,x) (en el archivo dife.m) que representa la ecuaci
on
diferencial
88
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2
-1
-2
-1
function y=dife(t,x)
y=cos(t).*x;
y tecleamos:
>>t0=0;
>>tf=3;
>>x0=1;
>>[t,x]=ode23(dife,t0,tf,x0);
As, x contiene los valores (aproximados) que toma la soluci
on sobre los puntos del intervalo que se almacenan en el vector t.
>>disp(
t
0
0.0300
0.1726
0.3151
0.4602
0.6103
0.7684
0.9380
1.1245
t
x
1.0000
1.0304
1.1874
1.3632
1.5590
1.7736
2.0033
2.2394
2.4641
x ),disp([t,x])
89
2.8
2.6
2.4
2.2
2
1.8
1.6
1.4
1.2
1
0
0.5
1.5
t
2.5
1.3351
1.5794
1.8706
2.1746
2.3762
2.5520
2.7285
2.8893
3.0000
2.6433
2.7169
2.5977
2.2751
1.9969
1.7415
1.4919
1.2817
1.1499
90
2.8
2.6
2.4
2.2
2
1.8
1.6
1.4
1.2
1
0
0.5
1.5
t
2.5
sen t
Captulo 8
Consejos pr
acticos
En este captulo exponemos algunos de los comandos que resultan de nteres cuando nos
disponemos a trabajar con MATLAB. Ponemos en evidencia que algunas de las funciones
que recogemos en este captulo ya han sido tratadas en los anteriores, pero estamos convencidos que resultar
a beneficioso darles un ligero repaso.
8.1
Las
ordenes help, lookfor y demo
CAPITULO 8. CONSEJOS PRACTICOS
92
Estamos convencidos que un primer contacto con MATLAB debe ser la visualizaci
on de
todas y cada una de las demostraciones que el programa posee. En ellas pueden observarse
las posibilidades y usos de MATLAB en un tiempo relativamente corto. Las demostraciones
que MATLAB nos ofrece pueden contemplarse tecleando la orden demo. Una vez tecleada
esta orden aparecer
a, dependiendo de la version utilizada, un men
u con distintas opciones;
recomendamos que se visualicen todas, la primera vez que utilizamos MATLAB.
En versiones mas actuales la orden intro nos da un breve resumen de las capacidades
de MATLAB. Tambien recomendamos se haga uso de esta orden, al menos la primera vez
que hacemos correr MATLAB.
8.2
Informaci
on sobre variables declaradas.
para guardar y salvar variables
Instrucciones
93
8.3
Relaci
on con el sistema operativo. El comando diary
Al igual que en MSDOS en MATLAB disponemos de los comandos dir, delete, type
y chdir con los mismos cometidos. En cualquier caso si tecleamos ! nos situaremos momentaneamente en el sistema operativo; de esta manera, cualquier instrucci
on que contenga
como primer caracter ! sera interpretada como una orden del sistema. As, una alternativa
a la orden de MATLAB chdir directorio es la instrucci
on !cd directorio.
La instruccion type (antes mencionada) es de gran utilidad, pues podemos contemplar
las instrucciones, en MATLAB, de algunas de sus funciones y aprender bastante sobre su
lenguaje de programacion. Por ejemplo, el n
umero de condici
on de una matriz se calcula
mediante la versi
on 3.5j de MATLAB de la siguiente forma:
>>type cond
function y = cond(x)
%COND Condition number in 2-norm. COND(X) is the
% largest singular value of X to the smallest.
ratio
of
the
94
end
y = max(s)./min(s);
La opci
on diary nombre.m tecleada dentro de una sesion, har
a que todo cuanto aparezca en pantalla a partir de esta lnea sea almacenado en el archivo nombre.m, hasta que
anulemos este comando mediante la instrucci
on diary o.
Recordamos que para las funciones, las variables definidas en ella (i.e., internas) no pasan
a forma parte del espacio de trabajo y que lo contrario sucede para los MFicheros que se
ejecutan en forma de programas.
Por u
ltimo, invitamos al lector a investigar la utilidad del comando echo y sacarle todo
el partido posible.
Captulo 9
En este captulo presentamos, en forma de cuadros, un resumen de los comandos y funciones que con mas frecuencia se utilizan en MATLAB. Para la realizaci
on de los cuadros
res
umenes se ha intentando, en la medida de lo posible, seguir el ndice de materias de los
captulos anteriores. Naturalmente, se realiza una breve descripci
on del comando o funcion
en cuesti
on, que puede aumentarse con ayuda de las p
aginas anteriores, del comando help
de MATLAB o del manual. Algunos de los comandos pueden aparecer repetidos en m
as de
un cuadro.
Advertimos que algunas funciones (o comandos) de MATLAB han podido variar de unas
verisones a otras o quedarse obsoletos; recomendamos tener cerca el manual de la versi
on que
estemos utilizando.
BASICO
help
lookfor
who
whos
what
which
CtrlC
quit
exit
demo
intro
casesen
Ayuda
Busca funciones relacionadas con una palabra
Muestra las variables del espacio de trabajo
Lo mismo que who, pero con mas informacion
Muestra archivos.m
Muestra el directorio de un comando
Interrupci
on
Salir de MATLAB
Salir de MATLAB
Demostracion de MATLAB
Breve introduccion
Sensibilidad a las may
usculas
95
UTILIZADOS
96CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS
VARIABLES PERMANENTES
eps
Valor de precisi
on
ans
Variable de respuesta cuando no hay asignacion
pi
i, j
Unidad imaginaria
Inf
Infinito
NaN
No es un n
umero
flops
N
umero de operaciones
clock
Fecha y hora actual
date
Fecha actual
nargin
N
umero de argumentos de entrada
nargout
N
umero de argumentos de salida
cputime
Tiempo de CPU
tic, . . . , toc Tiempo de c
alculo
=
[, ]
.
...
;
%
:
CARACTERES ESPECIALES
Asignacion
Creaci
on de matrices
Punto decimal. Operaciones elemento a elemento
Continuacion de lnea
Terminaci
on de filas. Suprime impresi
on de resultado
Comentario
Genera vectores
on
, . Multiplicaci
/, ./ Divisi
on derecha
on izquierda
\, .\ Divisi
, .
Potenciacion
0
Transposici
on.
97
abs
real
conj
log
sin
tan
acos
atan2
cosh
asinh
atanh
fix
ceil
rem
FUNCIONES ELEMENTALES
Valor absoluto o modulo
angle Argumento
Parte real
imag
Parte imaginaria
Conjugado
exp
Funci
on exponencial de base e
Logaritmo neperiano
log10 Logaritmo en base 10
Seno
cos
Coseno
Tangente
asin
Arcoseno
Arcocoseno
atan
Arcotangente
Arcotangente de x/y
sinh
Seno hiperbolico
Coseno hiperb
olico
tanh
Tangente hiperb
olica
Argumento seno hiperbolico
acosh Argumento coseno hiperb
olico
Argumento tangente hiperbolica round Redondeo al entero mas cercano
Redondeo hacia cero
floor
Redondeo hacia
Redondeo hacia +
sign
Signo
Resto de la divisi
on
sqrt
Raz cuadrada
MATRICES ESPECIALES
compan Matriz compa
nera
eye
Matriz identidad
gallery
Matrices famosas
magic
Matriz m
agica
hilb
Matriz de Hilbert
invhilb
Inversa de la matriz de Hilbert
ones
Matriz de unos
rand
Matriz aleatoria
zeros
Matriz nula
DE MATRICES
MANIPULACION
rot90
Rotaci
on de 90o
tril
Triangular inferior
triu
Triangular superior
reshape Reordenaci
on
fliplr
Inversion en el orden de las columnas
flipud
Inversion en le orden de las filas
:
Bloques de Matrices
diag
Diagonal
UTILIZADOS
98CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS
DE S.E.L. Y DESCOMPOSICIONES
RESOLUCION
Divsision izquierda. Soluci
on de S.E.L.
\
inv
Matriz inversa
pinv Pseudoinversa
lu
Descomposicion LU (LR)
chol Descomposicion de Cholesky
qr
Descomposicion QR
sdv
Descomposicion en valores singulares
shur Descomposicion de Schur
FUNCIONES MATRICIALES
det
Determinante
poly
Polinomio caracterstico
trace
Traza
eig
Autovalores y autovectores
diag
Diagonal
expm
Exponencial matricial
logm
Logaritmo matricial
sqrtm
Raz cuadrada matricial
funm
Evaluaci
on de funcion matricial
polyvalm Evaluaci
on matricial de un polinomio
TRATAMIENTO DE POLINOMIOS
roots
Races de polinomios
polyval Valor n
umerico de polinomios
conv
Multiplicaci
on
deconv Division
residue Descomposici
on en fracciones simples (complejas)
polyfit Ajuste de datos mediante polinomios
99
No
eval
num2str
int2str
sprintf
hex2num
CADENAS DE CARACTERES
Evalua texto
Convierte n
umeros en cadenas de caracteres
Convierte enteros en cadenas de caracteres
Convierte n
umeros en cadenas de caracteres
Convierte cadenas hexadecimales en n
umeros
INSTRUCCIONES DE ARCHIVO
load
Cargar variables de un archivo en el espacio de trabajo
save
Guardar variables en un fichero
type
Mostrar contenido de un archivo
cd
Cambiar de directorio
delete Borrar un archivo
diary Archivar una sesion de trabajo
!
Instrucci
on del sistema operativo
Ver tambien fread, fopen, . . .
UTILIZADOS
100CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS
GENERANDO GRAFICOS
plot
Grafico bidimensional
subplot
Divide la pantalla de graficos
loglog
Grafico logaritmico
semilogx
Grafico semilogaritmico en el eje x
semilogy
Grafico semilogartmico en el eje y
polar
Representaci
on en polares
meshgrid
Dominio de definicion de superficies
mesh
Grafico tridimensional
bar, stairs Diagramas de barras
title
Ttulo
xlable
Etiqueta en el eje x
ylabel
Etiqueta en el eje y
grid
Mallado
text, gtext Coloca texto en la pantalla gr
afica
ginput
Entrada de coordenadas desde el gr
afico
axis
Escalado de los ejes
view
Punto de vista tridimensional
shg
Muestra el contenido de la pantalla grafica
clf
Limpia la pantalla de gr
aficos
hold
Mantiene el gr
afico en pantalla
101
CONTROL DE LA VENTANA DE COMANDOS
clc
Limpia la pantalla de comandos
format Formato de salida
disp
Dispone matriz o texto
home
Mueve el cursor al comienzo
ANALISIS
NUMERICO
fzero
Resoluci
on de ecuaciones
quad, quad8 Integraci
on numerica
fmin
Mnimos en una variable
ode23, ode45 Resoluci
on de ecuaciones diferenciales
di
Derivadas Aproximadas
ANALISIS
DE DATOS (POR COLUMNAS)
max
M
aximo
min
Mnimo
sum
Suma
prod
Producto
cumsum Suma acumultiva
cumpro Producto acumulativo
sort
Ordena
mean
Valor medio
median
Mediana
std
Desviaci
on tpica
hist
Histogramas
cov
Matriz de covarianza
corrcoef Coeficientes de correlaci
on
Captulo 10
Relaci
on de ejercicios
1. Introduce las siguientes matrices:
A=
1 2
3 4
B=
0 0.1 1
2 3/4
5
2
1 4
D = 32
7
0 9
8 1
6 2
E=
1
C= 0
1
1 0 2 3 1
!
1 2 3
1 1
a)
b) 4 5 6
1 1
7 8 9
!
1 1
1 1 1
c)
d)
1 0
1 1 1
102
103
e) A = (aij ) M4 (R), siendo aij =
1
i+j
1
i2 +j
1 0 1
g) 0 2 0
1 0 3
4. Sea x = 2 e y = 1.
x
2x
3
!
1 2 3 4
A=
5 6 7 8
(a) Introduce A(1, :).
(b) Introduce A(:, 1).
(c) Introduce A(2, :).
(d) Introduce A(:, 2).
(e) Escribe los comandos que muestran la columna tercera y a continuacion la cuarta.
(f) Que ocurre s pretendemos mostrar la inexistente quinta columna de A?
6. Limpia la pantalla y el espacio de trabajo con clc y clear y a continuacion introduce:
(a) u = 1 : 5
(b) v = 5 : 2 : 8
(c) w = (1 : 5)0
(d) x = 5 : 1 : 5 (e) y = 2 pi : .1 : 2 pi (f) u(2)
(g) v(3)
(h) w(4)
(g) y(1)
y(126)
7. Para el anterior vector u realiza:
(a) u. 2
!
1 2
8. Introduce A =
y a continuaci
on:
5 3
(a) A. 2
(f) (A. 2) 3
(b) A. 3
(g) sqrt(A)
(c) A. (1/2)
(h) exp(A)
(d) A. (1)
(i) log(A)
(e) A. 6
(j) log10(A)
DE EJERCICIOS
CAPITULO 10. RELACION
104
(a)2
(b) 2i
(c) 3 i
(d) ( 3 + i)( 3 3i)
(f) 3 8
(h) ei + 1
(e) i2
(g) (Re : (i))2
12i
(j) (1 + i)1
(k) (3 + 2i)(4 + i) (l) 2+3i
(i) (1 + i)2
76i
3i
2
(m) 1+i 29i (n) Im((1 + i) ) (o) log(2i)
(p) sen(2i)
(a) eps
(b) pi
(c) Inf
(e) 0/0
(f) 2 + NaN (g) NaN/NaN
10. Observe la salida:
(i) 1/Inf
(j) 2 + Inf
(k) Inf + 0
(m) inf*inf
1 2 3 4 5
6 7 8 9 10
11. Introduce A =
y observa la salida:
11 12 13 14 15
16 17 18 19 20
(a) A(1, :)
(e) A(1, 1 : 2 : 5)
/i) A([1 1], [2 2])
(b) A(3, :)
(f) A([2, 4], :)
(j) A([2 2], [5 4])
(c) A(:, 2)
(g) A([4, 2], :)
(k) A([3 2], [5 4])
(d) 1/0
(h) Inf/Inf
(l) NaN/Inf
(d) A(:, 5)
(h) A(4 : 1 : 1, 5 : 1 : 1)
12. Construye las siguientes matrices utilizando ., +, , \, , , :, zeros, eye, ones y diag.
(a) A = 2,3
(b) B = I4
(c)
(d)
(e)
(f)
1 1
C= 1 1
1 1
1 0 0
D= 0 1 0
0 0 1
0 1 1
E= 1 0 1
1 1 0
0 0 0
1 0 0
F =
0 2 0
0 0 3
0 0
0 0
0 0
1 1
1 1
1 1
0 0
0 0
0 0
0 0
105
(g)
(h)
(i)
(j)
(k)
0 0 0 0
G= 1 0 0 0
0 1 0 0
0 1 0
H= 0 0 2
0 0 0
!
3 3 3
I=
3 3 3
4 5 6
J = 8 10 12
12 15 18
1 1/2 1/3
A=
2 1 0
0
1 2 1 0
0 1 2 1
0
0 1 2
B=
3
1
1
1
1
3
1
1
1
1
3
1
1
1
1
3
x2 + x3 + x4 = 4
3x3 4x4 = 7
3x1 +
x1 + x2 + x3 + 2x4 = 6
x1 + 2x2 3x3 = 14
3x1 + 4x2 + x3 = 14
DE EJERCICIOS
CAPITULO 10. RELACION
106
(a) A =
(b) A =
(c) A =
(d) A =
3 1 2 1
1 5 4 1
3 1
2
3
2 2 2
3
3 2
5
4
2 3
6
8
1 6 9 20
4 1
4
1
4 2 4 1
30 20 45 12
20 15 36 10
35 28 70 20
!
0 1
1 0
4 X
k
X
ai .
k=1 i=1
1 2 3
3 X
3
Y
aij .
(b) Dada la matriz A = 4 5 6 usa sum y prod para calcular el valor
j=1
i=1
7 8 9
(c) Usa sum y prod para calcular el valor
3 Y
3
X
j=1 i=1
(d) Dada la matriz del apartado b) usa sum y cumprod para calcular el valor
3 X
3
Y
aij .
j=1 i=1
107
20. Calcular An para algunos valores n enteros y positivos. Estudiar el comportamiento de
An para n grande.
!
0.6
0.5
0.6 0.5
a) A =
b) A =
0.18 1.2
0.2 1.2
!
0.67 0.31 0.20
0.9 1.0
c) A =
d) A = 0.18 0.54 0.40
0 0.9
0.15 0.15 0.40
0.2
0.8 0.2 0.1
!
107 + 107
B =
6= 0
1/
1/
. Vare desde 101 hasta 1012 y calcule los determinantes de las matrices B que se
obtienen.
24. Para la matriz A del ejercico 16 calcule A1 mediante inv : (A) y
n
umero de operaciones.
25. Sea Az la matriz de orden 5 dada por
z 1
0
0
0
1
z 1
0
0
Az = 0 1
z 1
0
0
0 1
z 1
0
0
0 1
z
(a) Pruebe que A5 es regular encontrando su inversa.
adj(A)
. Compare
det(A)
DE EJERCICIOS
CAPITULO 10. RELACION
108
!
2 1
A=
2 2 1 2
P =
0
1 1
B=P
AP
1+2
1++2
con 6= 0.
Dar a valores peque
nos y calcular los autovalores, determinantes y rangos de las
matrices A y B. Que conclusiones se pueden decucir?
!
0.4 0.5
28. Sea A =
. Utilice MATLAB para sumar varios terminos de la serie
0.18 0.2
de eA y comprobar que converge a expm : (A).
29. Realiza los siguientes c
alculos:
(a) expm(zeros(2)).
(b) expm(eye(2)).
(c) X = expm([0 1; 1 0]); X t X.
(d) A = rand(3); X = logm(A); expm(X).
(e) sqrtm([0 1;0 0]).
Analiza analticamente el u
ltimo apartado.
30. Siendo L = [1 2 2 0 1 5 pi sqrt(2)], realice los siguientes c
alculos: s=sign(L),
s==1, find(s==1), length(find(s==1)).
109
31. Con la utilidad help informate sobre el cometido de la funci
on poly. Construye los
polinomios que tienen por races:
(a) 1, 2, 3.
(b) ei2k/5 , k = 0, 1, 2, 3, 4, 5.
(c) 1 con multiplicidada 5.
32. Usando la funcion poly calcula los n
umeros combinatorios
!
!
!
10
10
10
,
,... ,
0
1
10
33. Calcula las races de los polinomios:
(a) p(x) = x3 + 6x2 72x + 27
34. Eval
ua p(A) en los siguientes casos:
(a) A = ones(3), p(t) = t3 3t2
A=
0
1
2
3
matrices:
1
1
A=
0 0 1 2
1 2 2 3
36. Experimente la funcion sdv sobre vectores filas y vectores columnas. Que puede
deducir?
37. Encontrar la recta que mejor aproxima en el sentido de los mnimos cuadrados a la nube
de puntos {(3, 10), (2, 15), (1, 9), (0, 27), (1, 18), (2, 34), (3, 42)},utilizando la orden
polyfit(x,y,n).
38. Encuentre la recta que pasa por los puntos (0, 1) y (2, 3).
39. Determine la par
abola que pasa por (1, 2), (0, 1) y (2, 4).
DE EJERCICIOS
CAPITULO 10. RELACION
110
4x
x2 +y2 +1
y encontrar su valor m
aximo.
5 3 6
(a) A = 2 6 6
2 3 9
0
0
0
0
(b) A =
0 1
1 0
(c) ones(20)
0
1
0
0
1
0
0
0
(d) orth((2*rand(5)-1)+i*(2*rand(5)-1))
Que propiedad cumplen los autovalores del apartado d)?
1 0 0
1 1 1
111
48. Con ayuda de la funcion poly y las f
ormulas de Cardano construye una funcion que
nos proporcione la suma de los cuadrados de los autovalores de una matriz.
49. Construye una funcion MATLAB con las siguientes caractersticas:
Acepte como argumentos de entrada un matriz A Mn y polinomio p.
Nos proporcione el vector fila (p(1 ), . . . , p(n )), donde i son los autovalores de
A.
DE EJERCICIOS
CAPITULO 10. RELACION
112
1+2
1++2
113
73. Considere la matriz
A=
1
1
1
1+
1
1
1
1+
1
1
1
1+
6= 0
Bibliografa
[1] PCMATLABTM for MSDOS Personal Computers (Users Guide).
The MathWorks, Inc., (1990).
[2] MATLAB Reference Guide.
The MathWorks, Inc., (Octubre 1992).
114