Вы находитесь на странице: 1из 118

INTRODUCCION A MATLAB

Victoriano Carmona Centeno y Julio R. Fern andez Garca


INTRODUCCI

ON A MATLAB
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.
INTRODUCCI

ON
Hace ya bastante tiempo que el ordenador es utilizado en el c alculo cientco y su uso
cada vez se impone con m as fuerza tanto en el terreno de la investigaci on como pedag ogico-
didactico. 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 maniesta por dos caractersticas fundamentales: la
conjugacion 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
a
plicando a las matrices introducidas las funciones que MATLAB dispone (o
que el usuario ha denido previamente).
MATLAB se presenta entonces como una herramienta ecaz y exible en el C alculo
Numerico (sobre todo en el Calculo Numerico Matricial) con excelente posibilidades gr acas,
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
Introduccion a Matlab, celebrado en el Centro Inform atico Cientco 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 ultimo 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
INTRODUCCION A MATLAB Victoriano Carmona Centeno y Julio R. Fernandez Garca

Indice General
1 Elementos basicos 3
1.1 Formatos de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 Matrices por bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3 Operaciones con Matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4 Operaciones elemento a elemento . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 Tipos especiales de matrices. Construcciones. 25
2.1 Matrices especiales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Redeniciones y construcciones a partir de la diagonal . . . . . . . . . . . . . 26
3 Sistemas de Ecuaciones Lineales y descomposiciones 29
3.1 Resolucion de S.E.L. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1 Sistemas cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2 Sistemas superdeterminados. Mnimos cuadrados . . . . . . . . . . . . 30
3.1.3 Tiempo de c alculo y n umero de operaciones . . . . . . . . . . . . . . . 31
3.2 Descomposiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.1 Factorizaci on LU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.2 Descomposicion de Cholesky . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.3 Factorizacion QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.4 Ortonormalizaci on y espacio nulo . . . . . . . . . . . . . . . . . . . . . 37
3.3 Normas y n umero de condicion . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3.1 Normas vectoriales y matriciales . . . . . . . . . . . . . . . . . . . . . 39
3.3.2 N umero de condici on y rango . . . . . . . . . . . . . . . . . . . . . . . 39
4 Autovalores y polinomios 43
4.1 Autovalores y autovectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Valores singulares y pseudoinversa . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3 Tratamiento de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.1 Polinomio caracterstico de una matriz cuadrada . . . . . . . . . . . . 47
4.3.2 Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.3 Races de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3.4 Aproximaci on por polinomios en el sentido de los mnimos cuadrados . 52
1
2

INDICE GENERAL
4.3.5 La orden polyvalm y semejantes . . . . . . . . . . . . . . . . . . . . . 54
5 Posibilidades gracas 57
5.1 Gracos en el plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.1 Poligonales y curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.2 Curvas en polares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.1.3 Curvas en parametricas . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.4 Histogramas y diagramas de barras . . . . . . . . . . . . . . . . . . . . 63
5.2 Curvas en el espacio y supercies . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.1 Curvas en parametricas . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.2 Supercies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.3 Curvas de nivel y vector gradiente . . . . . . . . . . . . . . . . . . . . 66
6 Funciones y programas en Matlab. MFicheros 73
6.1 Instrucciones en Matlab: input, if, error, while, break, pause, for . . . . . 73
6.2 Denicion de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7 Aspectos de analisis numerico 84
7.1 Resoluci on de Ecuaciones y Sistemas no Lineales . . . . . . . . . . . . . . . . 84
7.2 Integraci on numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.3 Optimizacion en una y varias variables . . . . . . . . . . . . . . . . . . . . . . 87
7.4 Resoluci on de Ecuaciones Diferenciales Ordinarias . . . . . . . . . . . . . . . 87
8 Consejos practicos 91
8.1 Las ordenes help, lookfor y demo . . . . . . . . . . . . . . . . . . . . . . . 91
8.2 Informaci on sobre variables declaradas. Instrucciones para guardar y salvar
variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.3 Relaci on con el sistema operativo. El comando diary . . . . . . . . . . . . . 93
9 Resumen de los comandos y funciones mas utilizados 95
10 Relacion de ejercicios 102
Captulo 1
Elementos basicos
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.
LA INTRODUCCI

ON DE MATRICES
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 la 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 Mcheros.
Leyendo matrices desde cheros 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 mas facil de introducir matrices peque nas es introducir explcitamente sus ele-
mentos, siguiendo las convenciones: Separar explcitamente la lista de elementos con espacios
3
4 CAP

ITULO 1. ELEMENTOS B

ASICOS
en blanco o comas, encerrar los elementos entre corchetes ([ ]) y usar ; para indicar el n de
cada la.
Por ejemplo, introduciendo la asignacion
>>A=[1 2 3;4 5 6;7 8 9]
resulta la salida
A =
1 2 3
4 5 6
7 8 9
MATLAB guarda la matriz para poder usarla posteriormente.
Las matrices tambien pueden introducirse por lneas, reemplazando el ; por un retorno
de carro. Por ejemplo, si tecleamos
>>A=[1 2 3
4 5 6
7 8 9]
obtenemos la misma salida
A =
1 2 3
4 5 6
7 8 9
Podemos introducir las matrices desde discos, utilizando cheros.m. As si un chero se
llama pepe.m y contiene las siguientes lneas de texto
A=[1 2 3
4 5 6
7 8 9]
entonces, la instrucci on pepe lee el chero pepe.m y genera la matriz A:
>>pepe
A =
1 2 3
4 5 6
7 8 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 coecientes de la matriz pueden referenciarse individualmente utilizandondices encer-
rados 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 0 1.3000
Observese que el tama no de x aumenta automaticamente, acomoda al nuevo elemento
que hemos denido y da el valor cero a los elementos que no se han denido.
Si tecleamos
>>r=[10 11 12];
no obtenemos salida alguna; ello se debe a que hemos a nadido el punto y coma al nal. No
obstante MATLAB si ha almacenado la matriz r, para comprobarlo tecleamos
>>r
y resulta
>>r =
10 11 12
Podemos introducir matrices grandes utilizando matrices peque nas como elementosde
la misma. Por ejemplo podemos a nadir una la a la matriz A.
>>A = [ A; r]
A =
1 2 3
4 5 6
7 8 8
10 11 12
De una matriz podemos extraer submatrices utilizando el smbolo :. Por ejemplo
6 CAP

ITULO 1. ELEMENTOS B

ASICOS
>>A = A(1:3,:)
A =
1 2 3
4 5 6
7 8 9
toma las tres primeras las 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 introduci-
das. Las asignaciones MATLAB son con frecuencia de la forma
variable=expresi on
o simplemente
expresion
Podemos componer expresiones con operadores, caracteres especiales, funciones y vari-
ables. La evaluacion 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 suciente una lnea para es-
cribirla completamente, podemos a nadir al nal 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/7 ...
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;
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 denida. El comando casesen anula (o activa) esta
sensibilidad.
RECOGIENDO INFORMACI

ON EN EL ESPACIO DE TRABAJO (WORKSPACE)


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 s x
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 signicado especial para MATLAB.
Ellas son permanentes y no pueden borrarse con la orden clear
1
. La variable eps es una
tolerancia para considerar cero aquellas variables que sean casi nulas (bastante util para
detener los procesos iterativos). El valor estandar de eps para estaciones de trabajo y
ordenadores compatibles es:
eps = 2
52
que es aproximadamente 2.22 10
16
. 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 innito, se encuentra en algunas calculadoras o
lenguajes de computacion. Un camino para generar el valor que nos devuelva Inf es
1
La orden clear A B C limpia del espacio de trabajo estas tres variables.
8 CAP

ITULO 1. ELEMENTOS B

ASICOS
>>s=1/0
Warning: Divide by zero
s =
Inf
Aunque, dependiendo de la version que utilicemos de MATLAB y el entorno de trabajo,
la respuesta al calculo anterior puede ser el smbolo .
En maquinas con cierta aritmetica, la divisi on por cero no provoca un error ni la nal-
izacion de la ejecucion. Produce un mensaje y asigna un valor especial, que podemos utilizar
en calculos posteriores. Por ejemplo, la variable NaN es un n umero relacionado con el
innito pero con distintas propiedades. NaN siginca No es Un N umero. Calculos como
Inf/Inf o 0/0 lo generan. Como otra variable intrseca de MATLAB podemos citar la unidad
imaginaria que se representa en MATLAB por i o j.
LA UTILIDAD HELP
La utilidad help proporciona informacion instantanea de la mayora de los t opicos de
MATLAB. El comando help sin argumentos muestra, dependiendo de la versi on de MAT-
LAB que estemos usando, una lista de los directorios que contienen cheros relacionados con
MATLAB.
>>help
HELP topics:
c:\\matlab - Establish \matlab session parameters.
\matlab\general - General purpose commands.
\matlab\ops - Operators and special characters.
\matlab\lang - Language constructs and debugging.
\matlab\elmat - Elementary matrices and matrix manipulation.
\matlab\specmat - Specialized matrices.
\matlab\elfun - Elementary math functions.
\matlab\specfun - Specialized math functions.
\matlab\matfun - Matrix functions - numerical linear algebra.
\matlab\datafun - Data analysis and Fourier transform functions.
\matlab\polyfun - Polynomial and interpolation functions.
\matlab\funfun - Function functions - nonlinear numerical
methods.
\matlab\sparfun - Sparse matrix functions.
\matlab\plotxy - Two dimensional graphics.
\matlab\plotxyz - Three dimensional graphics.
9
\matlab\graphics - General purpose graphics functions.
\matlab\color - Color control and lighting model functions.
\matlab\sounds - Sound processing functions.
\matlab\strfun - Character string functions.
\matlab\iofun - Low-level file I/O functions.
\matlab\demos - Demonstrations and samples.
For more help on directory/topic, type "help topic".
Cada linea de pantalla incluye el nombre de un directorio seguido por una descripcion del
contenido de los directorios. Si ahora introducimos
>>help matfun
obtenemos la lista de las funciones sobre matrices m as relevantes en Analisis Numerico Ma-
tricial.
Matrix functions - numerical linear algebra.
Matrix analysis.
cond - Matrix condition number.
norm - Matrix or vector norm.
rcond - LINPACK reciprocal condition estimator.
rank - Number of linearly independent rows or columns.
det - Determinant.
trace - Sum of diagonal elements.
null - Null space.
orth - Orthogonalization.
rref - Reduced row echelon form.
Linear equations.
\ and / - Linear equation solution; use "help slash".
chol - Cholesky factorization.
lu - Factors from Gaussian elimination.
inv - Matrix inverse.
qr - Orthogonal-triangular decomposition.
qrdelete - Delete a column from the QR factorization.
qrinsert - Insert a column in the QR factorization.
nnls - Non-negative least-squares.
pinv - Pseudoinverse.
lscov - Least squares in the presence of known covariance.
Eigenvalues and singular values.
10 CAP

ITULO 1. ELEMENTOS B

ASICOS
eig - Eigenvalues and eigenvectors.
poly - Characteristic polynomial.
hess - Hessenberg form.
qz - Generalized eigenvalues.
rsf2csf - Real block diagonal form to complex diagonal form.
cdf2rdf - Complex diagonal form to real block diagonal form.
schur - Schur decomposition.
balance - Diagonal scaling to improve eigenvalue accuracy.
svd - Singular value decomposition.
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 nalizar
una sesion MATLAB se borran todas las variables del espacio de trabajo (i.e., las vari-
ables 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 chero 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 chero.mat o bien guardar s olo
aquellas variables en las que estemos interesados. El comando save temp X guarda en el
chero temp.mat s olo la variable X, mientras que save temp X Y Z almacena en temp.mat
12 CAP

ITULO 1. ELEMENTOS B

ASICOS
las variables X,Y y Z. load temp cargas todas las variables almacenadas en el chero
temp.mat
Por ultimo, con los comandos load y save podemos importar y exportar cheros con
datos ASCII. (Ver mas adelante).
N

UMEROS Y EXPRESIONES ARITM

ETICAS
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 signica-
tivos cuando se usa aritmetica de punto otante. El rango de la mantisa es [308, 308].
Podemos combinar expresiones con los operadores aritmeticos usuales y las reglas de prece-
dencia
2
. 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 mas 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
Para alterar el orden usual de la precedencia de las operaciones, utilizaremos parentesis.
13
Otra opcion 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
14 CAP

ITULO 1. ELEMENTOS B

ASICOS
>>1.23 e-4
produce el siguiente mensaje de error
??? 1.23 e
\vert
Missing operator, comma, or semi-colon.
Si hemos utilizado durante una sesion las letras i o j como nombre de variables o fun-
ciones que juegan un papel distinto al de la unidad imaginaria, y necesitamos posteriormente
trabajar con complejos, podemos denir la unidad imaginaria del siguiente modo:
>>ii=sqrt(-1)
ii =
0 + 1.0000i
Consideremos, por ejemplo, la siguiente sesi on
>>i
ans =
0 + 1.0000i
>>z = 1 + i
z =
1.0000 + 1.0000i
>>w= 1 + j
w =
1.0000 + 1.0000i
>>i=7
i =
7
>>j=6
j =
6
>>z
z =
1.0000 + 1.0000i
>>z= 1+i
z =
8
>>ii=sqrt(-1)
ii =
0 + 1.0000i
>>z=1+ii
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 fun-
ciones son intrnsecas al proceso de MATLAB en s mismo. Otras funciones se pueden
encontrar en una librera externa de cheros.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
funciones intrnsecas de MATLAB.

Este es un aspecto importante que desarrollaremos m as
adelante.
MATLAB posee una gran clase de funciones, entre las que se inlcuyen las funciones
elementales que podemos encontrar en casi todas las calculadoras cientcas (abs, sqrt, log,
sin, . . . ). Las funciones de que disponemos en MATLAB se pueden clasicar, por grupos,
del siguiente modo:
1. Funciones elementales
2. Funciones especiales
3. Funciones matriciales elementales
4. Funciones matriciales especiales
5. Descomposici on de matrices
6. An alisis de datos
7. Tratamiento de polinomios
16 CAP

ITULO 1. ELEMENTOS B

ASICOS
8. Ecuaciones diferenciales
9. Ecuaciones no lineales y optimizaci on
10. Integraci on numerica
11. Procesamiento de la se nal
Una breve descripci on de casi todas las funciones de estos grupos se puede encontrar en
los cuadros res umenes del ultimo captulo o, con mas profundidad, en la gua de usuarios de
MATLAB.
Destacamos que la pr actica totalidad de las funciones elementales de MATLAB no solo
act ua sobre n umeros, sino que tambien operan con matrices actuando directamente sobre las
entradas de la matriz.
En el subapartado dedicado al orden polyvalm veremos algunas funciones matriciales,
como la exponencial matricial, el logaritmo matricial, . . .
1.1 Formatos de salida
Antes de comenzar con el siguiente apartado (las operaciones matriciales) se nalamos que
aunque MATLAB siempre trabaja en doble precisi on, es posible elegir diversos formatos
de salida para los resultados numericos. Por defecto, el formato usual ser a de 5 cifras
decimales.
Algunas de las posibilidades que tenemos las describimos a continuacion con ejemplos
concretos:
>> format short e
>> A=[4/3 7.908767 3]
A =
1.3333e+000 7.9088e+000 3.0000e+000
>> format long
>> A
A =
1.33333333333333 7.90876700000000 3.00000000000000
>> format long e
>> A
A =
1.333333333333333e+000 7.908767000000000e+000
3.000000000000000e+000
La orden format rat hace que los resultados numericos siempre aparezcan como n umeros
racionales. Pero tengase en cuenta que esto no signica que la matriz en cuesti on sea tratada
internamente, por MATLAB, como una matriz racional. Por consiguiente, esto resulta util
1.1. FORMATOS DE SALIDA 17
si tenemos la certeza de estar siempre trabajando con n umeros racionales. Ponemos esto de
maniesto con la aproximaci on racional de MATLAB para

2.
>>format rat
>>sqrt(2)
ans =
114243/80782
>>format long e
>>114243/80782
ans =
1.414213562427273e+00
>>sqrt(2)
ans =
1.414213562373095e+00
Observese que si utilizamos format rat para la representaci on de la matriz de Hilbert
de orden 5 se obtiene:
>>format rat
>>H=hilb(5)
H =
1 1/2 1/3 1/4 1/5
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
El formato format + muestra un diagrama de la matriz en el que solo aparecen los
elementos no nulos (positivos marcados con + y negativos con ). format + resulta
especialmente util para destacar la estructura de una matriz (banda ,diagonal por bloques,
...). Por ejemplo:
>> J=[-3 1 0 0;0 -3 0 0;0 0 4 1;0 0 0 4]
J =
-3 1 0 0
0 -3 0 0
0 0 4 1
0 0 0 4
>> format +
>> J
J =
18 CAP

ITULO 1. ELEMENTOS B

ASICOS
-+
-
++
+
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 Matrices por bloques
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 la de la matriz A.
ans =
4 5 3 2
>> b=B(:,2)
Asigna a la variable b la segunda columna de la matriz B
b =
5
6
-1
>> bloque=A(2:3,1:2)
La variable bloque contiene el bloque formado por la intersecci on de las las 2
a
y 3
a
y
de las columnas 1
a
y 2
a
de la matriz A.
bloque =
3 5
2 5
1.2. MATRICES POR BLOQUES 19
En particular, es posible hacer referencia a un elemento concreto de una matriz. El
elemento (2, 1) de la matriz denominada bloque se obtiene de forma totalmente natural:
>> bloque(2,1)
ans =
2
Una instruccion del tipo M = [P; B] construye, si es posible, una matriz M a nadiendo a
P las las de B. Vease,
>> P=[3 5 6; -2 .5 9]; B=[4 6 2; 9 0 0;5 5 0.25];
>> P,B
P =
3.0000 5.0000 6.0000
-2.0000 0.5000 9.0000
B =
4.0000 6.0000 2.0000
9.0000 0 0
5.0000 5.0000 0.2500
>> F=[P;B]
F =
3.0000 5.0000 6.0000
-2.0000 0.5000 9.0000
4.0000 6.0000 2.0000
9.0000 0 0
5.0000 5.0000 0.2500
La orden M = [P B], analoga a la anterior, construye la matriz M a nadiendo a P las
columnas de B. Naturalmente, esto es posible si P y B tienen el mismo n umero de las.
>>G=[2 1;1 3],O=[1 0 -1;2 1 -3]
G =
2 1
1 3
O =
1 0 -1
2 1 -3
>>M1=[G O]
M1 =
2 1 1 0 -1
1 3 2 1 -3
Si se denen nuevos elementos de una matriz en una la o columna no existente, los
elementos no denidos (en la las o columnas no existentes) se toman como nulos.
20 CAP

ITULO 1. ELEMENTOS B

ASICOS
>>P(3,2)=pi
P =
3.0000 5.0000 6.0000
-2.0000 0.5000 9.0000
0 3.1416 0
Los dos puntos se pueden utilizar con otra nalidad. Podemos denir un vector cuyos
elementos est an en progresion artimetica:
>> t=0:2:10
t =
0 2 4 6 8 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 Operaciones con Matrices.
En esta seccion mostraremos como las operaciones con matrices se realizan en MATLAB
de forma bastante natural.
Dada una matriz A, A
0
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 0 0 0
1 -3 0 0
0 0 4 0
1.3. OPERACIONES CON MATRICES. 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 - 2.0000i
13.0000 + 2.0000i 0
>> E=[6 3 2;-1 3 -1;5 3 8]
E =
6 3 2
-1 3 -1
5 3 8
>> P=E*E
P =
49 1 55
1 11 -4
55 -4 98
>>NI=[0 1 -2;0 0 15;0 0 0]
NI =
0 1 -2
0 0 15
0 0 0
>>NI^3
ans =
0 0 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)
22 CAP

ITULO 1. ELEMENTOS B

ASICOS
H=
1 1/2 1/3 1/4 1/5
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
>> det(H)
ans =
1/266716800000
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 2 3
0 1 2
0 0 1
>>trace(A)
ans =
3
>>rank(A)
ans =
3
>>inv(A)
ans =
1 -2 1
0 1 -2
0 0 1
La orden size nos da un vector cuyas componentes nos indican el orden de la matriz.
1.4. OPERACIONES ELEMENTO A ELEMENTO 23
La primera componente denota el n umero de las y la segunda el n umero de columnas.
>>size(A)
ans =
3 3
Por ultimo, indicar que la orden nnz determina el n umero de elementos no nulos de la
matriz.
>>nnz(A)
ans =
6
1.4 Operaciones elemento a elemento
Si M y N son matrices del mismo orden M. N, M.

N y M./N realizan el producto, la


potenciacion y la divisi on elemento a elemento. (Naturalmente, la suma y la diferencia de
matrices se realizan elemento a elemento). Por ejemplo,
>> PE=E.*E
PE =
36 -3 10
-3 9 -3
10 -3 64
>> PO=E^2
PO =
43 33 25
-14 3 -13
67 48 71
>> PO=E.^2
PO =
36 9 4
1 9 1
25 9 64
>> M=[1 2 5];v=[1 2 3];
>> M.^v
24 CAP

ITULO 1. ELEMENTOS B

ASICOS
ans =
1 4 125
Cuando una de las matrices sea de orden 1 por 1 (i.e., un escalar), las operaciones ante-
riores tambien tienen sentido. Vease
>> 3 .^v
ans =
3 9 27
>>3 ./v
ans =
3.0000 1.5000 1.0000
Notese el espacio entre el n umero 3 y el punto; este es necesario en las primeras versiones
de MATLAB.
En relacion con las operaciones elemento a elemento podemos destacar la operaci on
n
o
+matriz (o matriz+n
o
) que, al contrario de las anteriores no necesita el punto (.), y cuyo
cometido es sumar a cada elemento de la matriz el n umero en cuestion.
>>8+v
ans =
9 10 11
Captulo 2
Tipos especiales de matrices.
Construcciones.
2.1 Matrices especiales.
Indiquemos en primer lugar como generar autom aticamente, con ayuda de algunas funciones
incorporadas en MATLAB, algunos tipos de matrices.
zeros(m,n) genera la matriz nula de orden mn. An alogamente ones(m,n) produce
una matriz de orden mn con todos sus elementos iguales a uno. Si tecleamos zeros(n) o
ones(n) obtenemos los mismos resultados, pero en estos casos las matrices son cuadradas
de orden n.
>> Z=zeros(3,2)
Z =
0 0
0 0
0 0
Si tecleamos eye(n) obtendremos la matriz identidad de orden n. En cambio eye(m,n)
produce el siguiente efecto:
>> E=eye(2,4)
E =
1 0 0 0
0 1 0 0
As, las funciones anteriores pueden tener uno o dos argumentos de entrada dependiendo
de la nalidad que persigamos. Esta caracterstica no la poseen s olo las funciones anteri-
ores, 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 in-
trseca) nargin (n umero de argumentos de entrada) que nos proporciona, una vez que
25
26 CAP

ITULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.


llamamos a una funcion, el n umero de argumentos de entrada que utilizamos en dicha llama-
da (es decir, el n umero de elementos entre parentesis y separados por comas que preceden
al nombre de una funci on). Relacionada con la funci on nargin nos encontramos la funci on
nargout (n umero de argumentos de salida) de la que hablaremos mas adelante.
La orden ones(A) nos proporciona una matriz de unos del mismo orden que A. Efectos
analogos tienen los comandos eye(A) y zeros(A).
>> ones(E)
ans =
1 1 1 1
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
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
2.2 Redeniciones y construcciones a partir de la diagonal
Existen varias funciones MATLAB que permiten redenir la estructura de una matriz:
>>rot90(E)
Esta instrucci on realiza un giro de 90
o
grados (en sentido positivo) de la matriz E.
ans =
0 0
0 0
0 1
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.
2.2. REDEFINICIONES Y CONSTRUCCIONES A PARTIR DE LA DIAGONAL 27
iplr(A) que nos da la matriz A pero con las columnas en orden inverso.
ipud(A) que tiene el mismo efecto que iplr(A), pero para las las 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 7 -3])
ans =
5 0 0
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 CAP

ITULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.


>> 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, respecti-
vamente, 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 6 8
0 0 7 20
0 0 8 0
Tambien disponemos de las variantes triu(A,k) y tril(A,k) que act uan de forma
analoga a la instrucci on diag(A,k). Por ejemplo, triu(A,k) produce el siguiente efecto:
>> TS2=triu(A,2)
TS2 =
0 0 6 8
0 0 0 20
0 0 0 0
El lector puede practicar estas instrucciones descomponiendo una matriz cuadrada Acomo
suma de una matriz triangular inferior L, una matriz diagonal D y una matriz triangular
superior U. (Esta descomposici on resulta util en la resoluci on de S.E.L. mediantes metodos
iterativos).
Captulo 3
Sistemas de Ecuaciones Lineales y
descomposiciones
3.1 Resoluci on de S.E.L.
3.1.1 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
operaci on A
1
b. Como se puede imaginar esta operaci on no se realiza calculando la inversa
1
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 coecientes 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 calculo de la inversa de una matriz es demasiado costoso desde el punto de vista computacional.
29
30 CAP

ITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES


>> A=[1 2;2 4];b=[3 6];
>> x=A\b
Warning: Matrix is singular to working precision.
x =
Inf
Inf
3.1.2 Sistemas superdeterminados. Mnimos cuadrados
Si A no es cuadrada, A\b resuelve el sistema (S) en el sentido de los mnimos cuadrados. De
esta forma, podemos resolver el sistema anterior a nadiendo una la nula a la matriz ampliada
[A|b].
>> A(3,:)=[0 0];b(3)=0;
>> x=A\b
Warning: Rank deficient, rank = 1 tol = 2.9790e-015
x =
0
1.5000
Como podemos observar, s olo hemos obtenido una de las soluciones del sistema. Para
tener todas, solamente nos falta una base del espacio nulo (n ucleo) de la matriz A. Veremos
como obtener esto en una pr oxima secci on.
Se ha puesto de maniesto en este subapartado que la resoluci on del sistema Ax = b,
llevada a cabo por MATLAB mediante la orden A\b, depende de la estructura de la matriz
de coecientes del sistema. De hecho, la divisi on izquierda \ utiliza, a grandes rasgos, el
siguiente algoritmo:
Si la matriz A es una permutaci on de una matriz triangular superior (resp. inferior) se
utiliza el metodo de subida (resp. bajada).
Si A es simetrica (hermtica) denida positiva se calcula la descomposicion de Cholesky
de A, i.e., se determina la matriz triangular superior R con elementos diagonales es-
trictamente positivos tal que A = R
t
R y a continuaci on se determina x de la forma
x = R\(R
0
\b).
Si la matriz de coecientes no es una permutacion de una matriz triangular o no es
denida positiva, la resolucion del sistema se lleva a cabo calculando la descomposicion
LU de A mediante el metodo de Gauss con estrategia de pivoteo parcial. Una vez
calculadas las matrices L y U, la soluci on del sistema es x = U\(L\b).
Por ultimo, si A no es cuadrada se computa la descomposici on QR de A mediante
simetras de Householder. Es decir, se calcula Q ortogonal, R triangular superior y P
matriz de permutacion tales que AP = QR. Una vez obtenidas P, Q y R se calcula x
mediante x = P (R\(Q
0
b)).
3.1. RESOLUCI

ON DE S.E.L. 31
3.1.3 Tiempo de calculo y n umero de operaciones
Como hemos visto en el captulo 1 la instrucci on inv(A) calcula la inversa de la matriz
A, si esta es regular (en realidad, s olo podemos arnos del resultado nal si A no es casi
singular). La resoluci on de un determinado S.E.L. puede realizarse con MATLAB mediante
la orden inv(A)*b, pero como pondremos de maniesto a continuaci on es m as efectivo la
utilizaci on del comando A\b. Esta ecacia se pone de maniesto comparando el n umero
de operaciones de ambos metodos y el tiempo de c alculo para llevar a cabo los mismos. El
n umero de operaciones que MATLAB ha efectuado en una sesion puede obtenerse con el
comando ops. Ahora bien, la utilizaci on de la version ops(0) hace que el contandor
(del n umero de operaciones) se inicialice a cero, con lo que si seguidamente realizamos algunas
operaciones con MATLAB podemos conocer el n umero de estas sin mas que teclear ops.
Para el sistema cuadrado
x + 2y = 3
3x 4y = 1
comparamos el n umero de operaciones:
>>flops(0)
>>x=A\b
x =
1.0000
1.0000
>>flops
ans =
33
>>flops(0)
>>x=inv(A)*b
x =
1.0000
1.0000
>>flops
ans =
44
Se observa que, incluso para un sistema con dos ecuaciones y dos incognitas, el n umero
de operaciones es mucho mayor si utilizamos para resolver el sistema la orden inv(A)b.
Dentro de los ejercicios que se acompa nan al nal se propone la construccion de una
funcion que nos permita resolver un S.E.L. cuadrado por el metodo de Cramer. Sera conve-
niente que el lector comparase con algunos ejemplos el n umero de operaciones necesario para
la resoluci on del sistema utilizando el metodo de Cramer y el algoritmo divisi on izquierda.
32 CAP

ITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES


Para la evaluaci on de tiempos de calculo, tenemos varias posibilidades. Las funciones
tic y toc nos proporcionan conjuntamente el tiempo de c alculo de cualquier expresion
MATLAB sin mas que teclear
>>tic
>>expresiones
>>toc
La funcion cputime nos propociona el tiempo en segundos usado por MATLAB desde
el instante en que entramos en el programa. De esta forma podemos calcular el tiempo de
c alculo de cualquier expresi on realizando las siguientes instrucciones:
>>t1=cputime
>>expresiones
>>t2=cputime-t1
Para comparar los tiempos de c alculo tambien podemos hacer uso de los comandos clock
y etime. El primero de ellos nos muestra un vector la de seis componentes en el que se
puede obeservar el a no, mes, da, hora, minutos y segundos que marca el reloj de nuestro orde-
nador. La orden etime(t2,t1) nos proporciona el tiempo, en segundos, que han transcurrido
entre dos vectores de tiempo t1 y t2.
Creamos una matriz y un vector (de grandes dimesiones
2
) formados por n umeros aleato-
rios, comprendidos entre cero y uno, con ayuda de la funcion rand(m,n):
>>A=rand(30);b=rand(30,1);
y resolvemos el sistema Ax = b mediante la divisi on izquierda \ y mediante la inversa
inv(A):
>>t1=clock;x=A\b;etime(clock,t1)
ans =
0.5167
>>t1=clock;x=inv(A)*b;etime(clock,t1)
ans =
1.0333
Se comprueba que la resolucion del sistema mediante la orden inv(A)b necesita mayor
tiempo de c alculo que la divisi on izquierda (de hecho, casi el doble de tiempo).
2
Hacemos esto, pues la diferencia entre los tiempos de c alculo de los dos metodos para S.E.L. peque nos es
casi inapreciable.
3.2. DESCOMPOSICIONES 33
3.2 Descomposiciones
3.2.1 Factorizacion LU.
Dada una matriz A [L,U]=lu(A) realiza la descomposicion LU (LR) de la matriz cuadrada
A. Esta descomposicion siempre se realiza siguiendo el metodo de Gauss con estrategia de
pivote parcial, por lo cual, aunque U es triangular superior, L en la mayora de los casos no
es triangular inferior.
>> 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
>> A=A(1:3,1:3)
A =
3 4 6
1 0 7
-3 -2 8
>> [L,U]=lu(A)
L =
1.0000 0 0
0.3333 -0.6667 1.0000
-1.0000 1.0000 0
U =
3.0000 4.0000 6.0000
0 2.0000 14.0000
0 0 14.3333
Sin embargo, introduciendo la orden [L,U,P]=lu(A)es posible conocer los intercambios
de las, debidos al pivoteo parcial, que ha sufrido la matriz A. En este caso L s es triangular
inferior con unos en la diagonal y P es la matriz de permutaci on que nos da los intercambios
de las. Es decir, PA = LU. Compruebese
>> [L,U,P]=lu(A)
L =
1.0000 0 0
-1.0000 1.0000 0
0.3333 -0.6667 1.0000
U =
3.0000 4.0000 6.0000
0 2.0000 14.0000
34 CAP

ITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES


0 0 14.3333
P =
1 0 0
0 0 1
0 1 0
Vemos que la funci on lu posee una caracterstica particular: la funcion puede ser llama-
da con distinto n umero de argumentos de salida seg un nuestra nalidad. Esta caraterstica
no es privilegio exclusivo de la funci on lu, sino muchas otras funciones de MATLAB,
como veremos m as adelante, tambien presentan esta particularidad.
3.2.2 Descomposicion de Cholesky
Si A es una matriz simetrica (hermtica) denida positiva la descomposicion de Cholesky
de A se realiza con la funci on chol(A). Se obtiene una matriz R triangular superior con
elementos diagonales estrictamente positivos tal que A = R
t
R.
>>S=[2 -1 0;-1 2 -1;0 -1 2]
S =
2 -1 0
-1 2 -1
0 -1 2
>>chol(S)
ans =
1.4142 -0.7071 0
0 1.2247 -0.8165
0 0 1.1547
Notese que se obtiene un mensaje de error si la matriz no es denida positiva:
>>T=[2 -1 0;-1 2 0;-1 -1 -1]
T =
2 -1 0
-1 2 0
-1 -1 -1
>>chol(T)
??? Error using ==> chol
Matrix must be positive definite.
No obstante la funci on chol con dos argumentos de salida nunca nos proporciona men-
saje de error. Si escribimos [R, p] =chol(A) obtemos las siguientes respuestas:
Si A es denida positiva, entonces p = 0 y R contiene la descomposicion de Cholesky
de A.
3.2. DESCOMPOSICIONES 35
Si A no es denida positiva, entonces p es un n umero entero estrictamente positivo y
R una matriz triangular superior con elementos diagonales estrictamente positivos de
orden q = p 1 tal que R
0
R = A(1 : q, 1 : q). Es decir, el comando chol con
dos argumentos de salida nos proporciona la descomposici on de Cholesky de la mayor
submatriz principal de A que es denida positiva (y, salvo una unidad, el orden de esta).
>>[R,p]=chol(T)
R=
1.4142 -0.7071
0 1.2247
p=
3
Naturalmente, si ninguna submatriz principal de A es denida positiva R tendra como
valor la matriz vacia (matriz que no contiene elementos) y p sera igual a uno.
>>M=[-2 1;2 3];
>>[s,f]=chol(M)
s=
[ ]
f=
1
3.2.3 Factorizacion QR
La factorizaci on QR de una matriz A, no necesariamente cuadrada, puede realizarse medi-
ante 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) Q
t
Q = I.
36 CAP

ITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES


>> Q*Q
ans =
1.0000 -0.0000 -0.0000
-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.8949
-0.1562 -0.9464 0.2826
0.9370 -0.0515 0.3454
R =
-12.8062 -3.7482 1.2494 -2.0303
0 -9.9474 -2.0792 3.1777
0 0 7.8814 5.9817
MPC =
1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
Ponemos un ejemplo en el que se observa los elementos nulos en la diagonal de R.
>>MM=[1 1 2;2 0 2;-1 3 2;1 4 5]
MM =
1 1 2
2 0 2
-1 3 2
1 4 5
>>[Q,R]=qr(MM)
Q =
-0.3780 0.1416 0.6928 -0.5976
-0.7559 -0.1133 -0.5978 -0.2417
0.3780 0.6516 -0.3863 -0.5323
-0.3780 0.7366 0.1165 0.5487
R =
-2.6458 -0.7559 -3.4017
0 5.0427 5.0427
3.2. DESCOMPOSICIONES 37
0 0 -0.0000
0 0 0
Hacemos notar que, una vez conocida R, el c alculo del rango de A es inmediato, pues Q
es no singular. Para el ejemplo anterior R tiene dos las nulas y por consiguiente el rango de
MM es dos. En efecto,
>>rank(MM)
ans =
2
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 or-
th(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.8949
0.1562 0.9464 0.2826
-0.9370 0.0515 0.3454
>> nulo=null(M)
nulo =
-0.2672
-0.5444
0.3430
0.7173
Comprobamos que son bases ortonormales calculando Or
t
Or y nulo
t
nulo.
Or*Or
ans =
1.0000 -0.0000 0.0000
-0.0000 1.0000 -0.0000
0.0000 -0.0000 1.0000
nulo*nulo
ans =
1.0000
38 CAP

ITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES


Notese que con ayuda de null y \ se pueden resolver sistemas de ecuaciones compatibles
indeterminados. Por ejemplo, el sistema compatible indeterminado
x + 2y = 3
2x + 4y = 6
puede resolverse siguiendo los pasos:
1. Si es necesario, se a nade un la nula a la matriz ampliada para conseguir un sistema
no cuadrado.
2. Se calcula una soluci on particular del mismo.
3. Calculamos una base del espacio nulo de la matriz de coecientes.
Estos tres pasos se realizan en MATLAB del siguiente modo:
>>A=[1 2;2 4],b=[3 6]
A =
1 2
2 4
b =
3
6
>>A(3,:)=[0 0],b(3)=0
A =
1 2
2 4
0 0
b =
3
6
0
>>x=A\b
Warning: Rank deficient, rank = 1 tol = 2.9790e-15
x =
0
1.5000
>>nulo=null(A)
nulo =
-0.8944
0.4472
3.3. NORMAS Y N

UMERO DE CONDICI

ON 39
De este forma, todas las soluciones del sistema anterior vienen dadas por
x = 0.8944
y = 1.5 + 0.4472
con R
3.3 Normas y n umero de condicion
3.3.1 Normas vectoriales y matriciales
Si A es una matriz cuadrada norm(A,p) (siendo p = 1, 2, inf) proporciona la norma p de
A.
>> V=[1 4;8 -1];
>> N2=norm(V,2)
N2 =
8.0828
>> N1=norm(V,1)
N1 =
9
>> Ninf=norm(V,inf)
Ninf =
9
Puesto que en la mayora de los casos se trabaja con la norma eucldea (i.e., en norma
2), por defecto norm(A) nos da el mismo valor que norm(A,2). (De nuevo la funcion
norm puede tener distinto n umero de argumentos de entrada)
Para vectores norm(v,p) calcula la norma p del vector v y en este caso p puede ser
cualquier real del interalo [1, +].
>> w=[2 -4 6];
>> norm(w,3)
ans =
6.6039
3.3.2 N umero de condicion y rango
El n umero de condicion de una matriz nos proporciona el valor m aximo de amplicaci 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 arnos 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
40 CAP

ITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES


>> cond(H)
ans =
4.7661e+005
Parece, entonces, necesario obtener el n umero de condici on de la matriz de coecientes de
un sistema de ecuaciones lineales antes de resolverlo. Pero afortunadamente, MATLAB a
medida que resuelve el sistema calcula, mediante el comando rcond(A), una aproximacion
del inverso del n umero de condicion de la matriz de coecientes A, dandonos un aviso para
que tengamos en cuenta que si rcond(A) es peque no, hay posibilidad de un gran error en
la solucion si hemos cometido un peque no error en los datos del sistema. Para la matriz
H=hilb(5), 1/cond(A) = 2.0982e 006 y mediante la funci on rcond se obtiene:
>> rcond(H)
ans =
1.4407e-006
Ponemos de maniesto a continuaci on la ventaja de la informacion complementaria de
MATLAB cuando resolvemos un S.E.L. Por ejemplo, para la resolucion del sistema
x + 2y + 3z = 1
4x + 5y + 6z = 0
7x + 8y + 9z = 0
_

_
mediante MATLAB, se efect uan las siguientes instrucciones:
>>A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>>b=[1 0 0]
b =
1
0
0
>>x=A\b
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 2.937385e-18
x=
1.0e+15 *
3.1522
-6.3044
3.1522
3.3. NORMAS Y N

UMERO DE CONDICI

ON 41
Apreciamos en la obtenci on de la resolucion del sistema un mensaje de error que nos
informa que la matriz de coecientes 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 cal-
culado 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.2702
-0.3603 -0.7206 -1.0809
-0.6305 -1.2610 -1.8915
Adem as, como puede comprobarse f acilmente, nuestro sistema es INCOMPATIBLE.
Advertencia: Aunque MATLAB nos da informaci on adicional (como la mostrada en el
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
42 CAP

ITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES


o calcular la inversa de la matriz de coecientes. Parece l ogico, entonces, calcular cond(A)
(o rcond(A)) antes de resolver un sistema y tomar la decision de resolverlo una vez conocido
el n umero de condici on de la matriz de coecientes.
El rango de una matriz se calcula mediante MATLAB con la funci on rank(A). Por
ejemplo, para la matriz de coecientes y la matriz ampliada del sistema anterior se obtiene:
>>rank(A)
ans =
2
>>rank([A b])
ans =
3
y por consiguiente se observa que el sistema anterior es incompatible.
Para la matriz de Hilbert anterior el rango es
>> rank(H)
ans =
5
En realidad, el rango de A se calcula como el n umero de valores singulares (ver mas
adelante) casi no nulos de esta. Esto permite utilizar la funci on rank con dos argumentos
de entrada: rank(A,tol) que considera nulos los valores singulares menores que tol.
>> rank(H,.001)
ans =
3
Si hemos introducido un solo argumento de entrada para rank el valor de tol viene dado
por defecto como tol=max(size(A))norm(A)eps.
Finalizamos esta secci on proponiendo al lector que resuelva los siguientes sistemas de
ecuaciones, que se encuentran propuestos en el libro de G. Strang, Algebra Lineal Aplicada,
y que compare los resultados obtenidos:
[A]
(
x + y = 2
x + 1.0001y = 2
[B]
(
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 con-
juntamente 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 verica 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 CAP

ITULO 4. AUTOVALORES Y POLINOMIOS


0 1
>>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 anterior-
mente. Cuando utilizamos un unico 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
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
>>schur(V)
ans =
5.7446 -4.0000
-0.0000 -5.7446
Observese que en la diagonal de la matriz de Schur aparecen los autovalores de V .
4.2. VALORES SINGULARES Y PSEUDOINVERSA 45
4.2 Valores singulares y pseudoinversa
La descomposicion 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 = USV
t
.
Los elementos de la diagonal de S son por tanto los valores singulares de la matriz A, i.e.,
la raz cuadrada
1
de los autovalores de la matriz simetrica (hermtica) semidenida positiva
A
t
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.5774
0.2436 -0.7793 -0.5774
0.7967 -0.1787 0.5774
S =
3.7527 0
0 1.3846
0 0
V =
0.0825 0.9966
0.9966 -0.0825
Podemos comprobar que la raz cuadrada de los autovalores de A
t
A son los valores sin-
gulares 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 A
t
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
Puesto que A

A es hermtica semidenida positiva sus autovalores son no negativos.


46 CAP

ITULO 4. AUTOVALORES Y POLINOMIOS


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. Recor-
damos 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 pseu-
doinversa 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 0.1111 0.2222
>>ps*A
ans =
1.0000 -0.0000
4.3. TRATAMIENTO DE POLINOMIOS 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 coecientes del polinomio (en orden decreciente de
potencias) en un vector la
2
. Aquellos resultados que nos muestren como salidas polinomios
tambien seran recogidos de esta forma.
As, el polinomio p(x) = 2x
3
3x + 7 es representado por MATLAB como
>>p=[2 0 -3 7]
p =
2 0 -3 7
4.3.1 Polinomio caracterstico de una matriz cuadrada
La instrucci on poly(A) nos proporciona los coecientes del polinomio caraterstico (p
A
() =
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 -0.0840 1.0040
>>pcM=rats(poly(M))
pcM =
1 -5 -84 1004
2
La dimesion del vector la sera mayor en una unidad que el grado del polinomio.
48 CAP

ITULO 4. AUTOVALORES Y POLINOMIOS


Luego el polinomio caracterstico de M es
p
C
() =
3
5
2
84 + 1004
y podemos observar que el determinante de M es, salvo signo, el termino independiente del
polinomio caraterstico de M y que el coeciente de
2
, salvo signo, nos lo proporciona la
traza de M.
>>det(M)
ans =
-1004
>>trace(M)
ans =
5
4.3.2 Operaciones con polinomios
Puesto que los polinomios se recogen en vectores las, 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) = 3x
3
+ 2x
2
x + 1 y q(x) = 7x
3
+ 3x
2
+ 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) = 3x
2
+ 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.
4.3. TRATAMIENTO DE POLINOMIOS 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 1
Por el c alculo anterior se obtiene que
(x
2
2x + 1)(x
2
x + 1) = x
4
3x
3
+ 4x
2
3x + 1
El cociente y el resto de la divisi on
x
5
2x
4
x
3
+ 7x
2
6x + 2
x
2
2x + 1
se calculan mediante:
>>p=[1 -2 -1 7 -6 2]
p =
1 -2 -1 7 -6 2
>>q=[1 -2 1]
q =
1 -2 1
>>[c,r]=deconv(p,q)
c =
1 0 -2 3
r =
0 0 0 0 2 -1
Es decir, c(x) = x
3
2x + 3 y r(x) = 2x 1. Compruebese.
Incluimos en esta secci on una funcion que nos parece bastante interesante. Se trata de
la funci on residue que nos proporciona, a grandes rasgos, la descomposici on en fracciones
simples de una funci on racional cuyo denominador posee races reales simples. De esta forma,
la instrucci on [a,r,k]=residue(p,q) obtiene la descomposici on
P(x)
Q(x)
=
a
1
x r
1
+ +
a
n
x r
n
+k(x)
y almacena las constantes a
i
en el vector a, las races r
i
en el vector r y el polinomio k(x) en
el vector la k.
Por ejemplo, la descomposici on en fraciones simples de
x
2
x
2
1
viene dada por:
50 CAP

ITULO 4. AUTOVALORES Y POLINOMIOS


>>[a,r,k]=residue([1 0 0],[1 0 -1])
a =
-0.5000
0.5000
r =
-1
1
k =
1
Es decir,
x
2
x
2
1
=
0.5
x + 1
+
0.5
x 1
+ 1
La funcion residue act ua en MATLAB como su propia inversa, pues si se utiliza con
tres argumentos de entrada y dos de salida, es decir, de la forma [p,q]=residue(a,r,k),
nos proporciona la funcion racional que tiene como descomposici on en fracciones simples los
vectores a, r y k.
>>[p,q]=residue(a,r,k)
p =
1.0000 0 0
q =
1 0 -1
4.3.3 Races de polinomios
Si el polinomio p(x) ha sido introducido en un vector p de la forma descrita anteriormente,
las races (complejas) de p(x) pueden ser calculadas con la orden roots(p). Las races de p,
que pueden estar repetidas, se almacenar an en un vector columna.
Por ejemplo, las soluciones de la ecuaci on x
2
1 = 0 se obtiene f acilmente:
>>p=[1 0 -1]
p =
1 0 -1
>>rp=roots(p)
rp =
-1
1
Si el polinomio posee races complejas MATLABtambien nos las proporciona. Las races
de q(x) = x
3
2x
2
+x 2 son:
4.3. TRATAMIENTO DE POLINOMIOS 51
>>q=[1 -2 1 -2]
q =
1 -2 1 -2
>>rq=roots(q)
rq =
2.0000
-0.0000 + 1.0000i
-0.0000 - 1.0000i
Podemos evaluar el valor de un polinomio p en un cierto punto x R con la ayuda de la
funcion polyval(p,x). De esta forma, por ejemplo, podemos comprobar que p y q se anulan
(salvo errores de redondeo) en las componentes de rp y rq, respectivamente:
>>polyval(p,rp(1)),polyval(p,rp(2))
ans =
0
ans =
0
>>polyval(q,rq(1)),polyval(q,rq(2)),polyval(q,rq(3))
ans =
-6.6613e-15
ans =
0+ 2.2204e-16i
ans =
0- 2.2204e-16i
Puede tambien evaluarse el valor del polinomio en una serie de puntos, sin m as que
introducir estos puntos en un vector x y teclear la orden anterior. Los valores de r(x) =
x
2
x + 1 para x = 1, x = sqrt(2) y x = 1/2 son
>>r=[1 -1 1]
r =
1 -1 1
>>x=[1 sqrt(2) -1/2]
x =
1.0000 1.4142 -0.5000
>>polyval(r,x)
ans =
1.0000 1.5858 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 CAP

ITULO 4. AUTOVALORES Y POLINOMIOS


matriz cuyo polinomio caracterstico es, salvo constante multiplicativa, el polinomio dado.
Por ejemplo, la matriz compa nera del polinomio p(x) = 2x
2
2x + 4 es:
>>p=[2 -2 4]
p =
2 -2 4
>>A=compan(p)
A =
1 -2
1 0
y su polinomio caracterstico es proporcional a p:
>>pA=poly(A)
pA =
1 -1 2
Una vez que MATLAB obtine la matriz compa nera de un polinomio p, con ayuda de
la funcion eig, calcula los autovalores de la misma, que, coinciden, naturalmente, con las
races de p.
>>roots(p)
ans =
0.5000 + 1.3229i
0.5000 - 1.3229i
>>eig(A)
ans =
0.5000 + 1.3229i
0.5000 - 1.3229i
4.3.4 Aproximacion por polinomios en el sentido de los mnimos cuadrados
Dados dos vectores x e y, de la misma dimension, la instrucci on polyt(x,y,n) calcula el (o
un) polinomio de grado n que mejor se aproxima (en el sentido de los minimos cuadrados)
a los pares de puntos (x(i), y(i)). En particular, si x e y son vectores de n + 1 componentes
(con todas las componentes de x distintas) la orden anterior nos proporciona el polinomio
que interpola los valores (x
i
, y
i
), i = 1, . . . , n + 1.
Vamos a aplicar la funci on polyta la resoluci on del siguiente problema:
En un experimento para determinar la capacidad de orientaci on se coloca a un
individuo en una habitaci on especial y despues de un cierto tiempo en ella se le
pide que encuentre el camino de salida de un laberinto. Se obtienen los siguientes
resultados:
4.3. TRATAMIENTO DE POLINOMIOS 53
Tiempo en la habitacion (horas): 1 2 3 4 5 6
Tiempo en salir del laberinto (minutos): 0.8 2.1 2.6 3 3.1 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 6
>>y=[0.8 2.1 2.6 3 3.1 3.3]
y =
0.8000 2.1000 2.6000 3.0000 3.1000 3.3000
>>recta=polyfit(x,y,1)
recta =
0.4543 0.8933
>>rats(recta)
ans =
159/350 67/75
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 (x
i
, y
i
) 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 -4.4000
>>rats(poliinterp)
ans =
1/80 -9/40 373/240 -209/40 109/12 -22/5
54 CAP

ITULO 4. AUTOVALORES Y POLINOMIOS


1 2 3 4 5 6 7 8 9 10
0
1
2
3
4
5
6
7
Tiempo en la habitacion
T
i
e
m
p
o

e
n

e
l

l
a
b
e
r
i
n
t
o
Aproximacion por minimos cuadrados
Figura 4.1: Recta de regresi on
>>estimado2=polyval(poliinterp,10)
estimado2 =
118.1000
Es decir, el polinomio de interpolaci on tiene por ecuacion y = 1/80x
5
9/40x
4
+373/240x
3

209/40x
2
+109/12x22/5 y el tiempo estimado son 118.1 minutos
3
. La recta de mejor aprox-
imacion puede contemplarse en la siguiente gura, que ha sido realizada con MATLAB. (En
el captulo dedicado a las posibilidades gr acas aprenderemos a generarla).
4.3.5 La orden polyvalm y semejantes
En la subseccion anterior hemos visto como MATLAB puede propocionarnos el valor de
un polinomio p en una cierta colecci on de puntos gracias a la funci on polyval. Pues bien
si p(x) = c
n
x
n
+ c
n1
x
n1
+ + c
1
x + c
0
, el valor de p en la matriz A, i.e., p(A) =
c
n
A
n
+c
n1
A
n1
+ +c
1
A+c
0
puede obtenerse con la funcion polyvalm(p,A).
>>p=[1 2 -1]
p =
1 2 -1
>>A=[1 2;-1 1]
A =
1 2
-1 1
3
Observese la diferencia tan enorme entre las dos estimaciones.
4.3. TRATAMIENTO DE POLINOMIOS 55
>>polyvalm(p,A)
ans =
0 8
-4 0
Se puede as comprobar el Teorema de Cayley-Hamilton que arma 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 3.0000
>>polyvalm(pcA,A)
ans =
1.0e-15 *
0.4441 0
0 0.4441
La orden polyvalm nos permite evaluar un polinomio matricialmente, pero no s olo
podemos evaluar polinomios matricialmente, sino que otras funciones elementales pueden
ser evaluadas de forma matricial. As por ejemplo, MATLAB posee las funciones expm,
logm y sqrtm que determinan la exponencial matricial, el logaritmo matricial y la raz
cuadrada matricial, respectivamente.
>>expoA=expm(A)
expoA =
0.4239 3.7972
-1.8986 0.4239
>>raizA=sqrtm(A)
raizA =
1.1688 + 0.0000i 0.8556 + 0.0000i
-0.4278 + 0.0000i 1.1688 - 0.0000i
>>logaritA=logm(A)
logaritA =
0.5493 - 0.0000i 1.3510 + 0.0000i
-0.6755 + 0.0000i 0.5493 - 0.0000i
Notese 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 CAP

ITULO 4. AUTOVALORES Y POLINOMIOS


ans =
1.0000 + 0.0000i 2.0000 + 0.0000i
-1.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 1.4786 - 0.0000i
-0.7393 - 0.0000i 1.8329 - 0.0000i
Captulo 5
Posibilidades gracas
A continuacion detallamos algunas de las posibilidades de representaci on gr aca 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 aca.
5.1 Gracos 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 gura 5.1 recoge esta poligonal.
>> M=[2 4 6 -2 0];
>> plot(M)
Podemos poner un ttulo a la graca y etiquetas a los ejes mediante las instrucciones:
>> title(POLIGONAL)
>> xlabel(eje de abcisa)
>> ylabel(eje de ordenada)
Para obtener un mallado del gr aco tecleamos
>> grid
De manera an aloga, si introducimos dos vectores x e y, de la misma dimensi on, la in-
strucci on plot(x,y) nos proporcionar a la gr aca que se obtiene al unir los puntos (x(i),y(i)).
En la gura 5.2 representamos la curva y = x
2
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
58 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
1 1.5 2 2.5 3 3.5 4 4.5 5
-2
-1
0
1
2
3
4
5
6
POLIGONAL
eje de abcsisa
e
j
e

d
e

o
r
d
e
n
a
d
a
Figura 5.1: Una poligonal
-3 -2 -1 0 1 2 3 4
-2
0
2
4
6
8
10
12
14
16
PARABOLA
Figura 5.2
Figura 5.2: Una parabola
5.1. GR

AFICOS EN EL PLANO 59
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-1
-0.5
0
0.5
1
1.5
2
2.5
3
PARBOLA
Figura 5.3: Cambio en los ejes
La orden gtext(texto) permite situar el texto entre comillas en cualquier punto de
un graco bidimensional, pues tecleando gtext(texto) despues de realizar un gr aco nos
aparecer a este en pantalla y el vector puntero de nuestro raton. Seguidamente situamos el
puntero donde queramos poner el texto y pulsamos, por ultimo, el boton del raton para
disponer el texto en el lugar elegido.
Para modicar la escala de los ejes en los que se representa el gr aco (bidimensional)
podemos utilizar axis([xmin xmax ymin ymax]) para denir los intervalos [xmin,xmax] y
[ymin,ymax] donde se mueven los valores de x e y respectivamente. As, las instrucciones
>>plot(x,px),title(PARABOLA),grid
>>axis([-2 2 -1 3])
producen un cambio de escala en la gura 5.2 (ver gura 5.3). Para anular el efecto de esta
orden (i.e., el cambio de escala) y volver a la escala por defecto tecleamos axis.
MATLAB permite, mediante la orden plot(x,y,simb), elegir el tipo de lnea y el color
al representar una curva. En este caso, simb se trata de una cadena de uno o varios caracteres
que determinan el tipo de lnea y/o el color elegidos.
Tambien podemos dibujar simultaneamente varias curvas con una instruccion de la forma
plot(x1,y1,simb1,x2,y2,simb2,...,xN,yN,simbN)
que mostrara en pantalla todas las curvas (xI,yI) (con la opci on simbI) en unico gr aco.
En la gura 5.4 se ilustra el uso conjunto de estas dos ultimas posibilidades.
60 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-1
-0.5
0
0.5
1
1.5
2
2.5
3
DISTINTOS TIPOS DE LINEAS
Figura 5.4: Distintos tipos de lnea
>> 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 gura 5.5 se
representa una espiral logartmica:
>> th=0:.08:100;
>> R=exp(0.1*th);
>> polar(th,R)
>> title(ESPIRAL LOGARITMICA)
Para obtener una representaci on sin el sistema de referencia procederemos como se indica
a continuacion:
>> clf
>> axis off
5.1. GR

AFICOS EN EL PLANO 61
ESPIRAL LOGARITMICA
5000
1e+004
1.5e+004
2e+004
2.5e+004
30
210
60
240
90
270
120
300
150
330
180 0
Figura 5.5: Espiral logartmica
>> hold on
>> polar(th,R)
>> title(ESPIRAL LOGARITMICA)
>> hold off
La orden clf limpia la pantalla gr aca. El comando axis o desactiva los ejes del
graco que nos disponemos a realizar. La orden hold on hace que se superpongan en dicha
ventana todos los gr acos que se dibujen a continuacion. La orden hol o anula hold
on. La utlizacion de estas dos ordenes reviste interes, adem as de en este caso concreto, en
aquellos casos en los que interese visualizar simult aneamente distintas gr acas en una misma
gura.
5.1.3 Curvas en parametricas
El siguiente ejemplo ilustra la representaci on de una curva dada mediante sus ecuaciones
parametricas.
>> 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)
62 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
ESPIRAL LOGARITMICA
Figura 5.6: Espiral sin ejes
-6 -4 -2 0 2 4 6
-6
-4
-2
0
2
4
6
EPICICLOIDE
Figura 5.7: Curva en parametricas
5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 63
-4 -3 -2 -1 0 1 2 3 4 5 6
0
10
20
30
40
50
60
Figura 5.8: Diagrama de barras
5.1.4 Histogramas y diagramas de barras
En esta brevsima secci on estudiaremos dos formas m as de representacion bidimensional: las
ordenes bar(x,y) y stairs(x,y) que producen diagramas de barras de distintos tipos. Ver
guras 5.8 y 5.9:
>> x=-2:.2:4;
>> y=exp(x);
>>bar(x,y)
>> stairs(x,y)
5.2 Curvas en el espacio y supercies
5.2.1 Curvas en parametricas
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)
64 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
-2 -1 0 1 2 3 4
0
10
20
30
40
50
60
Figura 5.9: Escalera
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
0
5
10
15
20
25
30
35
HELICE
Figura 5.10: Curva en el espacio
5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 65
-10
-5
0
5
10
-10
-5
0
5
10
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
EL SOMBRERO
Superficie
Figura 5.11: Una curiosa supercie
5.2.2 Supercies
Para representar una funcion Z = f(x, y) procedemos como sigue:
1. Denimos el dominio en que se mueven las variables x e y, mediante
[x,y]=meshgrid(valores de x,valores de y)
2. Expresamos z como funcion de x e y.
3. Dibujamos la supercie mediante la opci on mesh(x,y,z) o mesh(z). Con la primera
orden se tienen en cuenta los intervalos denidos para las variables independientes, pero
con las segunda no.
La gura 5.11 muestra el siguiente ejemplo:
>> [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)
Si escribimos meshgrid(x) equivale a introducir meshgrid(x,x), con intervalos iguales
para las dos variables independientes
La orden text(x,y,z,texto) situa el texto en el punto de coordenadas (x, y, z)
1
. Si
queremos observar esta supercie desde otros puntos de vista no tenemos mas que elegir los
1
Tambien exite la orden text(x,y,texto) para gracos bidimensionales
66 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
angulos de giro en horizontal y vertical que queremos aplicar a la gura. Conseguimos la
gura girada tecleando, a continuacion de mesh(x,y,z), la orden view(al,el), siendo al
y el los angulos elegidos.
La pantalla gr aca puede ser dividida en varios trozos en los que se pueden realizar
distintos gracos. Esto se consigue mediante una instrucci on del tipo subplot(ijk) seguida
de una orden de dibujo: la pantalla gr aca quedara dividida en i j trozos y nuestro dibujo
aparecer a en el k-esimo.
La gura 5.12 combina las ordenes view y subplot:
>> 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 Curvas de nivel y vector gradiente
MATLAB permite dibujar las lneas de contorno de una supercie, las curvas de nivel y
vectores gradiente.Esto se ilustra en los siguientes ejemplos:
En primer lugar dibujamos en la gura 5.13 la supercie de ecuaci on z = xe
x
2
y
2
,
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 identicar 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 aca simult anea de la supercie y de las curvas de nivel utilizaremos
meshc(x,y,z)
5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 67
-10 0 10 -10 0 10
-0.5
0
0.5
1
-10
0
10 -10
0
10
-0.5
0
0.5
1
-10
0
10 -10
0
10
-1
0
1
-10
0
10 -10
0
10
-1
0
1
Figura 5.12: Distintos tipos de vista
68 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
-2
-1
0
1
2
-2
-1
0
1
2
-0.5
0
0.5
SUPERFICIE
Figura 5.13: z = e
x
2
y
2
-2
-1
0
1
2
-2
-1
0
1
2
-0.4
-0.2
0
0.2
0.4
Lineas de contorno
Figura 5.14: Representaci on realizada con contour3
5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 69
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Curvas de nivel
Figura 5.15: Utilizaci on del comando contour
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
Curvas de nivel
Figura 5.16: Con clabel se etiquetan las curvas nivel
70 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
-2
-1
0
1
2
-2
-1
0
1
2
-0.5
0
0.5
Superficie y curvas de nivel
Figura 5.17: Gr aca 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 ultima 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)
En el siguiente ejemplo se dibujan las curvas de nivel identic andolas con la opci on man-
ual de la orden clabel. Utilizando dicha opci on nos situamos en la vantana graca y
pulsamos el rat on encima de la curva que deseemos, seguidamente aparecera junto a ella el
n umero que le corresponda.
>>[x,y] = meshgrid(-2:.1:2);
>> z = x .* exp(-x.^2 - y.^2);
>> [px,py] = gradient(z,.1,.1);
>> cs=contour(x,y,z);clabel(cs,manual);
5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 71
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Curvas de nivel y vector gradiente
Figura 5.18: Utilizaci on de quiver
>> hold on, quiver(x,y,px,py), hold off
>>title(Curvas de nivel y gradiente)
Para gracos tridimensionales las utilizacion de axis es similar al caso bidimensional.
Para trabajar con distintas guras simult aneamente, en distintas ventanas, se utilizar a la
orden gure(n).
72 CAP

ITULO 5. POSIBILIDADES GR

AFICAS
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Curvas de nivel y vector gradiente
-0.1
-0.2
-0.3
-0.4
0.1
0.2
0.3
0.4
Figura 5.19: El comando clabel con la opci on manual
Captulo 6
Funciones y programas en Matlab.
MFicheros
6.1 Instrucciones en Matlab: input, if, error, while, break,
pause, for . . .
En este apartado exponemos el manejo de cheros y funciones dentro de una sesi on de
MATLAB. Esta caracterstica es particularmente interesante, ya que nos permitira denir
nuevas funciones: que podr an ser utilizadas posteriormente del mismo modo que aquellas de
que disponemos en MATLAB; y crear lo que podemos llamar programas, que se ejecutar an
dentro de una sesion.
Los cheros que podemos editar para su utilizaci on desde MATLAB ser an cheros de
texto en ASCII, creados por un editor que queda a nuestra elecci on. La extensi on de estos
cheros ser a .m.
Como hemos advertido los cheros.m (o Mcheros) pueden crearse con dos nalidades:
1. Para crear cheros de escritura o programas.
2. Para denir funciones por parte del usuario.
Los cheros de escritura o programas son cheros del tipo nombre.m que contienen una
sucesion de instrucciones de MATLAB. Al teclear dentro de una sesion el nombre del chero
se produce la ejecuci on secuencial de todas las instrucciones en el contenidas. Estos archivos
pueden ser utilizados de dos formas:
Como cheros de datos.
Como programas.
Por ejemplo, si el Mchero matrices.m contiene
73
74 CAP

ITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS


A=[2 4 -5;8 -.07 1];
B=[2 -3;0 4]
al teclear
>>matrices
obtenemos
B =
2 -3
0 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 denidas de manera
explcita. Naturalmente, esto resulta interesante, entre otras cosas, si vamos a trabajar con
una matriz sucientemente 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
chero 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 chero, 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 utiles en este contexto. Para ello comentaremos,
dentro de un ejemplo concreto, el uso y posibilidades de estas ordenes.
El chero 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 ENMATLAB: 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 CAP

ITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS


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 matriz
1
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 chero que contiene
la denicion 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 ENMATLAB: 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
ser: == (igual), <, >, <=, >= y

= (distinto), incluidos los operadores l ogicos & (y), | (o),

(No) y las funciones l ogicas que se encuentran en los cuadrosresumen del ultimo captulo.
La orden
error(texto)
detiene denitivamente 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 CAP

ITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS


lo que provoca la ejecuci on de las instrucciones detalladas mientras la condici on se verique.
En el programa bg el bloque de instrucciones WHILE es:
while b-a>=ep
i=i+1;
c(i)=(a+b)/2;
gc(i)=feval(g,c(i));
if gc(i)==0
disp(La soluci n se ha obtenido en uno de los puntos medios)
disp(de los subintervalos)
solucion=c(i)
end
if feval(g,a)*gc(i)0
b=c(i);
else
a=c(i);
end
end
La instrucci on return detiene por completo la ejecuci on del programa. En nuestro
ejemplo se ha utilizado para romper el programa cuando la soluci on es trivial (i.e., algunos
de los extremos del intervalo) o se ha alcanzado la soluci on exacta en los puntos medios de
los subintervalos.
Una vez que el ujo del programa llega a la a instrucion
iop=menu(Desea la representacion graca de las Aproximaciones,...
Si,No);
aparece en pantalla
2
el siguiente men u:
----- Desea la representacion grafica de las Aproximaciones -----
1) Si
2) No
Select a menu number:
y el programa se detiene moment aneamente a la espera de introducir uno de los valores
de opci on. Si introducimos el valor 1, entonces la variable iop tomara el valor 1 y la
representaci on se llevara a cabo, debido a la inclusi on en el programa del bloque:
2
Si utilizamos MATLAB en un entorno de ventanas aparecer a una ventana con botones de opcion.
6.1. INSTRUCCIONES ENMATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR. . .
if iop==1
plot(gc)
grid
title(Representacion graca 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 0 0
1 1 0 0
1 1 1 0
1 1 1 1
Por ultimo, se nalamos que los programas en MATLAB, como el programa bg, no
poseen variables internas al mismo. Esto es, cualquier variable denida en el programa pasa,
automaticamente, a formar parte de las variables del espacio de trabajo. Por consiguiente, si
en una sesion denimos 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 CAP

ITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS


>>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
Select a menu number: 2
aclaramos que, sin darnos cuenta, hemos perdido la matriz a, pues en nuestro programa esta
variable va tomando los valores del extremo inferior de los subintervalos que se generan en el
metodo de biseccion:
>>format long
>>a
a =
0.99999237060547
Si las variables denidas en una programa pasan a formar parte del espacio de trabajo,
una vez que el programa se ha ejecutado completamente tenemos la capacidad de obtener los
valores de algunas variables denidas en el. Por ejemplo, podemos saber cual es el valor de
c(9) en el programa bg:
>>c(9)
ans =
1.0029
6.2. DEFINICI

ON DE FUNCIONES 81
6.2 Denicion de funciones
Podemos utilizar Mcheros para denir nuevas funciones no incorporadas al conjunto de
funciones MATLAB.
Si queremos denir una funcion fun(x1,...,xN)=[y1,...,yM] con N matrices como argumen-
tos de entrada y M matrices como argumentos de salida crearemos un Mchero de nombre
fun.m (es esencial la correspondencia entre el nombre de la funci on y el del chero) cuya
primera lnea debe ser
function [y1,...,yM]=fun(x1,...,xN)
y las restantes contendr an la propia denici on de la funci on fun(x1,...,xN).
Por ejemplo, si el chero house.m contiene:
%HOUSE: Matriz de Householder
% La funcion house(x) calcula la matriz de Householder
% asociada al vector columna x (si x=0 se toma la identidad)
function y=house(x)
[m,n]=size(x);
if any(x)==0,y=eye(m);return,end
I=eye(m);
N=x*x;
y=I+(-2/N)*(x*x);
y dentro de una sesion MATLABintroducimos un vector columna v y tecleamos H=house(v)
la variable H tomara como valor la matriz de Householder asociada al vector v, es decir,
H = I 2
xx
t
x
t
x
>> v=[1 4 -7 0];
>> H=house(v)
H =
0.9697 -0.1212 0.2121 0
-0.1212 0.5152 0.8485 0
0.2121 0.8485 -0.4848 0
0 0 0 1.0000
Notese que N es una variable interna de la funci on house que no pasara a formar de
nuestro espacio de trabajo. Vease
>>N
??? Undefined function or variable.
Symbol in question ==> N
82 CAP

ITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS


Las primeras lneas de comentario denidas en el chero 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 estabantimamente 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 denici 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 chero 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, respecti-
vamente, en la llamada a la funcion numero. Vease
a =
5
b =
4
c =
6.2. DEFINICI

ON DE FUNCIONES 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 denida 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 analisis numerico
En esta seccion comentaremos, de forma breve, como Matlab puede ser utilizado para re-
solver 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 difer-
enciales.
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 x
0
. Entonces,
la orden fzero(g,x0) nos proporciona la raz de g mas pr oxima a x
0
.
Se nalamos que la funcion g debe estar introducida en un chero denominado g.m. Por
ejemplo, para g(x) =sen(x
2
) 3x + 1 (ver gura 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(x
2
) 3x + 1 = 0
2. Sistemas:
Para resolver un sistema de ecuaciones (no lineal
1
), como por ejemplo, (ver gura 7.2)
x
2
+y
2
1 = 0
x y = 0
1
La orden fsolve ha pasado a formar parte del la caja de herramientas de optimizacion.
84
7.2. INTEGRACI

ON NUM

ERICA 85
denimos la funci on dim2(X, Y ) = (X
2
+Y
2
1, X Y )mediante el chero 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 numerica
La integral denida de la funcion g en el intervalo [a, b] puede obtenerse de forma aproximada
mediante
1. quad(g,a,b) (Regla de Simpson)
2. quad8(g,a,b) (NewtonCotes)
As, para la funci on anterior se tiene:
>>area=quad(g,-1,0)
area =
2.810248532388182e+000
>>area=quad8(g,-1,0)
area =
2.810268301723342e+000
86 CAP

ITULO 7. ASPECTOS DE AN

ALISIS NUM

ERICO
0 0.5 1 1.5 2 2.5 3
-8
-7
-6
-5
-4
-3
-2
-1
0
1
Resolucion y minimizacion
cero
minimo
Figura 7.1: g(x) = sen (x
2
) 3x + 1
-1 -0.5 0 0.5 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Interseccion de una recta y una circunferencia
Figura 7.2: Interseccion de y = x con x
2
+y
2
= 1
7.3. OPTIMIZACI

ON EN UNA Y VARIAS VARIABLES 87


7.3 Optimizacion en una y varias variables
Si queremos calcular el mnimo de la funcion g en el intervalo [1,2.5] tecleamos
>>format
>>min=fmin(g,1,2.5)
min =
2.3266
Esto nos ofrece el punto del intervalo [1, 2.5] donde se alcanza el mnimo de g (vease la
gura 7.1). Para funciones de varias variables disponemos de la orden fmins(f,x0) que
calcula el mnimo de la funci on f mas cercano al punto x
0
.(En la versi on 4.2c fminsse incluye
en el toolbox dde optimizaci on). Por ejemplo, la funci on
z =
4x
x
2
+y
2
+ 1
alcanza su valor mnimo en el punto (1, 0), donde vale 2 (ver gura 7.3). Esto puede
calcularse si denimos f(x, y) =
4x
x
2
+y
2
+ 1
en el archivo maximini.m y teclemos las ordenes
>>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
Describamos con un ejemplo como proceder:
Deseamos resolver el problema de Cauchy (o problema de valor inicial)
x
0
= cos(t)x en [0, 3]
x(0) = 1
Para ello se dene la funcion dife(t,x) (en el archivo dife.m) que representa la ecuaci on
diferencial
88 CAP

ITULO 7. ASPECTOS DE AN

ALISIS NUM

ERICO
-2
-1
0
1
2 -2
-1
0
1
2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Figura 7.3: Optimizaci on en varias varibles
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 inter-
valo que se almacenan en el vector t.
>>disp( t x ),disp([t,x])
t x
0 1.0000
0.0300 1.0304
0.1726 1.1874
0.3151 1.3632
0.4602 1.5590
0.6103 1.7736
0.7684 2.0033
0.9380 2.2394
1.1245 2.4641
7.4. RESOLUCI

ON DE ECUACIONES DIFERENCIALES ORDINARIAS 89


0 0.5 1 1.5 2 2.5 3
1
1.2
1.4
1.6
1.8
2
2.2
2.4
2.6
2.8
t
x
Figura 7.4: Soluci on apoximada obtenida con ode23
1.3351 2.6433
1.5794 2.7169
1.8706 2.5977
2.1746 2.2751
2.3762 1.9969
2.5520 1.7415
2.7285 1.4919
2.8893 1.2817
3.0000 1.1499
En las guras 7.4 y 7.5 pueden contemplarse la soluci on aproximada ofrecida por MAT-
LAB y la soluci on exacta, respectivamente. N otese que la soluci on exacta es x(t) = e
sent
.
La funcion ode23 resuelve ecuaiones diferenciales numericamente por metodos de Runge
Kutta de segundo y tercer orden, pero podemos resolver la ecuaci on con mas aproximacion
si utilizamos la funci on ode45, pues de esta forma estamos utilizando metodos de Runge
Kutta de cuarto y quinto orden.
Un buen ejercicio para el lector sera representar las gracas que aparecen en este captulo
que, naturalmente, han sido realizadas con MATLAB.
90 CAP

ITULO 7. ASPECTOS DE AN

ALISIS NUM

ERICO
0 0.5 1 1.5 2 2.5 3
1
1.2
1.4
1.6
1.8
2
2.2
2.4
2.6
2.8
t
x
Figura 7.5: Soluci on exacta: x(t) = e
sen t
Captulo 8
Consejos practicos
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 conven-
cidos que resultar a benecioso darles un ligero repaso.
8.1 Las ordenes help, lookfor y demo
Si tecleamos help ncof, siendo ncof el nombre de un comando o funcion disponible en
MATLAB, obtendremos una breve informaci on sobre dicho comando o funci on. Si ncof
ha sido creado por el usuario aparecer a en pantalla el bloque de comentarios incluido en
las primeras lneas del chero que dene la funci on o cmando ncof. Por ejemplo, para el
programa bg, denido en el captulo 5, se obtiene
>>help bg
BG: M\UNICODE{0xe9}todo de bisecci\UNICODE{0xf3}n o dicotom\UNICODE{0xed}a
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).
La orden help sin argumentos nos proporciona, seg un la version de MATLAB de la
que hagamos uso, una colecci on de las funciones y comandos que podemos utilizar. Notese
que, si la funciones denidas por el usuario aparecen en la ruta de acceso de MATLAB,
estas tambien podran visualizar en la colecci on anterior.
Relacionada con la orden help nos encontramos con la orden lookfor cadena que nos
proporciona una lista de la funciones MATLAB (y del usuario) relacionadas con la palabra
cadena.
91
92 CAP

ITULO 8. CONSEJOS PR

ACTICOS
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 Informacion sobre variables declaradas. Instrucciones
para guardar y salvar variables
El espacio de trabajo puede controlarse con tres grupos de instrucciones:
1. Instrucciones destinadas a obtener informacion sobre las variables que estamos utilizan-
do en la sesi on:
who nos proporciona una todas las variables que tenemos en memoria. La
variante whos nos da informacion adicional sobre las mismas.
2. Instrucciones de control de pantalla.
clc suprime el contenido de la pantalla de comandos.
clf borra el contenido de la pantalla de gracos.
shg nos muestra el contenido actual de la pantalla graca.
3. Instrucciones para eliminar variables, salvarlas o cargarlas de un chero.
La orden clear v1 v2 . . . vN elimina las variables v1, v2, ..., vN del espacio de trabajo.
Podemos utilizar otras variantes de clear para dejar libre mas memoria dentro de una
sesi on. Por ejemplo, clear elimina todas la variables que se encuentran en el espacio
de trabajo.
MATLAB permite salvar, algunas o todas las variables que estamos utilizando en
una sesion, almacen andolas en un chero nombre.mat, mediante el comando save
nombre, o alguna de sus variantes. Si deseamos usar las variables que previamente
hemos salvado en un chero nombre.mat, teclearemos load nombre y las variables
que se encuentran en nombre.mat seran cargadas en el espacio de trabajo.
Tambien podemos salvar nuestras variables en archivos ASCII, para ello utilizamos
algunas de las siguientes posibilidades:
8.3. RELACI

ON CON EL SISTEMA OPERATIVO. EL COMANDO DIARY 93


save nombre a /ascii que guardar a en un chero ascii la variable a en simple
precisi on, i.e., con 8 cifras signicativas.
save nombre a /ascii /double que almacena la variable a en doble precisi on.
De la misma forma que podemos salvar variables en un archivo ASCII, tambien podemos
cargar, en una sesion MATLAB, variables almacenadas en un archivo ASCII. Esto
podemos conseguirlo
1
tecleando load nombre; as obtendremos una variable llamada
nombre con el contenido del archivo de la misma denominacion.
8.3 Relacion 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 mo-
mentaneamente 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 ratio of the
% largest singular value of X to the smallest.
% J.N. Little 11-15-85
% Revised 3-9-87 JNL
% Copyright (c) 1985, 1986, 1987 by the MathWorks, Inc.
if length(x) == 0 % Handle null matrix
y = NaN;
return
end
s = svd(x);
if any(s == 0) % Handle singular matrix
disp(Condition is infinite)
y = Inf;
return
1
En versiones mas actuales hay que teclear load nombre /ascii
94 CAP

ITULO 8. CONSEJOS PR

ACTICOS
end
y = max(s)./min(s);
La opci on diary nombre.m tecleada dentro de una sesion, har a que todo cuanto aparez-
ca 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 denidas 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 ultimo, invitamos al lector a investigar la utilidad del comando echo y sacarle todo
el partido posible.
Captulo 9
Resumen de los comandos y
funciones mas utilizados
En este captulo presentamos, en forma de cuadros, un resumen de los comandos y fun-
ciones 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.
B

ASICO
help Ayuda
lookfor Busca funciones relacionadas con una palabra
who Muestra las variables del espacio de trabajo
whos Lo mismo que who, pero con mas informacion
what Muestra archivos.m
which Muestra el directorio de un comando
CtrlC Interrupcion
quit Salir de MATLAB
exit Salir de MATLAB
demo Demostracion de MATLAB
intro Breve introduccion
casesen Sensibilidad a las may usculas
95
96CAP

ITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES M

AS UTILIZADOS
VARIABLES PERMANENTES
eps Valor de precisi on
ans Variable de respuesta cuando no hay asignacion
pi
i, j Unidad imaginaria
Inf Innito
NaN No es un n umero
ops 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 las. Suprime impresi on de resultado
% Comentario
: Genera vectores
OPERACIONES MATRICIALES Y PUNTUALES
+ Suma
Diferancia
, . Multiplicaci on
/, ./ Divisi on derecha
\, .\ Divisi on izquierda

, .

Potenciacion
0
Transposici on.
97
FUNCIONES ELEMENTALES
abs Valor absoluto o modulo angle Argumento
real Parte real imag Parte imaginaria
conj Conjugado exp Funci on exponencial de base e
log Logaritmo neperiano log10 Logaritmo en base 10
sin Seno cos Coseno
tan Tangente asin Arcoseno
acos Arcocoseno atan Arcotangente
atan2 Arcotangente de x/y sinh Seno hiperbolico
cosh Coseno hiperb olico tanh Tangente hiperb olica
asinh Argumento seno hiperbolico acosh Argumento coseno hiperb olico
atanh Argumento tangente hiperbolica round Redondeo al entero mas cercano
x Redondeo hacia cero oor Redondeo hacia
ceil Redondeo hacia + sign Signo
rem 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
MANIPULACI

ON DE MATRICES
rot90 Rotaci on de 90
o
tril Triangular inferior
triu Triangular superior
reshape Reordenaci on
iplr Inversion en el orden de las columnas
ipud Inversion en le orden de las las
: Bloques de Matrices
diag Diagonal
98CAP

ITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES M

AS UTILIZADOS
RESOLUCI

ON DE S.E.L. Y DESCOMPOSICIONES
\ 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)
polyt Ajuste de datos mediante polinomios
99
FUNCIONES Y OPERADORES L

OGICOS Y RELACIONALES
any Condiciones l ogicas
all Conciones l ogicas
strcomp Compara cadenas caracteres
nd Detecta ndices para relaciones logicas
nite Encuentra innitos
isnan Detecta NaN
isempty Encuentra matrices vacas
isstr Detecta cadenas de caracteres
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igualdad
= Distinto
& Y
| O

No
CADENAS DE CARACTERES
eval Evalua texto
num2str Convierte n umeros en cadenas de caracteres
int2str Convierte enteros en cadenas de caracteres
sprintf Convierte n umeros en cadenas de caracteres
hex2num 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 chero
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, . . .
100CAP

ITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES M

AS UTILIZADOS
CONTROL DE FLUJO Y PROGRAMACI

ON
if, elseif, else Bloque condicional
end Termina bloques
for, while Repetici on de instrucciones
break Ruptura de bucles
return Retorno
pausa, pausa(n) Pausa. Pausa de n segundos
input Entrada de datos desde el teclado
error Mensaje de error
feval Evalua funcion denida por cadena de caracteres
function Dene una funcion
global Dene variables globales
echo Muestras instrucciones en pantalla
menu Genera un men u
GENERANDO GR

AFICOS
plot Graco bidimensional
subplot Divide la pantalla de gracos
loglog Graco logaritmico
semilogx Graco semilogaritmico en el eje x
semilogy Graco semilogartmico en el eje y
polar Representacion en polares
meshgrid Dominio de denicion de supercies
mesh Graco 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 aca
ginput Entrada de coordenadas desde el gr aco
axis Escalado de los ejes
view Punto de vista tridimensional
shg Muestra el contenido de la pantalla graca
clf Limpia la pantalla de gr acos
hold Mantiene el gr aco 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
AN

ALISIS NUM

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

ALISIS DE DATOS (POR COLUMNAS)


max Maximo
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 Coecientes de correlaci on
Captulo 10
Relacion de ejercicios
1. Introduce las siguientes matrices:
A =

1 2
3 4
!
B =

0 0.1 1
2 3/4 5
!
C =
_
_
_
1
0
1
_
_
_
D =
_
_
_

2 1 4
3
2
7 0 9
8 1 6 2
_
_
_ E =

1 0 2 3 1

(a) Muestra las matrices anteriores utilizando diversos formatos de salida.
(b) Eval ua a
12
, b
23
, c
11
, (D
t
)
41
y (E
t
)
31
.
(c) Comprueba que (A
t
)
t
= A.
2. Utilizando las matrices anteriores, extrae las siguientes las o columnas:
(a) Primera la de A.
(b) Primera la de A
t
.
(c) Segunda columna de B.
(d) Cuarta columna de D.
(e) Tercera columna de D
t
.
3. De la siguiente relaci on de matrices identica las que son simetricas o antisimetricas:
a)

1 1
1 1
!
b)
_
_
_
1 2 3
4 5 6
7 8 9
_
_
_
c)

1 1
1 0
!
d)

1 1 1
1 1 1
!
102
103
e) A = (a
ij
) M
4
(R), siendo a
ij
=
1
i+j
f) A = (a
ij
) M
4
(R), siendo a
ij
=
1
i
2
+j
g)
_
_
_
1 0 1
0 2 0
1 0 3
_
_
_
4. Sea x =

2 e y = 1.
(a) Introduce la matriz A =
_
_
_
x 2x 3
x +y x y x +y

2
2x x
2
+y
2
_
_
_
(b) Cambia la entrada 2x a 2x +y.
(c) Escribe A(2, 3) = 3 y; y muestra A.
(d) Escribe A(1, 1) = 0; y muestra A.
(e) Escribe A = 0; y muestra A.
5. Usa clc para limpiar la pantalla e introduce a continuaci on la matriz
A =

1 2 3 4
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 (b) u.

3 (c) u.

(1/2) (d) u.

(1)
8. Introduce A =

1 2
5 3
!
y a continuaci on:
(a) A.

2 (b) A.

3 (c) A.

(1/2) (d) A.

(1) (e) A.

6
(f) (A.

2)

3 (g) sqrt(A) (h) exp(A) (i) log(A) (j) log10(A)


104 CAP

ITULO 10. RELACI

ON DE EJERCICIOS
9. Encuentre el complejo conjugado y el m odulo de cada uno de los siguientes n umeros
complejos:
(a)2 (b) 2i (c) 3 i (d) (

3 +i)(

3 3i)
(e) i
2
(f)
3

8 (g) (Re : (i))


2
(h) e
i
+ 1
(i) (1 +i)
2
(j) (1 +i)
1
(k) (3 + 2i)(4 +i) (l)
12i
2+3i
(m)
76i
1+i

3i
29i
(n) Im((1 +i)
2
) (o) log(2i) (p) sen(2i)
10. Observe la salida:
(a) eps (b) pi (c) Inf (d) 1/0
(e) 0/0 (f) 2 + NaN (g) NaN/NaN (h) Inf/Inf
(i) 1/Inf (j) 2 + Inf (k) Inf + 0 (l) NaN/Inf
(m) inf*inf
11. Introduce A =
_
_
_
_
_
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
_
_
_
_
_
y observa la salida:
(a) A(1, :) (b) A(3, :) (c) A(:, 2) (d) A(:, 5)
(e) A(1, 1 : 2 : 5) (f) A([2, 4], :) (g) A([4, 2], :) (h) A(4 : 1 : 1, 5 : 1 : 1)
/i) A([1 1], [2 2]) (j) A([2 2], [5 4]) (k) A([3 2], [5 4])
12. Construye las siguientes matrices utilizando ., +, , \, , , :, zeros, eye, ones y diag.
(a) A =
2,3
(b) B = I
4
(c) C =
_
_
_
1 1
1 1
1 1
_
_
_
(d) D =
_
_
_
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
_
_
_
(e) E =
_
_
_
0 1 1 1 1
1 0 1 1 1
1 1 0 1 1
_
_
_
(f) F =
_
_
_
_
_
0 0 0 0 0
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
_
_
_
_
_
105
(g) G =
_
_
_
0 0 0 0
1 0 0 0
0 1 0 0
_
_
_
(h) H =
_
_
_
0 1 0
0 0 2
0 0 0
_
_
_
(i) I =

3 3 3
3 3 3
!
(j) J =
_
_
_
4 5 6
8 10 12
12 15 18
_
_
_
(k) K =
_
_
_
1 1/2 1/3
1/2 1/4 1/6
1/3 1/6 1/9
_
_
_
(l) La matriz de orden 5 cuyas las son todas iguales a (1 2 3 4 5)
(m) La matriz de orden 5 cuyas columnas son todas iguales a (1 2 3 4 5)
t
(n) Genera los vectores x = (1, 2, 3, 4, 5) e y = (5, 4, 3, 2, 1) y calcula la suma
de ambos.
13. Para las matrices del ejercicio anterior:
(a) Suprime la primera la de D.
(b) Suprime la tercera columna de la matriz E.
(c) Calcula el menor del elemento k
2
2.
(d) Calcula el adjunto de j
13
.
14. Construye las matrices
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
_
_
_
_
_
y calcula con ayuda de la divisi on izquierda A
1
B, AB
1
, A
1
v, u
t
B
1
siendo v =
(1, 0, 0, 0) y u = (0, 1, 0, 0).
15. Resuelve los siguientes sistemas de ecuaciones
x
2
+ x
3
+ x
4
= 4
3x
1
+ 3x
3
4x
4
= 7
x
1
+ x
2
+ x
3
+ 2x
4
= 6
2x
1
+ 3x
2
+ x
3
+ 3x
4
= 6
_

_
2x
1
+ 3x
2
+ 2x
3
= 9
x
1
+ 2x
2
3x
3
= 14
3x
1
+ 4x
2
+ x
3
= 14
_

_
106 CAP

ITULO 10. RELACI

ON DE EJERCICIOS
16. Calcula la descomposici on LU de A calculando primeramente [L, U] = lu(A) y compro-
bando que A = LU; y seguidamente [L, U, P] = lu(A) conrmando que PA = LU.
(a) A =
_
_
_
_
_
3 1 2 1
1 5 4 1
3 1 2 3
2 2 2 3
_
_
_
_
_
(b) A =
_
_
_
_
_
3 2 5 4
2 3 6 8
1 6 9 20
4 1 4 1
_
_
_
_
_
(c) A =
_
_
_
_
_
4 2 4 1
30 20 45 12
20 15 36 10
35 28 70 20
_
_
_
_
_
(d) A =

0 1
1 0
!
17. Encontrar la soluci on, en el sentido de los mnimos cuadrados, del sistema
x
1
+ 2x
2
+ 2x
3
+ 3x
4
= 2
x
3
+ 2x
4
= 1
)
18. 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)}.
19. Con la utilidad help lee la informaci on sobre sum, cumsum, prod, cumprod y di.
(a) Dado a = (1, 2, 3, 4) utiliza cumsum y sum para calcular el valor de
4
X
k=1
k
X
i=1
a
i
.
(b) Dada la matriz A =
_
_
_
1 2 3
4 5 6
7 8 9
_
_
_usa sumy prod para calcular el valor
3
Y
j=1
3
X
i=1
a
ij
.
(c) Usa sum y prod para calcular el valor
3
X
j=1
3
Y
i=1
a
ij
para la matriz de apartado b).
(d) Dada la matriz del apartado b) usa sum y cumprod para calcular el valor
3
Y
j=1
3
X
i=1
a
ij
.
107
20. Calcular A
n
para algunos valores n enteros y positivos. Estudiar el comportamiento de
A
n
para n grande.
a) A =

0.6 0.5
0.18 1.2
!
b) A =

0.6 0.5
0.2 1.2
!
c) A =

0.9 1.0
0 0.9
!
d) A =
_
_
_
0.67 0.31 0.20
0.18 0.54 0.40
0.15 0.15 0.40
_
_
_
21. Sea A =
_
_
_
0.8 0.2 0.1
0.1 0.7 0.3
0.1 0.1 0.6
_
_
_
y x
0
=
_
_
_
0.2
0.3
0.5
_
_
_
Calcula x
n
= A
n
x
n1
para n = 1, 2, . . . , 16 y comprueba que, con la menos tres cifras
signicativas, se obtiene que x
n
= x
16
n 16.
22. Consideremos el sistema de ecuaciones en diferencias:
z
n+1
= 0.6z
n
+ 0.5c
n
z
n+1
= 0.16z
n
+ 1.2c
n
)
con z
1
= 100, c1 = 1000
C ual es le comportamiento de z
n
y c
n
para n grande?
Si se escribe el sistema en forma matricial, c ual es el comportamiento de las sucesivas
potencias de la matriz del sistema?
23. Comprobar directamente que det(B

) = 2 6= 0 siendo B

la matriz denida por


B

10
7
+ 10
7

1/ 1/
!
6= 0
. Vare desde 10
1
hasta 10
12
y calcule los determinantes de las matrices B

que se
obtienen.
24. Para la matriz A del ejercico 16 calcule A
1
mediante inv : (A) y
adj(A)
det(A)
. Compare
n umero de operaciones.
25. Sea A
z
la matriz de orden 5 dada por
A
z
=
_
_
_
_
_
_
_
z 1 0 0 0
1 z 1 0 0
0 1 z 1 0
0 0 1 z 1
0 0 0 1 z
_
_
_
_
_
_
_
(a) Pruebe que A
5
es regular encontrando su inversa.
108 CAP

ITULO 10. RELACI

ON DE EJERCICIOS
(b) Demuestre que A
2
es regular calculando su rango.
(c) Pruebe que A
0
es singular intentando calcular su inversa.
(d) Disminuya lentamente el valor de z desde 2 y estime el primer valor de z menor
que 2 para el cual A
z
no tiene inversa.
(e) Construya la matriz B de orden 10 que posee la misma estrutura que A
2
y el
vector c = (1, 1, . . . , 1). Resuelva el sistema Bx = c mediante inv(B) c y B\c
comparando el n umero de operaciones y el tiempo de c aculo. Que metodo es mas
eciente?
26. Pruebe que x
1
= 1, x
2
= 1 es la soluci on exacta del sistema
0.89x
1
+ 0.53x
2
= 0.36
0.47x
1
+ 0.28x
2
= 0.19
)
Tome x
1
= 0.47 y x
2
= 0.11 y compruebe que casi resuelve el sitema. Est a bien o
mal condicionado?
27. Consideremos las matrices
A =

2 1
2 2 1 2
!
P =

0
1 1
!
B = P
1
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?
28. Sea A =

0.4 0.5
0.18 0.2
!
. Utilice MATLAB para sumar varios terminos de la serie
de e
A
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 ultimo apartado.
30. Siendo L = [1 2 2 0 1 5 pi sqrt(2)], realice los siguientes c alculos: s=sign(L),
s==1, nd(s==1), length(nd(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) e
i2k/5
, k = 0, 1, 2, 3, 4, 5.
(c) 1 con multiplicidada 5.
32. Usando la funcion poly calcula los n umeros combinatorios

10
0
!
,

10
1
!
, . . . ,

10
10
!
33. Calcula las races de los polinomios:
(a) p(x) = x
3
+ 6x
2
72x + 27
(b) q(x) = 2x
4
+x
3
2x 8
34. Eval ua p(A) en los siguientes casos:
(a) A = ones(3), p(t) = t
3
3t
2
(b) A = eye(3), p(t) = (t 1)
3
(c) A = rand(2), p(t) = t
2
(a
11
+a
22
)t + (a
11
a
22
a
12
a
21
)
35. Calcula la pseudoinversa de las matrices:
A =
_
_
_
_
_
_
_
_
_
_
_
_
3 1
2 1
1 1
0 1
1 1
2 1
3 1
_
_
_
_
_
_
_
_
_
_
_
_
A =

0 0 1 2
1 2 2 3
!
36. Experimente la funcion sdv sobre vectores las 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
polyt(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).
110 CAP

ITULO 10. RELACI

ON DE EJERCICIOS
40. Repersentar la funci on z = f(x, y) =sen(x)sen(y).
41. Representar la funci on f(x, y) =
4x
x
2
+y
2
+1
y encontrar su valor m aximo.
42. Calcula los autovalores de las siguientes matrices:
(a) A =
_
_
_
5 3 6
2 6 6
2 3 9
_
_
_
(b) A =
_
_
_
_
_
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
_
_
_
_
_
(c) ones(20)
(d) orth((2*rand(5)-1)+i*(2*rand(5)-1))
Que propiedad cumplen los autovalores del apartado d)?
43. Utilice MATLABpara comprobar que las matrices A =
_
_
_
1 0 0
0 2 0
0 0 3
_
_
_y B =
_
_
_
1 1 1
0 2 1
0 0 3
_
_
_
son semejantes.
44. Escribe una funcion MATLAB que remplace por 0 las componentes de un vector real
que sean menores, en valor absoluto, que un n umero positivo dado.
45. Describa una funcion con las siguientes condiciones:
Tenga dos vectores x e y de dimension n y un angulo t (en radianes) como argu-
mentos de entrada.
Nos proporcione los pares de n umeros que se obtienen aplicando a (x
i
, y
i
), i =
1, . . . , n un giro con centro el origen t de angulo t.
46. Escriba un programa en MATLAB con las siguientes caractersticas:
Nos pida introducir (por el tecaldo) cuatro puntos del plano P
1
, P
2
, P
3
, P
4
y un
angulo t.
Represente el cuadril atero Q determinando por P
1
, P
2
, P
3
, P
4
.
Y en el gr aco anterior dibuje, adem as, el cuadril atero que se obtiene al aplicar a
Q un giro con centro el origen y angulo t.
47. Construye una funcion que calcule el kesimo coeciente del producto de polinomios.
111
48. Con ayuda de la funcion poly y las formulas 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 M
n
y polinomio p.
Nos proporcione el vector la (p(
1
), . . . , p(
n
)), donde
i
son los autovalores de
A.
Evalue la matriz p(A).
Nos proporcione un vector la con los autovalores de p(A).
50. Escribir una funcion que act ue sobre dos argumentos: una matriz A y un n umrero
natural i; proporcionando como resultado la matriz que se obtiene al suprimir la i
esima la de la matriz A.
51. Idem para la columna j de una matriz.
52. Describir la funci on que nos proporciona el menor complementario del elemento a
ij
de
la matriz A.
53. Describir la funci on que nos proporciona el elemento adjunto de a
ij
.
54. En un archivo .m describir la funcion que nos proporciona la adjunta (ya traspuesta)
de una matriz.
55. Con ayuda de la funcion anterior describir la funcion que determina la inversa de A
mediante A
1
=
adj(A)
det(A)
. Comparar el n umero de operaciones y el tiempo de c alculo
entre nuestra funci on inversa y la funci on inv de MATLAB.
56. Describir una funcion en MATLAB que nos proporcione la suma de dos polinomios
de cualquier grado.
57. Con ayuda de las funciones diag y triu describir la funcion que con una matriz A
como argumento de entrada nos proporcione la descomposicion de A como suma de
una matriz diagonal, una triangular superior y otra inferior.
58. Dise nar una funcion que resuelva un sistema cuadrado por la regla de ,Cramer. Com-
parar el tiempo de c alculo y el n umero de operaciones con la resoluci on del sistema
mediante inv(A)*b y A\b.
59. Realizar una estrategia que calcule la descomposici on LU sin pivoteo parcial, para una
matriz no necesariamente cuadrada.
60. Escribir una funcion con tres argumentos (una matriz A y dos n umeros enteros positivos
i, j) que nos propocione la matriz que se obtiene intercambiando las las i y j de la
matriz de entrada A.
112 CAP

ITULO 10. RELACI

ON DE EJERCICIOS
61. Idem, pero intercambiando columnas.
62. Contruir una funcion que nos proporcione la matriz resultante de sumar a la la iesima
de A la jesima la multiplicada por . (Naturalmente i 6= j).
63. Hacer lo mismo, pero para las columnas de A.
64. Describir una funcion que tenga como argumentos de entrada una matriz A M
mn
y un vector (columna) b R
m
, genere 100 vectores (colunma) aleatorios x R
n
y nos
devuelva el mnimo de kAx bk cuando x recorre los anteriores vectores aleatorios.
65. Escribir una funcion MATLAB que aceptando, como argumento, una matriz cuadrada
A nos proporcione el valor m aximo de kAuk cuando u recorre 100 vectores alearorios
unitarios.
66. Editar en un archivo de extensi on .m una funcion que nos proporciona la recta que
mejor aproxima (por mnimos cuadrados) a una nube de puntos y que represente en un
mismo graco la recta encontrada y los puntos dados.
67. Escribir una funcion que nos de como resultado 1 o 0, dependiendo si la matriz de
entrada es hermtica o no.
68. Hacer lo mismo que en el ejercicio anterior, pero para detectar matrices hermticas
denidas positivas.
69. Generar un programa que nos pida un n umero natural positivo n y nos proprocione el
nesimo n umero de Fibonacci.
70. Dise nar una funcion que nos resulva un S.E.L. cuadrado compatible utilizando el metodo
de Gauss con estrategia de pivote total.
71. Describir una funcion MATLAB que nos estudie la compatibilidad de un sitema de
ecuaciones lineales y lo resuelva cuando sea compatible (determinado o indeterminado).
Aplicar esa funcion a
A =

1+
2

1++
2

!
con 6= 0 y b = (1, 1)
t
para valores peque nos de .
72. Realizar una estrategia que determine la descomposicion QR mediante el metodo de
GramSchmidt de una matriz A con columnas linelamente independientes. Escriba la
estrategia en un archivo.m.
113
73. Considere la matriz
A =
_
_
_
_
_
1 1 1
1 + 1 1
1 1 + 1
1 1 1 +
_
_
_
_
_
6= 0
Asigne un valor peque no a y aplique el metodo de GrammSchmidt (ver ejercicio
anterior) para ortonormalizar las columnas de A. Comprudebe si realmente se han
obtenido columnas ortonormales. Aplique la funcion qr sobre A y obtenga resultados.
Bibliografa
[1] PCMATLAB
TM
for MSDOS Personal Computers (Users Guide).
The MathWorks, Inc., (1990).
[2] MATLAB Reference Guide.
The MathWorks, Inc., (Octubre 1992).
[3] B. Noble, J.W. Daniel

Algebra Lineal Aplicada.
Ed. Prentice Hall, (1989).
[4] G. Strang

Algebra Lineal y sus Aplicaciones.
Ed. Addison Wesley, (1990).
[5] S.I. Grossman

Algebra Lineal, (Quinta edici on)
Ed. MacGraw-Hill, (1996)
[6] M. Marcus Matrices y Matlab: a tutorial
Prentice-Hall (1993)
114