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

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/265074269

INTRODUCCION A MATLAB

Article · February 1998

CITATIONS READS

0 60

2 authors, including:

Julio R. Fernández
Universidad de Sevilla
36 PUBLICATIONS   382 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Modelos Cooperativos entre Agentes Asimétricos. Aplicaciones al Análisis del poder en el Parlamento Europeo (ECO2013-40755-P -
Equipo de Investigación) View project

Fuzzy game theory View project

All content following this page was uploaded by Julio R. Fernández on 16 October 2014.

The user has requested enhancement of the downloaded file.


INTRODUCCION A MATLAB

Victoriano Carmona Centeno y Julio R. Fernández Garcı́a


INTRODUCCIÓN A MATLAB
°c Victoriano Carmona Centeno y
Julio R. Fernández Garcı́a
Profesores del Departamento de Matemática Aplicada II
Escuela Universitaria Politécnica
Universidad de Sevilla

ISBN 84-8264-257-X
Depósito Legal SE-233-98

Imprime Librerı́a Papelerı́a Panella


C/Virgen de Africa 8, 41011 Sevilla

Febrero de 1998

MATLAB es una marca registrada de


The Math Works, Inc.
INTRODUCCIÓN
Hace ya bastante tiempo que el ordenador es utilizado en el cálculo cientı́fico y su uso
cada vez se impone con más fuerza tanto en el terreno de la investigación como pedagógico-
didáctico. Es por ello, que hayan salido al mercado distintos programas en los que aparecen
implementados algunos de los métodos que utilizamos dı́a a dı́a en la resolución 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ños hasta su forma actual. MATLAB destaca por su fácil aprendizaje, fácil utilización, gran
potencia y pocas exigencias de equipamiento informático. Naturalmente, esta buena ”relación
calidad-precio” hace que sea uno de los programas de software matemático más extendido.
La potencia de MATLAB se manifiesta por dos caracterı́sticas fundamentales: la
conjugación entre programación clásica y funcional y la gran variedad de problemas que es
capaz de resolver (Sistemas de Ecuaciones, Optimización, Ecuaciones diferenciales...). Su
fácil uso y rápido aprendizaje están ı́ntimamente relacionados con su carácter 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ón de un determinado problema se
lleva a cabo aplicando” a las matrices introducidas las ”funciones” que MATLAB dispone (o
que el usuario ha definido previamente).
MATLAB se presenta entonces como una herramienta eficaz y flexible en el Cálculo
Numérico (sobre todo en el Calculo Numérico Matricial) con excelente posibilidades gráficas,
que ayudan al profesor y al alumno tanto en sus trabajos docentes y de estudio como en su
labor de investigación.
Estas páginas no pretenden agotar, en absoluto, todas las posibilidades que MATLAB
ofrece. Aquellos que deseen profundizar más en este tema pueden hacerlo consultando alguno
de los excelentes manuales de la bibliografı́a y las referencias que en ellos se citan. En ella
hemos incluido libros de ALGEBRA LINEAL para aquellos lectores que necesiten repasar
algunos de los conceptos que se van desarrollando.
El presente manual fue utilizado en 1997 como texto de referencia en el Curso de
”Introducción a Matlab”, celebrado en el Centro Informático Cientı́fico de Andalucı́a
(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 Extensión Cultural de la Universidad
de Sevilla y fue homologado por la Consejerı́a de Educacion y Ciencia.
Por último deseamos hacer constar la colaboración del profesor D. Francisco Félix
Lara Martı́n en la elaboración de unos apuntes preliminares a esta obra.
LOS AUTORES
INTRODUCCION A MATLAB Victoriano Carmona Centeno y Julio R. Fernández Garcı́a
Índice General

1 Elementos básicos 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 Redefiniciones y construcciones a partir de la diagonal . . . . . . . . . . . . . 26

3 Sistemas de Ecuaciones Lineales y descomposiciones 29


3.1 Resolución de S.E.L. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1 Sistemas cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2 Sistemas superdeterminados. Mı́nimos cuadrados . . . . . . . . . . . . 30
3.1.3 Tiempo de cálculo y número de operaciones . . . . . . . . . . . . . . . 31
3.2 Descomposiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.1 Factorización LU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.2 Descomposición de Cholesky . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.3 Factorizacion QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.4 Ortonormalización y espacio nulo . . . . . . . . . . . . . . . . . . . . . 37
3.3 Normas y número de condición . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3.1 Normas vectoriales y matriciales . . . . . . . . . . . . . . . . . . . . . 39
3.3.2 Número de condición 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 caracterı́stico de una matriz cuadrada . . . . . . . . . . . . 47
4.3.2 Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.3 Raı́ces de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3.4 Aproximación por polinomios en el sentido de los mı́nimos cuadrados . 52

1
2 ÍNDICE GENERAL

4.3.5 La orden polyvalm y semejantes . . . . . . . . . . . . . . . . . . . . . 54

5 Posibilidades gráficas 57
5.1 Gráficos en el plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.1 Poligonales y curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.2 Curvas en polares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.1.3 Curvas en paramétricas . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.4 Histogramas y diagramas de barras . . . . . . . . . . . . . . . . . . . . 63
5.2 Curvas en el espacio y superficies . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.1 Curvas en paramétricas . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.2 Superficies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.3 Curvas de nivel y vector gradiente . . . . . . . . . . . . . . . . . . . . 66

6 Funciones y programas en Matlab. M—Ficheros 73


6.1 Instrucciones en Matlab: input, if, error, while, break, pause, for . . . . . 73
6.2 Definición de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

7 Aspectos de análisis numérico 84

7.1 Resolución de Ecuaciones y Sistemas no Lineales . . . . . . . . . . . . . . . . 84


7.2 Integración numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.3 Optimización en una y varias variables . . . . . . . . . . . . . . . . . . . . . . 87
7.4 Resolución de Ecuaciones Diferenciales Ordinarias . . . . . . . . . . . . . . . 87

8 Consejos prácticos 91
8.1 Las órdenes help, lookfor y demo . . . . . . . . . . . . . . . . . . . . . . . 91
8.2 Información sobre variables declaradas. Instrucciones para guardar y salvar
variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.3 Relación con el sistema operativo. El comando diary . . . . . . . . . . . . . 93

9 Resumen de los comandos y funciones más utilizados 95

10 Relación de ejercicios 102


Capı́tulo 1

Elementos básicos

En esta primera sección explicaremos aquello que es necesario conocer para comenzar a
utilizar MATLAB. En particular describiremos:

1. La introducción de matrices y sus elementos, declaraciones y variables MATLAB.

2. Cómo obtener información, terminar y salvar variables declaradas en una sesión.

3. Números y expresiones aritméticas.

4. Utilización de la ayuda.

5. Funciones de MATLAB.

LA INTRODUCCIÓN 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 fila o una columna, que representarán vectores.
En MATLAB podemos introducir las matrices de varias formas:

• Introduciendo explı́citamente una lista de elementos.

• Generando matrices usando variables y funciones incorporadas.

• Creando matrices en M—ficheros.

• Leyendo matrices desde ficheros de datos externos.

El lenguaje MATLAB no contiene ninguna declaracion de dimensión u otro tipo de


declaraciones, como sucede en algunos lenguajes de programación. MATLAB asigna y
almacena automáticamente, dependiendo de las caracterı́sticas de cada ordenador.
El modo más fácil de introducir matrices pequeñas es introducir explı́citamente sus ele-
mentos, siguiendo las convenciones: Separar explı́citamente la lista de elementos con espacios

3
4 CAPÍTULO 1. ELEMENTOS BÁSICOS

en blanco o comas, encerrar los elementos entre corchetes ([ ]) y usar ; para indicar el fin de
cada fila.
Por ejemplo, introduciendo la asignación

>>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 también pueden introducirse por lı́neas, 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 ficheros.m. Ası́ si un fichero se
llama “pepe.m” y contiene las siguientes lı́neas de texto

A=[1 2 3
4 5 6
7 8 9]

entonces, la instrucción “pepe” lee el fichero “pepe.m” y genera la matriz A:

>>pepe
A =
1 2 3
4 5 6
7 8 9

El comando “load” y la función “fread” permiten leer matrices generadas durante sesiones
anteriores, importar matrices de otros programas o exportarlas. Pero este es un aspecto que
será tratado más adelante.
Las matrices pueden incluir algunas expresiones MATLAB; por ejemplo al teclear
5

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

resulta

>>x=

-1.3000 1.7321 4.8000

Los coeficientes de la matriz pueden referenciarse individualmente utilizando ı́ndices encer-


rados dentro de un paréntesis. Si continuamos con el ejemplo anterior, la asignación

>>x(5)= abs(x(1))

produce

>>x=

-1.3000 1.7321 4.8000 0 1.3000

Obsérvese que el tamaño de x aumenta automáticamente, acomoda al nuevo elemento


que hemos definido y da el valor cero a los elementos que no se han definido.
Si tecleamos

>>r=[10 11 12];

no obtenemos salida alguna; ello se debe a que hemos añadido el punto y coma al final. 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ñas como “elementos”de


la misma. Por ejemplo podemos añadir una fila 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 sı́mbolo :. Por ejemplo


6 CAPÍTULO 1. ELEMENTOS BÁSICOS

>>A = A(1:3,:)
A =
1 2 3
4 5 6
7 8 9

toma las tres primeras filas de la matriz A y todas las columnas, y nos devuelve el resultado
introducido en la matriz original. Estos y otros aspectos los veremos más adelante con mucho
más detalle.

ASIGNACIONES Y VARIABLES MATLAB

MATLAB es un lenguaje de expresiones: interpreta y evalúa las expresiones introduci-


das. Las asignaciones MATLAB son con frecuencia de la forma

variable=expresión

o simplemente

expresión

Podemos componer expresiones con operadores, caracteres especiales, funciones y vari-


ables. La evaluación produce en la mayorı́a 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 automáticamente crea una variable con el nombre
“ans” (variable de respuesta), donde almacena el resultado. Por ejemplo, si introducimos la
expresión

>>sqrt(2)/15

se obtiene

ans =
0.0943

Si una expresión es bastante complicada (y larga) y no es suficiente una lı́nea para es-
cribirla completamente, podemos añadir al final tres puntos ( . . . ) seguidos de un retorno de
carro para indicar que la asignación continúe en la lı́nea 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úa 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 empezarán siempre por letras y que
pueden estar seguidas de otras letras o dı́gitos. MATLAB sólo reconoce los 19 primeros
caracteres de un nombre.
MATLAB es muy sensible: distingue entre letras mayúsculas y minúsculas. A y a no son
la misma variable. Todos los nombres de funciones deben escribirse con minúsculas; inv(A)
es la inversa de A, pero INV(A) no está definida. El comando “casesen” anula (o activa) esta
sensibilidad.

RECOGIENDO INFORMACIÓN 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 información 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 significado especial para MATLAB.


Ellas son permanentes y no pueden borrarse con la orden clear1 . La variable “eps” es una
tolerancia para considerar cero aquellas variables que sean casi nulas (bastante útil 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ón “pi” nos devuelve el número π, 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 función “Inf”, que se utiliza para infinito, se encuentra en algunas calculadoras o
lenguajes de computación. 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ÍTULO 1. ELEMENTOS BÁSICOS

>>s=1/0

Warning: Divide by zero


s =
Inf

Aunque, dependiendo de la versión que utilicemos de MATLAB y el entorno de trabajo,


la respuesta al cálculo anterior puede ser el sı́mbolo ∞.
En máquinas con cierta aritmética, la división por cero no provoca un error ni la final-
ización de la ejecución. Produce un mensaje y asigna un valor especial, que podemos utilizar
en calculos posteriores. Por ejemplo, la variable “NaN” es un número relacionado con el
infinito pero con distintas propiedades. “NaN” siginfica No es Un Número. Cálculos como
Inf/Inf o 0/0 lo generan. Como otra variable intrı́seca de MATLAB podemos citar la unidad
imaginaria que se representa en MATLAB por i ó j.

LA UTILIDAD HELP
La utilidad “help” proporciona información instantánea de la mayorı́a de los tópicos de
MATLAB. El comando “help” sin argumentos muestra, dependiendo de la versión de MAT-
LAB que estemos usando, una lista de los directorios que contienen ficheros 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ás relevantes en Análisis Numérico 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ÍTULO 1. ELEMENTOS BÁSICOS

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ón de la factorización 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 LINPACK’S ZGEFA routine.


Si tecleamos
>>help inverse
MATLAB nos contesta
inverse not found
pues en MATLAB “inverse” no es el nombre de ninguna función o comando, a menos que
haya sido añadida por algún usuario.
11

Una información más 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ón con MATLAB teclearemos “quit” o “exit”. Al finalizar
una sesión MATLAB se borran todas las variables del espacio de trabajo (i.e., las vari-
ables declaradas en la sesión actual). Antes de terminar podemos guardar el contenido del
“workspace”, para una sesión posterior, tecleando

>>save

Este comando salva todas las variables en un fichero llamado matlab.mat. La próxima
vez que MATLAB sea llamado podremos ejecutar “load” para restaurar, en el workspace,
el contenido de matlab.mat.
Podemos utilizar “save” y “load’ con otros nombres de fichero.mat o bien guardar sólo
aquellas variables en las que estemos interesados. El comando “save temp X” guarda en el
fichero temp.mat sólo la variable X, mientras que “save temp X Y Z” almacena en temp.mat
12 CAPÍTULO 1. ELEMENTOS BÁSICOS

las variables X,Y y Z. “load temp” cargas todas las variables almacenadas en el fichero
temp.mat
Por último, con los comandos “load” y “save” podemos importar y exportar ficheros con
datos ASCII. (Ver más adelante).

NÚMEROS Y EXPRESIONES ARITMÉTICAS

MATLAB utiliza la notación decimal, pudiendo incluir factores con potencias de diez o
unidades imaginarias. Algunos ejemplos de números legales son:

3, −99, 9.6397238, 0.00001, 1.60210E − 20, 6.02252e23, 3e5i, 2i

La aproximación del número es “eps”, i.e., aproximadamente 16 dı́gitos decimales significa-


tivos cuando se usa aritmética de punto flotante. El rango de la mantisa es [−308, 308].
Podemos combinar expresiones con los operadores aritméticos usuales y las reglas de prece-
dencia2 . Las operaciones elementales son:

• + Suma

• − Resta

• ∗ Multiplicación

• / División derecha

• \ División izquierda

• ∧ Potencia

Las operaciones con matrices hacen conveniente tener dos sı́mbolos para la división. Esto
se analizará con más 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 numérico, es decir 0.25.

NUMEROS COMPLEJOS, CADENAS DE CARACTERES Y MATRICES

MATLAB trabaja con números complejos y representa la unidad imaginaria por i ó j.


El número z en forma binómica 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 paréntesis.
13

Otra opción consiste en utilizar la notación 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ás actuales de MATLAB se pueden escribir los números complejos sin
necesidad de utilizar *. Pero hay que tener cuidado en no dejar espacios en blanco al escribir
la parte imaginaria de un número 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 también hay que tenerlo en cuenta cuando se utiliza la notación exponencial con
números reales. Si introducimos

>>1.23e-4

la respuesta es

1.2300e-004

en cambio
14 CAPÍTULO 1. ELEMENTOS BÁSICOS

>>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 sesión las letras i ó 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 definir la unidad imaginaria del siguiente modo:

>>ii=sqrt(-1)
ii =
0 + 1.0000i

Consideremos, por ejemplo, la siguiente sesión

>>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ólo maneja matrices, pero los elementos de éstas pueden ser
números (reales o complejos) o cadenas de caracteres. Por ejemplo si tecleamos

>> 34
ans =
34

aparece el número 34, en cambio introduciendo matrices formadas por cadenas de caracteres
(incluido el espacio en blanco) podemos leer, por ejemplo, la profunda conversación:
>> 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 intrı́nsecas al proceso de MATLAB en sı́ mismo. Otras funciones se pueden
encontrar en una librerı́a externa de ficheros.m distribuida con MATLAB, llamadas cajas
de herramientas (MATLAB Toolboxes).
Todavı́a se están añadiendo funciones que han sido creadas por usuarios individuales,
o grupos de usuarios, para aplicaciones más especializadas. Este es un hecho importante,
cada usuario puede crear sus propias funciones y trabajar con ellas conjuntamente con las
funciones intrı́nsecas de MATLAB. Éste es un aspecto importante que desarrollaremos más
adelante.
MATLAB posee una gran clase de funciones, entre las que se inlcuyen las funciones
elementales que podemos encontrar en casi todas las calculadoras cientı́ficas (abs, sqrt, log,
sin, . . . ). Las funciones de que disponemos en MATLAB se pueden clasificar, por grupos,
del siguiente modo:

1. Funciones elementales

2. Funciones especiales

3. Funciones matriciales elementales

4. Funciones matriciales especiales

5. Descomposición de matrices

6. Análisis de datos

7. Tratamiento de polinomios
16 CAPÍTULO 1. ELEMENTOS BÁSICOS

8. Ecuaciones diferenciales

9. Ecuaciones no lineales y optimización

10. Integración numérica

11. Procesamiento de la señal

Una breve descripción de casi todas las funciones de estos grupos se puede encontrar en
los cuadros resúmenes del último capı́tulo o, con más profundidad, en la guı́a de usuarios de
MATLAB.
Destacamos que la práctica totalidad de las funciones elementales de MATLAB no sólo
actúa sobre números, sino que también 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ñalamos que
aunque MATLAB siempre trabaja en doble precisión, es posible elegir diversos “formatos
de salida” para los resultados numéricos. Por defecto, el formato usual será de 5 cifras
decimales.
Algunas de las posibilidades que tenemos las describimos a continuación 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 numéricos siempre aparezcan como números
racionales. Pero téngase en cuenta que esto no significa que la matriz en cuestión sea tratada
internamente, por MATLAB, como una matriz racional. Por consiguiente, esto resulta útil
1.1. FORMATOS DE SALIDA 17

si tenemos la certeza de estar siempre trabajando con números racionales. Ponemos esto de

manifiesto con la aproximación 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

Obsérvese que si utilizamos “format rat” para la representación 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 sólo aparecen los


elementos no nulos (positivos marcados con “+” y negativos con “−”). “format +” resulta
especialmente útil 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ÍTULO 1. ELEMENTOS BÁSICOS

-+
-
++
+

Para volver al formato corto usual podemos teclear “format” o bien “format short”.
En relación con la presentación por pantalla tenemos los comandos “format compact”
y “format loose”. El primero de ellos nos suprime las lı́neas en blanco que, por defecto,
aparecen en una sesión MATLAB, mostrando de esta forma más información 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 fila 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ón de las filas 2a y 3a y


de las columnas 1a y 2a 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 instrucción del tipo M = [P ; B] construye, si es posible, una matriz M añadiendo a
P las filas de B. Véase,
>> 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], análoga a la anterior, construye la matriz M añadiendo a P las
columnas de B. Naturalmente, esto es posible si P y B tienen el mismo número de filas.
>>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 definen nuevos elementos de una matriz en una fila o columna no existente, los
elementos no definidos (en la filas o columnas no existentes) se toman como nulos.
20 CAPÍTULO 1. ELEMENTOS BÁSICOS

>>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 finalidad. Podemos definir un vector cuyos
elementos están en progresión artimética:

>> t=0:2:10
t =
0 2 4 6 8 10

Los dos puntos también 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 sección mostraremos como las operaciones con matrices se realizan en MATLAB
de forma bastante natural.
Dada una matriz A, A0 nos proporciona la traspuesta de A, si ésta es real, o la adjunta
en sentido hermı́tico, si A es de números 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 n—ésima 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 función “det”. Por
ejemplo, para la matriz de Hilbert de orden 5 el determinante es:

>>format rat
>>H=hilb(5)
22 CAPÍTULO 1. ELEMENTOS BÁSICOS

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 =

>>rank(A)

ans =

>>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úmero de filas y la segunda el número de columnas.

>>size(A)

ans =

3 3

Por último, indicar que la orden “nnz” determina el número de elementos no nulos de la
matriz.

>>nnz(A)

ans =

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
potenciación y la división 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ÍTULO 1. ELEMENTOS BÁSICOS

ans =
1 4 125

Cuando una de las matrices sea de orden 1 por 1 (i.e., un escalar), las operaciones ante-
riores también tienen sentido. Véase

>> 3 .^v
ans =
3 9 27
>>3 ./v
ans =
3.0000 1.5000 1.0000

Nótese el espacio entre el número 3 y el punto; éste es necesario en las primeras versiones
de MATLAB.
En relación con las operaciones elemento a elemento podemos destacar la operación
n +matriz (o matriz+no ) que, al contrario de las anteriores no necesita el punto (.), y cuyo
o

cometido es sumar a cada elemento de la matriz el número en cuestión.

>>8+v
ans =
9 10 11
Capı́tulo 2

Tipos especiales de matrices.


Construcciones.

2.1 Matrices especiales.


Indiquemos en primer lugar como generar automáticamente, con ayuda de algunas funciones
incorporadas en MATLAB, algunos tipos de matrices.
“zeros(m,n)” genera la matriz nula de orden m × n. Análogamente “ones(m,n)” produce
una matriz de orden m × n 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 finalidad que persigamos. Esta caracterı́stica no la poseen sólo las funciones anteri-
ores, sino que la mayorı́a de las funciones de MATLAB gozan de la misma, como iremos
descrubiendo más adelante.
Además, la anterior caracterı́stica está ı́ntimamente ligada con la función (variable in-
trı́seca) “nargin” (número de argumentos de entrada) que nos proporciona, una vez que

25
26 CAPÍTULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.

llamamos a una función, el número de argumentos de entrada que utilizamos en dicha llama-
da (es decir, el número de elementos entre paréntesis y separados por comas que preceden
al nombre de una función). Relacionada con la función “nargin” nos encontramos la función
“nargout” (número de argumentos de salida) de la que hablaremos más adelante.
La orden “ones(A)” nos proporciona una matriz de unos del mismo orden que A. Efectos
análogos tienen los comandos “eye(A)” y “zeros(A)”.

>> ones(E)
ans =
1 1 1 1
1 1 1 1

Para la versión 4.2c de MATLAB las órdenes “ones(A)”,“ eye(A)” y “size(A)” han
quedado obsoletas y conviene sustituirlas por “ones(size(A))”, “eye(size(A))” y “zeros(size(A))”.
También 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 Redefiniciones y construcciones a partir de la diagonal


Existen varias funciones MATLAB que permiten redefinir la estructura de una matriz:

>>rot90(E)

Esta instrucción realiza un giro de 90o 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

• “fliplr(A)” que nos da la matriz A pero con las columnas en orden inverso.

• “flipud(A)” que tiene el mismo efecto que “fliplr(A)”, pero para las filas de A.

>> A=[3 4 6 8;1 0 7 20;-3 -2 8 0]


A =
3 4 6 8
1 0 7 20
-3 -2 8 0
>> R=reshape(A,2,6)
R =
3 -3 0 6 8 20
1 4 -2 7 8 0
>>fliplr(A),flipud(A)
ans =
8 6 4 3
20 7 0 1
0 8 -2 -3
ans =
-3 -2 8 0
1 0 7 20
3 4 6 8

Dada una matriz A existe la posibilidad de generar diversas matrices a través 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 k—ésima
superdiagonal de A, si k es positivo, y la k—ésima subdiagonal, si k es negativo. (Obsérvese
de nuevo la posibilidad de dar distinto número de argumentos de entrada a una función
MATLAB).
28 CAPÍTULO 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áloga a la orden “diag(A)” nos encontramos las órdenes “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

También disponemos de las variantes “triu(A,k)” y “tril(A,k)” que actúan de forma


análoga a la instrucción “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 A como
suma de una matriz triangular inferior L, una matriz diagonal D y una matriz triangular
superior U . (Esta descomposición resulta útil en la resolución de S.E.L. mediantes métodos
iterativos).
Capı́tulo 3

Sistemas de Ecuaciones Lineales y


descomposiciones

3.1 Resolución 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 solución mediante la operación A\b. Esta operación nos indica que estamos
dividiendo, por la izquierda, el vector columna b por la matriz A, i.e., estamos haciendo la
operación A−1 b. Como se puede imaginar esta operación no se realiza calculando la inversa1
de A, se lleva a cabo de forma general mediante el método 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ón de la matriz de coeficientes y el vector columna b.

• Resolución del sistema mediante la división izquierda A\b.

>> A=[1 2;3 -4];b=[3 -1]’;


>> x=A\b
x =
1.0000
1.0000

Si A es singular, aún cuando el sistema sea compatible, MATLAB nos proporcionará un


mensaje de error.
1
Pues el cálculo de la inversa de una matriz es demasiado costoso desde el punto de vista computacional.

29
30 CAPÍTULO 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. Mı́nimos cuadrados


Si A no es cuadrada, A\b resuelve el sistema (S) en el sentido de los mı́nimos cuadrados. De
esta forma, podemos resolver el sistema anterior añadiendo una fila 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ólo hemos obtenido una de las soluciones del sistema. Para
tener todas, solamente nos falta una base del espacio nulo (núcleo) de la matriz A. Veremos
como obtener esto en una próxima sección.
Se ha puesto de manifiesto en este subapartado que la resolución del sistema Ax = b,
llevada a cabo por MATLAB mediante la orden A\b, depende de la estructura de la matriz
de coeficientes del sistema. De hecho, la división izquierda \ utiliza, a grandes rasgos, el
siguiente algoritmo:
• Si la matriz A es una permutación de una matriz triangular superior (resp. inferior) se
utiliza el método de subida (resp. bajada).

• Si A es simétrica (hermı́tica) definida positiva se calcula la descomposición de Cholesky


de A, i.e., se determina la matriz triangular superior R con elementos diagonales es-
trictamente positivos tal que A = Rt R y a continuación se determina x de la forma
x = R\(R0 \b).

• Si la matriz de coeficientes no es una permutación de una matriz triangular o no es


definida positiva, la resolución del sistema se lleva a cabo calculando la descomposición
LU de A mediante el método de Gauss con estrategia de pivoteo parcial. Una vez
calculadas las matrices L y U , la solución del sistema es x = U \(L\b).

• Por último, si A no es cuadrada se computa la descomposición QR de A mediante


simetrı́as de Householder. Es decir, se calcula Q ortogonal, R triangular superior y P
matriz de permutación tales que AP = QR. Una vez obtenidas P, Q y R se calcula x
mediante x = P ∗ (R\(Q0 ∗ b)).
3.1. RESOLUCIÓN DE S.E.L. 31

3.1.3 Tiempo de cálculo y número de operaciones

Como hemos visto en el capı́tulo 1 la instrucción “inv(A)” calcula la inversa de la matriz


A, si ésta es regular (en realidad, sólo podemos fiarnos del resultado final si A no es casi
singular ). La resolución de un determinado S.E.L. puede realizarse con MATLAB mediante
la orden “inv(A)*b”, pero como pondremos de manifiesto a continuación es más efectivo la
utilización del comando “A\b”. Esta eficacia se pone de manifiesto comparando el número
de operaciones de ambos métodos y el tiempo de cálculo para llevar a cabo los mismos. El
número de operaciones que MATLAB ha efectuado en una sesión puede obtenerse con el
comando “flops”. Ahora bien, la utilización de la versión “flops(0)” hace que el contandor
(del número de operaciones) se inicialice a cero, con lo que si seguidamente realizamos algunas
operaciones con MATLAB podemos conocer el número de éstas sin más que teclear “flops”.
Para el sistema cuadrado

x + 2y = 3
3x − 4y = −1

comparamos el número 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 incógnitas, el número
de operaciones es mucho mayor si utilizamos para resolver el sistema la orden “inv(A)∗b”.
Dentro de los ejercicios que se acompañan al final se propone la construcción de una
función que nos permita resolver un S.E.L. cuadrado por el método de Cramer. Serı́a conve-
niente que el lector comparase con algunos ejemplos el número de operaciones necesario para
la resolución del sistema utilizando el método de Cramer y el algoritmo división izquierda.
32 CAPÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

Para la evaluación de tiempos de cálculo, tenemos varias posibilidades. Las funciones


“tic” y “toc” nos proporcionan conjuntamente el tiempo de cálculo de cualquier expresión
MATLAB sin más que teclear

>>tic
>>expresiones
>>toc

La función “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álculo de cualquier expresión realizando las siguientes instrucciones:

>>t1=cputime
>>expresiones
>>t2=cputime-t1

Para comparar los tiempos de cálculo también podemos hacer uso de los comandos “clock”
y “etime”. El primero de ellos nos muestra un vector fila de seis componentes en el que se
puede obeservar el año, mes, dı́a, 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 dimesiones2 ) formados por números aleato-
rios, comprendidos entre cero y uno, con ayuda de la función “rand(m,n)”:

>>A=rand(30);b=rand(30,1);

y resolvemos el sistema Ax = b mediante la división 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 resolución del sistema mediante la orden “inv(A)∗b” necesita mayor
tiempo de cálculo que la división izquierda (de hecho, casi el doble de tiempo).

2
Hacemos esto, pues la diferencia entre los tiempos de cálculo de los dos métodos para S.E.L. pequeños es
casi inapreciable.
3.2. DESCOMPOSICIONES 33

3.2 Descomposiciones
3.2.1 Factorización LU.
Dada una matriz A “[L,U]=lu(A)” realiza la descomposición LU (LR) de la matriz cuadrada
A. Esta descomposición siempre se realiza siguiendo el método de Gauss con estrategia de
pivote parcial, por lo cual, aunque U es triangular superior, L en la mayorı́a 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 filas, 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ón que nos da los intercambios
de filas. Es decir, P A = LU . Compruébese

>> [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ÍTULO 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ón “lu” posee una caracterı́stica particular: la función puede ser llama-
da con distinto número de argumentos de salida según nuestra finalidad. Esta caraterı́stica
no es privilegio exclusivo de la función “lu”, sino muchas otras funciones de MATLAB,
como veremos más adelante, también presentan esta particularidad.

3.2.2 Descomposición de Cholesky


Si A es una matriz simétrica (hermı́tica) definida positiva la descomposición de Cholesky
de A se realiza con la función “chol(A)”. Se obtiene una matriz R triangular superior con
elementos diagonales estrictamente positivos tal que A = Rt 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

Nótese que se obtiene un mensaje de error si la matriz no es definida 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ón “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 definida positiva, entonces p = 0 y R contiene la descomposición de Cholesky


de A.
3.2. DESCOMPOSICIONES 35

• Si A no es definida positiva, entonces p es un número entero estrictamente positivo y


R una matriz triangular superior con elementos diagonales estrictamente positivos de
orden q = p − 1 tal que R0 ∗ R = A(1 : q, 1 : q). Es decir, el comando “chol” con
dos argumentos de salida nos proporciona la descomposición de Cholesky de la mayor
submatriz principal de A que es definida positiva (y, salvo una unidad, el orden de ésta).

>>[R,p]=chol(T)
R=
1.4142 -0.7071
0 1.2247
p=
3

Naturalmente, si ninguna submatriz principal de A es definida positiva R tendrá como


valor la matriz vacia (matriz que no contiene elementos) y p será igual a uno.
>>M=[-2 1;2 3];
>>[s,f]=chol(M)
s=
[ ]
f=
1

3.2.3 Factorizacion QR
La factorización QR de una matriz A, no necesariamente cuadrada, puede realizarse medi-
ante la orden “[Q,R]=qr(A)”; Q será 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
descomposición 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ón de esta forma por cuestiones de estabilidad en el método).
>> M=[4 6 -2 7;2 4 10 -1;-12 4 -3 0];
>> [Q,R]=qr(M)
Q =
-0.3123 -0.7840 0.5365
-0.1562 -0.5147 -0.8430
0.9370 -0.3471 0.0383
R =
-12.8062 1.2494 -3.7482 -2.0303
0 -8.1510 -2.5375 -4.9732
0 0 -9.6183 4.5984
Podemos comprobar que Q es ortogonal, es decir, (salvo errores de redondeo) Qt Q = I.
36 CAPÍTULO 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 función “lu”, la función “qr” también 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 permutación 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álculo del rango de A es inmediato, pues Q
es no singular. Para el ejemplo anterior R tiene dos filas nulas y por consiguiente el rango de
MM es dos. En efecto,

>>rank(MM)
ans =
2

3.2.4 Ortonormalización y espacio nulo

Gracias a la descomposición QR que se obtiene mediante MATLAB podemos calcular una


base ortonormal del espacio columna y una base ortonormal del espacio nulo (núcleo) de una
matriz A.
La función 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ón “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 Ort Or y nulot 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ÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

Nótese 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ñade un fila nula a la matriz ampliada para conseguir un sistema


no cuadrado.

2. Se calcula una solución particular del mismo.

3. Calculamos una base del espacio nulo de la matriz de coeficientes.

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ÚMERO DE CONDICIÓN 39

De este forma, todas las soluciones del sistema anterior vienen dadas por

x= −0.8944α
con α ∈ R
y = 1.5 + 0.4472α

3.3 Normas y número de condición


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 mayorı́a de los casos se trabaja con la norma euclı́dea (i.e., en norma
2), por defecto “norm(A)” nos da el mismo valor que “norm(A,2)”. (De nuevo la función
“norm” puede tener distinto número 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úmero de condición y rango


El número de condición de una matriz nos proporciona el valor máximo de amplificación de
los errores relativos en la resolución de un S.E.L. sometido a perturbaciones. Si el número de
condición es mucho mayor que uno, la matriz está mal condicionada y no debemos fiarnos de
la solución del sistema; si por el contrario es próximo a uno, la matriz se dice bien condicionada
y los posibles errores relativos en la solución están acotados por los errores relativos cometidos
en los datos del sistema (matriz y término independiente).
El número de condición de una matriz A se calcula mediante MATLAB con la función
“cond(A)”. Para la matriz de Hilbert anterior
40 CAPÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

>> cond(H)
ans =
4.7661e+005
Parece, entonces, necesario obtener el número de condición de la matriz de coeficientes 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 aproximación
del inverso del número de condición de la matriz de coeficientes A, dándonos un aviso para
que tengamos en cuenta que si “rcond(A)” es pequeño, hay posibilidad de un gran error en
la solución si hemos cometido un pequeño error en los datos del sistema. Para la matriz
“H=hilb(5)”, 1/cond(A) = 2.0982e − 006 y mediante la función “rcond” se obtiene:
>> rcond(H)
ans =
1.4407e-006
Ponemos de manifiesto a continuación la ventaja de la información complementaria de
MATLAB cuando resolvemos un S.E.L. Por ejemplo, para la resolución del sistema

x + 2y + 3z = 1  
4x + 5y + 6z = 0

7x + 8y + 9z = 0 
mediante MATLAB, se efectúan 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ÚMERO DE CONDICIÓN 41

Apreciamos en la obtención de la resolución del sistema un mensaje de error que nos


informa que la matriz de coeficientes puede ser casi singular (estar mal condicionada). De
hecho la solución que hemos obtenido no es solución 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ás 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ás, como puede comprobarse fácilmente, nuestro sistema es INCOMPATIBLE.


Advertencia: Aunque MATLAB nos da información 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ún mensaje de precaución a la hora de resolver el sistema
42 CAPÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

o calcular la inversa de la matriz de coeficientes. Parece lógico, entonces, calcular “cond(A)”


(o “rcond(A)”) antes de resolver un sistema y tomar la decisión de resolverlo una vez conocido
el número de condición de la matriz de coeficientes.
El rango de una matriz se calcula mediante MATLAB con la función “rank(A)”. Por
ejemplo, para la matriz de coeficientes 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úmero de valores singulares (ver más


adelante) casi no nulos de ésta. Esto permite utilizar la función “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 sólo argumento de entrada para “rank” el valor de tol viene dado
por defecto como tol=max(size(A))∗norm(A)∗eps.
Finalizamos esta sección 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:

(
x + y = 2
[A]
x + 1.0001y = 2

(
x + y = 2
[B]
x + 1.0001y = 2.0001
Capı́tulo 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ón “eig”:

>>V=[1 4;8 -1];


V =
1 4
8 -1
>>[X,D]=eig(V)
X =
0.6446 -0.5101
0.7645 0.8601
D =
5.7446 0
0 -5.7446

Ası́, se obtiene una matriz diagonal D cuya diagonal contiene los autovalores de la matriz
V y una matriz X que verifica la condición: 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 (ténganse 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ÍTULO 4. AUTOVALORES Y POLINOMIOS

0 1
>>rank(X)
ans =
1

La función “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 único argumento de salida obtenemos un vector columna que
contiene los autovalores (puede que repetidos) de la matriz A.

>>aut=eig(V)
aut =
5.7446
-5.7446
>>VV=[1 2;-2 1]
VV =
1 2
-2 1
>>autVV=eig(VV)
autVV =
1.0000 + 2.0000i
1.0000 - 2.0000i

Estrechamente relacionadas con el cálculo 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

Obsérvese 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 descomposición en valores singulares de una matriz A cualquiera se efectúa por medio de
la función “svd”. De esta forma, la orden “[U,S,V]=svd(A)” proporciona una matriz diagonal
S, del mismo tipo que A, y dos matrices ortogonales (unitarias) U y V tales que A = U SV t .
Los elementos de la diagonal de S son por tanto los valores singulares de la matriz A, i.e.,
la raı́z cuadrada1 de los autovalores de la matriz simétrica (hermı́tica) semidefinida positiva
At A (A∗ A).

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


A =
1 2
-1 1
0 3
>>[U,S,V]=svd(A)
U =
0.5531 0.6006 -0.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 raı́z cuadrada de los autovalores de At A son los valores sin-
gulares de A:

>>sqrt(eig(A’*A))
ans =
1.3846
3.7527

Véase que la función “sqrt” ha actuado sobre cada uno de los elementos del vector columna
formado por los autovalores de At A.
Naturalmente la descomposición en valores singulares también 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 hermı́tica semidefinida positiva sus autovalores son no negativos.
46 CAPÍTULO 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 función “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ón de
“svd” con tres argumentos se obtienen las tres matrices anteriores y cuando se utiliza un solo
argumento de salida, se almacenan en él, 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

Nótese que uno de los valores singulares de MN es nulo; esto sucede porque MN no es de
rango máximo.
Relacionada con el algoritmo de cálculo 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ón 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. Recuérdese además, que A+ A = I y que la pseu-
doinversa de A coincide con la inversa de A si ésta 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ólo hace falta introducir los coeficientes del polinomio (en orden decreciente de
potencias) en un vector fila2 . Aquellos resultados que nos muestren como salidas polinomios
también serán recogidos de esta forma.
Ası́, el polinomio p(x) = 2x3 − 3x + 7 es representado por MATLAB como

>>p=[2 0 -3 7]
p =
2 0 -3 7

4.3.1 Polinomio caracterı́stico de una matriz cuadrada


La instrucción “poly(A)” nos proporciona los coeficientes del polinomio caraterı́stico (pA (λ) =
det(λI − A)) de una matriz cuadrada A.

>>M=[4 6 -2 ;2 4 10;-12 4 -3]


M =
4 6 -2
2 4 10
-12 4 -3
>>pcM=poly(M)
pcM =
1.0e+03 *

0.0010 -0.0050 -0.0840 1.0040


>>pcM=rats(poly(M))
pcM =
1 -5 -84 1004
2
La dimesión del vector fila será mayor en una unidad que el grado del polinomio.
48 CAPÍTULO 4. AUTOVALORES Y POLINOMIOS

Luego el polinomio caracterı́stico de M es

pC (λ) = λ3 − 5λ2 − 84λ + 1004

y podemos observar que el determinante de M es, salvo signo, el término independiente del
polinomio caraterı́stico de M y que el coeficiente 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 filas, la suma y diferencia de dos polinomios
se realiza con las operaciones suma y diferencia (+ y −) de matrices. Pero, téngase en cuenta
que para sumar o restar matrices éstas deben tener la misma dimensión y por consiguiente,
podemos realizar suma o diferencia de polinomios, siempre y cuando, éstos tengan el mismo
grado. Por ejemplo si p(x) = 3x3 + 2x2 − x + 1 y q(x) = −7x3 + 3x2 + 2x − 15 la suma y
diferencia de ambos se realiza como sigue:
>>p=[3 2 -1 1],q=[-7 3 2 -15]
p =
3 2 -1 1
q =
-7 3 2 -15
>>s=p+q
s =
-4 5 1 -14
>>d=p-q
d =
10 -1 -3 16
En cambio si q(x) = 3x2 + 2x − 15 la suma de ambos polinomios no puede realizarse de
forma tan simple:
>>q=[3 2 -15]
q =
3 2 -15
>>p+q
??? Error using ==> +
Matrix dimensions must agree.
4.3. TRATAMIENTO DE POLINOMIOS 49

El lector deberı́a pensar una estrategia que permita sumar o restar polinomios de grados
diferentes. La multiplicación y división 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ón “deconv” se entiende que en c
se guarda el cociente de la división 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álculo anterior se obtiene que

(x2 − 2x + 1)(x2 − x + 1) = x4 − 3x3 + 4x2 − 3x + 1

x5 − 2x4 − x3 + 7x2 − 6x + 2
El cociente y el resto de la división se calculan mediante:
x2 − 2x + 1
>>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) = x3 − 2x + 3 y r(x) = 2x − 1. Compruébese.


Incluimos en esta sección una función que nos parece bastante interesante. Se trata de
la función “residue” que nos proporciona, a grandes rasgos, la descomposición en fracciones
simples de una función racional cuyo denominador posee raı́ces reales simples. De esta forma,
la instrucción “[a,r,k]=residue(p,q)” obtiene la descomposición

P (x) a1 an
= + ···+ + k(x)
Q(x) x − r1 x − rn

y almacena las constantes ai en el vector a, las raı́ces ri en el vector r y el polinomio k(x) en


el vector fila k.
2
Por ejemplo, la descomposición en fraciones simples de x2x−1 viene dada por:
50 CAPÍTULO 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,

x2 −0.5 0.5
= + +1
x2 − 1 x+1 x−1

La función “residue” actúa 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 función racional que tiene como descomposición 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 Raı́ces de polinomios


Si el polinomio p(x) ha sido introducido en un vector p de la forma descrita anteriormente,
las raı́ces (complejas) de p(x) pueden ser calculadas con la orden “roots(p)”. Las raı́ces de p,
que pueden estar repetidas, se almacenarán en un vector columna.
Por ejemplo, las soluciones de la ecuación x2 − 1 = 0 se obtiene fácilmente:

>>p=[1 0 -1]
p =
1 0 -1
>>rp=roots(p)
rp =
-1
1

Si el polinomio posee raı́ces complejas MATLAB también nos las proporciona. Las raı́ces
de q(x) = x3 − 2x2 + 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


función “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 también evaluarse el valor del polinomio en una serie de puntos, sin más que
introducir estos puntos en un vector x y teclear la orden anterior. Los valores de r(x) =
x2 − 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 raı́ces de un polinomio está basado
en la función “compan(p)” que determina la matriz compañera del polinomio p; esto es, la
52 CAPÍTULO 4. AUTOVALORES Y POLINOMIOS

matriz cuyo polinomio caracterı́stico es, salvo constante multiplicativa, el polinomio dado.
Por ejemplo, la matriz compañera del polinomio p(x) = 2x2 − 2x + 4 es:

>>p=[2 -2 4]
p =
2 -2 4
>>A=compan(p)
A =
1 -2
1 0

y su polinomio caracterı́stico es proporcional a p:

>>pA=poly(A)
pA =
1 -1 2

Una vez que MATLAB obtine la matriz compañera de un polinomio p, con ayuda de
la función “eig”, calcula los autovalores de la misma, que, coinciden, naturalmente, con las
raı́ces 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 Aproximación por polinomios en el sentido de los mı́nimos cuadrados


Dados dos vectores x e y, de la misma dimensión, la instrucción “polyfit(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 (xi , yi ), i = 1, . . . , n + 1.
Vamos a aplicar la función “polyfit”a la resolución del siguiente problema:

En un experimento para determinar la capacidad de orientación se coloca a un


individuo en una habitación especial y después 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 habitación (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 tardarı́a en salir del laberinto una persona
que ha permanecido en la habitación 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 mı́nimos cuadrados, viene dada
por la ecuación y = 159/350x + 67/75 y el tiempo estimado para salir del laberinto después
de diez horas en la habitación 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ón se puede obtener calculando el polinomio de interpolación de los
puntos (xi , yi ) para i = 1, . . . , 6. Esto se consigue con la siguientes instrucciones:

>>poliinterp=polyfit(x,y,5)
poliinterp =
0.0125 -0.2250 1.5542 -5.2250 9.0833 -4.4000
>>rats(poliinterp)
ans =
1/80 -9/40 373/240 -209/40 109/12 -22/5
54 CAPÍTULO 4. AUTOVALORES Y POLINOMIOS

Aproximacion por minimos cuadrados


7

5
Tiempo en el laberinto

0
1 2 3 4 5 6 7 8 9 10
Tiempo en la habitacion

Figura 4.1: Recta de regresión

>>estimado2=polyval(poliinterp,10)
estimado2 =
118.1000

Es decir, el polinomio de interpolación tiene por ecuación y = 1/80x5 −9/40x4 +373/240x3 −


209/40x2 +109/12x−22/5 y el tiempo estimado son 118.1 minutos3 . La recta de mejor aprox-
imación puede contemplarse en la siguiente figura, que ha sido realizada con MATLAB. (En
el capı́tulo dedicado a las posibilidades gráficas aprenderemos a generarla).

4.3.5 La orden polyvalm y semejantes


En la subsección anterior hemos visto como MATLAB puede propocionarnos el valor de
un polinomio p en una cierta colección de puntos gracias a la función “polyval”. Pues bien
si p(x) = cn xn + cn−1 xn−1 + · · · + c1 x + c0 , el valor de p en la matriz A, i.e., p(A) =
cn An + cn−1 An−1 + · · · + c1 A + c0 puede obtenerse con la función “polyvalm(p,A)”.

>>p=[1 2 -1]
p =
1 2 -1
>>A=[1 2;-1 1]
A =
1 2
-1 1
3
Obsérvese 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 afirma que el polinomio


caracterı́stico de una matriz se anula en dicha matriz. (Téngase 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ólo


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 raı́z
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

Nótese 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ÍTULO 4. AUTOVALORES Y POLINOMIOS

ans =
1.0000 + 0.0000i 2.0000 + 0.0000i
-1.0000 + 0.0000i 1.0000 - 0.0000i

No sólo las anteriores funciones pueden ser evaluadas matricialmente, sino que cualquier
función elemental puede ser evaluada en una matriz. Esto se consigue con la ayuda de la
función de MATLAB “funm(A,‘función’)” que determina el valor de “función” 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
Capı́tulo 5

Posibilidades gráficas

A continuación detallamos algunas de las posibilidades de representación gráfica que nos


ofrece MATLAB. Como siempre recomendamos una viva lectura del manual para una visión
más extensa de las posibilidades de visualización gráfica.

5.1 Gráficos en el plano


5.1.1 Poligonales y curvas
La curva más simple que podemos dibujar es una poligonal. Para ello, basta introducir un
vector M y teclear “plot(M)”; esto produce la representación de la poligonal que une los
puntos (i, M (i)), i = 1, . . . , max(size(M )). La figura 5.1 recoge esta poligonal.
>> M=[2 4 6 -2 0];
>> plot(M)
Podemos poner un tı́tulo a la gráfica y etiquetas a los ejes mediante las instrucciones:
>> title(’POLIGONAL’)
>> xlabel(’eje de abcisa’)
>> ylabel(’eje de ordenada’)
Para obtener un mallado del gráfico tecleamos
>> grid

De manera análoga, si introducimos dos vectores x e y, de la misma dimensión, la in-


strucción “plot(x,y)” nos proporcionará la gráfica que se obtiene al unir los puntos (x(i),y(i)).
En la figura 5.2 representamos la curva y = x2 para x ∈ [−3, 4] con este procedimiento.
>> x=-3:.1:4;
>> px=x.^2-1;
>> plot(x,px),title(’PARABOLA’),gtext(’Figura 5.2’)
>> grid

57
58 CAPÍTULO 5. POSIBILIDADES GRÁFICAS

POLIGONAL
6

4
eje de ordenada

-1

-2
1 1.5 2 2.5 3 3.5 4 4.5 5
eje de abcsisa

Figura 5.1: Una poligonal

PARABOLA
16

14

12

10
Figura 5.2
8

-2
-3 -2 -1 0 1 2 3 4

Figura 5.2: Una parábola


5.1. GRÁFICOS EN EL PLANO 59

PARÁBOLA
3

2.5

1.5

0.5

-0.5

-1
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Figura 5.3: Cambio en los ejes

La orden “gtext(‘texto’)” permite situar el texto entre comillas en cualquier punto de


un gráfico bidimensional, pues tecleando “gtext(‘texto’)” después de realizar un gráfico nos
aparecerá éste en pantalla y el vector puntero de nuestro ratón. Seguidamente situamos el
puntero donde queramos poner el texto y pulsamos, por último, el botón del ratón para
disponer el texto en el lugar elegido.
Para modificar la escala de los ejes en los que se representa el gráfico (bidimensional)
podemos utilizar “axis([xmin xmax ymin ymax])” para definir 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 figura 5.2 (ver figura 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 lı́nea 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 lı́nea y/o el color elegidos.
También podemos dibujar simultáneamente varias curvas con una instrucción de la forma

plot(x1,y1,’simb1’,x2,y2,’simb2’,...,xN,yN,’simbN’)

que mostrará en pantalla todas las curvas (xI,yI) (con la opción ’simbI’) en único gráfico.
En la figura 5.4 se ilustra el uso conjunto de estas dos últimas posibilidades.
60 CAPÍTULO 5. POSIBILIDADES GRÁFICAS

DISTINTOS TIPOS DE LINEAS


3

2.5

1.5

0.5

-0.5

-1
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Figura 5.4: Distintos tipos de lı́nea

>> 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ódulo). Como ejemplo, en la figura 5.5 se
representa una espiral logarı́tmica:

>> th=0:.08:100;
>> R=exp(0.1*th);
>> polar(th,R)
>> title(’ESPIRAL LOGARITMICA’)

Para obtener una representación sin el sistema de referencia procederemos como se indica
a continuación:

>> clf
>> axis off
5.1. GRÁFICOS EN EL PLANO 61

ESPIRAL LOGARITMICA
90
2.5e+004
120 60
2e+004

1.5e+004
150 30
1e+004

5000

180 0

210 330

240 300
270

Figura 5.5: Espiral logarı́tmica

>> hold on
>> polar(th,R)
>> title(’ESPIRAL LOGARITMICA’)
>> hold off
La orden “clf” limpia la pantalla gráfica. El comando “axis off” desactiva los ejes del
gráfico que nos disponemos a realizar. La orden “hold on” hace que se superpongan en dicha
ventana todos los gráficos que se dibujen a continuación. La orden “hol off” anula “hold
on”. La utlización de estas dos ordenes reviste interés, además de en este caso concreto, en
aquellos casos en los que interese visualizar simultáneamente distintas gráficas en una misma
figura.

5.1.3 Curvas en paramétricas


El siguiente ejemplo ilustra la representación de una curva dada mediante sus ecuaciones
paramétricas.
>> 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ÍTULO 5. POSIBILIDADES GRÁFICAS

ESPIRAL LOGARITMICA

Figura 5.6: Espiral sin ejes

EPICICLOIDE
6

-2

-4

-6
-6 -4 -2 0 2 4 6

Figura 5.7: Curva en paramétricas


5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 63

60

50

40

30

20

10

0
-4 -3 -2 -1 0 1 2 3 4 5 6

Figura 5.8: Diagrama de barras

5.1.4 Histogramas y diagramas de barras


En esta brevı́sima sección estudiaremos dos formas más de representación bidimensional: las
órdenes “bar(x,y)” y “stairs(x,y)” que producen diagramas de barras de distintos tipos. Ver
figuras 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 superficies


5.2.1 Curvas en paramétricas
La representación de una curva en el espacio dada mediante sus ecuaciones paramétricas 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ÍTULO 5. POSIBILIDADES GRÁFICAS

60

50

40

30

20

10

0
-2 -1 0 1 2 3 4

Figura 5.9: Escalera

HELICE

35
30
25
20
15
10
5
0
1
0.5 1
0 0.5
0
-0.5 -0.5
-1 -1

Figura 5.10: Curva en el espacio


5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 65

EL SOMBRERO

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
10
5 Superficie 10
0 5
0
-5 -5
-10 -10

Figura 5.11: Una curiosa superficie

5.2.2 Superficies
Para representar una función Z = f (x, y) procedemos como sigue:

1. Definimos 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 función de x e y.

3. Dibujamos la superficie mediante la opción “mesh(x,y,z)” o “mesh(z)”. Con la primera


orden se tienen en cuenta los intervalos definidos para las variables independientes, pero
con las segunda no.

La figura 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 superficie desde otros puntos de vista no tenemos más que elegir los
1
También exite la orden “text(x,y,‘texto’)” para gráficos bidimensionales
66 CAPÍTULO 5. POSIBILIDADES GRÁFICAS

ángulos de giro en horizontal y vertical que queremos aplicar a la figura. Conseguimos la


figura girada tecleando, a continuación de “mesh(x,y,z)”, la orden “view(al,el)”, siendo “al”
y “el” los ángulos elegidos.
La pantalla gráfica puede ser dividida en varios trozos en los que se pueden realizar
distintos gráficos. Esto se consigue mediante una instrucción del tipo “subplot(ijk)” seguida
de una orden de dibujo: la pantalla gráfica quedará dividida en i × j trozos y nuestro dibujo
aparecerá en el k-ésimo.
La figura 5.12 combina las órdenes “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 lı́neas de contorno de una superficie, las curvas de nivel y
vectores gradiente.Esto se ilustra en los siguientes ejemplos:
2 2
En primer lugar dibujamos en la figura 5.13 la superficie de ecuación z = xe−x −y ,
utilizando “mesh(x,y,z)”

>>[x,y] = meshgrid(-2:.1:2);
>> z = x .* exp(-x.^2 - y.^2);
>> mesh(x,y,z)
>>title(’SUPERFICIE’)

Para obtener las lı́neas de contorno escribiremos “contour3(x,y,z)”

>> contour3(x,y,z)
>> title(’Lineas de contorno’)

Para obtener las curvas de nivel “contour(x,y,z)”

>> contour(x,y,z)
>> title(’Curvas de nivel’)

Si quisieramos identificar las curvas de nivel deberı́amos 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áfica simultánea de la superficie y de las curvas de nivel utilizaremos


“meshc(x,y,z)”
5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 67

1
1
0.5
0.5

0
0
-0.5
-10 10
-0.5 0 0
-10 0 -10
10 0 10 10 -10

1
1
0 0
-1
-1 -10 10
-10 10
0 0
0 0
10 -10 10 -10
Figura 5.12: Distintos tipos de vista
68 CAPÍTULO 5. POSIBILIDADES GRÁFICAS

SUPERFICIE

0.5

-0.5
2
1 2
0 1
0
-1 -1
-2 -2

2 −y 2
Figura 5.13: z = e−x

Lineas de contorno

0.4

0.2

-0.2

-0.4
2
1 2
0 1
0
-1 -1
-2 -2

Figura 5.14: Representación realizada con contour3


5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 69

Curvas de nivel
2

1.5

0.5

-0.5

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Figura 5.15: Utilización del comando contour

Curvas de nivel
2

1.5

1 -0.1
0.3
0.5
-0.4
-0.3
0.4
0

-0.5 0.2
-0.2
-1 0.1

-1.5
0
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Figura 5.16: Con clabel se etiquetan las curvas nivel


70 CAPÍTULO 5. POSIBILIDADES GRÁFICAS

Superficie y curvas de nivel

0.5

-0.5
2
1 2
0 1
0
-1 -1
-2 -2

Figura 5.17: Gráfica 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 órdenes
“gradient” y “quiver”. Esta última orden visualiza un vector cuyas componentes vienen dadas
por “gradient”

>> [x,y] = meshgrid(-2:.1:2);


>> z = x .* exp(-x.^2 - y.^2);
>> [px,py] = gradient(z,.1,.1);
>> contour(x,y,z);
>> hold on, quiver(x,y,px,py), hold off
>> title(’Curvas de nivel y gradiente’)

En el siguiente ejemplo se dibujan las curvas de nivel identificándolas con la opción “man-
ual” de la orden “clabel”. Utilizando dicha opción nos situamos en la vantana gr’áfica y
pulsamos el ratón encima de la curva que deseemos, seguidamente aparecerá junto a ella el
número 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

Curvas de nivel y vector gradiente


2

1.5

0.5

-0.5

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Figura 5.18: Utilización de quiver

>> hold on, quiver(x,y,px,py), hold off


>>title(’Curvas de nivel y gradiente’)

Para gráficos tridimensionales las utilización de “axis” es similar al caso bidimensional.


Para trabajar con distintas figuras simultáneamente, en distintas ventanas, se utilizará la
orden “figure(n)”.
72 CAPÍTULO 5. POSIBILIDADES GRÁFICAS

Curvas de nivel y vector gradiente


2

1.5
-0.1 0.1
1 0.2
0.3
0.5
-0.2
-0.4
0
0.4
-0.3
-0.5

-1

-1.5

-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Figura 5.19: El comando clabel con la opción manual


Capı́tulo 6

Funciones y programas en Matlab.


M—Ficheros

6.1 Instrucciones en Matlab: input, if, error, while, break,


pause, for . . .
En este apartado exponemos el manejo de ficheros y funciones dentro de una sesión de
MATLAB. Esta caracterı́stica es particularmente interesante, ya que nos permitirá definir
nuevas funciones: que podrán ser utilizadas posteriormente del mismo modo que aquellas de
que disponemos en MATLAB; y crear lo que podemos llamar programas, que se ejecutarán
dentro de una sesión.
Los ficheros que podemos editar para su utilización desde MATLAB serán ficheros de
texto en ASCII, creados por un editor que queda a nuestra elección. La extensión de estos
ficheros será .m.
Como hemos advertido los ficheros.m (o M—ficheros) pueden crearse con dos finalidades:

1. Para crear ficheros de escritura o programas.

2. Para definir funciones por parte del usuario.

Los ficheros de escritura o programas son ficheros del tipo “nombre.m” que contienen una
sucesión de instrucciones de MATLAB. Al teclear dentro de una sesión el nombre del fichero
se produce la ejecución secuencial de todas las instrucciones en él contenidas. Estos archivos
pueden ser utilizados de dos formas:

• Como ficheros de datos.

• Como programas.

Por ejemplo, si el M—fichero “matrices.m” contiene

73
74 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS

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 podrán ser utilizadas en la sesión como si hubieran sido definidas de manera
explı́cita. Naturalmente, esto resulta interesante, entre otras cosas, si vamos a trabajar con
una matriz suficientemente grande en distintas sesiones de MATLAB.
Al disponer MATLAB de instrucciones del tipo IF, WHILE y FOR (análogas a las que
podemos encontrar en lenguajes de programación como FORTRAN o PASCAL) si un M—
fichero “nombre.m” contiene una sucesión de instrucciones de este tipo que describen una
cierta tarea, al teclear dentro de una sesión el nombre del fichero, dichas instrucciones se
ejecutarán secuencialmente dando un resultado similar a la ejecución de un programa por un
intérprete.
Antes de continuar describiremos las instrucciones “if”, “while” y “for” anteriormente
mencionadas y algunas otras que resultan útiles en este contexto. Para ello comentaremos,
dentro de un ejemplo concreto, el uso y posibilidades de estas órdenes.
El fichero “bg.m” contiene:

%BG: Metodo de biseccon o dicotomia.


% El programa BG resuelve la ecuacion g(x)=0 (para una funcion
% g que debe estar definida en un archivo.m) por el metodo
% de dicotomia (o biseccion).

gc=0;
c=0;
disp(’Deme el extremo inferior del intervalo’)
a=input(’a= ’);
disp(’Deme el extremo superior del intervalo’)
b=input(’b= ’);
if b<=a
error(’Intervalo degenerado’)
end
disp(’Introduzca el nombre del archivo donde se encuentra la funcion’)
g=input(’nombre de funcion= ’,’s’);
6.1. INSTRUCCIONES EN MATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR . . .

disp(’Deme el valor del test de parada’)


ep=input(’ep= ’);
if ep<=0
error(’El test de parada debe ser >0’)
end
if feval(g,a)==0
solucion=a
return
end
if feval(g,b)==0
solucion=b
return
end
if feval(g,a)*feval(g,b)>0
error(’El intervalo podria no contener solucion’)
end
i=0;
while b-a>=ep
i=i+1;
c(i)=(a+b)/2;
gc(i)=feval(g,c(i));
if gc(i)==0
disp(’La solucion se ha obtenido en uno de los puntos medios’)
disp(’de los subintervalos’)
solucion=c(i)
return
end
if feval(g,a)*gc(i)<0
b=c(i);
else
a=c(i);
end
end
d=(a+b)/2;%Cuando hemos conseguido la tolerancia dada en ep,
%tomamos como solucion el punto medio del intervalo.
solucion=d
disp(’El numero de iteraciones es:’)
i
iop=menu(’Desea la representacion grafica de las Aproximaciones’,...
’Si’,’No’);
if iop==1
76 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS

plot(gc)
grid
title(’Representacion grafica de la aproximacion’)
end

Las primeras lı́neas del programa “bg” son lı́neas de comentario. Si en una lı́nea aparece
el caracter “%”, todo lo que escribamos en esa lı́nea a continuación del tanto por ciento será
interpretado como un comentario y no se evaluará.
La lı́nea,

disp(’Deme el extremo inferior del intervalo’)

hace que el programa disponga en pantalla el texto escrito entre las comillas. (La función
“disp(matriz)” hace que la matriz1 aparezca en pantalla).
La orden:

a=input(’a= ’);

detiene momentáneamente la ejecución del programa, mostrando en pantalla a=, esperando


la introducción de un dato numérico que será asignado a la variable “a”. La opción

g=input(’nombre de funcion= ’,’s’);

detiene el programa a la espera de la introducción de una cadena de caracteres, que se asignará


a la variable g.
La instrucción “feval(g,a)” nos da el valor númerico de la función “g” en el punto “a”. La
variable “g” debe contener, como cadenas de caracteres, el nombre del fichero que contiene
la definición de la función que deseamos aplicar sobre “a”. Por ejemplo, sen(1/2) y log(−1)
se pueden obtener con ayuda de la función “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
Recuérdese que una matriz puede estar formada por cadena de caracteres.
6.1. INSTRUCCIONES EN MATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR . . .

actúa de la siguiente manera:


si la condición “feval(g,a)*gc(i)<0” se satisface, entonces la variable “b” toma el valor “c(i)”,
en caso contrario “a” tomará el valor “c(i)”.
La estructura general de un bloque IF es la siguiente:

if condición1
instrucciones1
elseif condición2
instrucciones2
.
.
.
else instruccionesN end
y actúa de la siguiente forma:
Si “condición1” se satisface se ejecutarán solamente las “instrucciones1”, si por el contrario
se satisface “condición2” sólo las “instrucciones2”se ejecutarán, . . . . Si ninguna de estas
condiciones es satisfecha se ejecutará sólo el bloque “instruccionesN”. Las condiciones que
aparecen en un bloque IF son expresiones del tipo: “expresión1 S expresión2”, donde S puede
ser: == (igual), <, >, <=, >= y ∼ = (distinto), incluidos los operadores lógicos & (y), | (o),
∼ (No) y las funciones lógicas que se encuentran en los cuadros—resumen del último capı́tulo.

La orden

error(‘texto’)

detiene definitivamente la ejecución 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áciles de entender. La estructura general es:
while condición
instrucciones
end
78 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS

lo que provoca la ejecución de las instrucciones detalladas mientras la condición se verifique.


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ón “return” detiene por completo la ejecución del programa. En nuestro


ejemplo se ha utilizado para romper el programa cuando la solución es trivial (i.e., algunos
de los extremos del intervalo) o se ha alcanzado la solución exacta en los puntos medios de
los subintervalos.
Una vez que el flujo del programa llega a la a instrución

iop=menu(’Desea la representacion grafica de las Aproximaciones’,...


’Si’,’No’);

aparece en pantalla2 el siguiente menú:

----- Desea la representacion grafica de las Aproximaciones -----

1) Si
2) No

Select a menu number:

y el programa se detiene momentáneamente a la espera de introducir uno de los valores


de opción. Si introducimos el valor 1, entonces la variable “iop” tomará el valor 1 y la
representación se llevará a cabo, debido a la inclusión en el programa del bloque:
2
Si utilizamos MATLAB en un entorno de ventanas aparecerá una ventana con botones de opción.
6.1. INSTRUCCIONES EN MATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR . . .

if iop==1
plot(gc)
grid
title(’Representacion grafica de la aproximacion’)
end

Si por el contrario seleccionamos el número 2, la representación no se realizarı́a.


Si se desea interrumpir por un momento el programa (por ejemplo, para comprobar
algunos datos) incluimos en él la orden “pause” que lo detendrá hasta que alguna tecla
sea pulsada. También disponemos de la opción “pause(n)” que lo detiene por n segundos.
Para terminar comentamos los bucles FOR. La estructura de uno de estos bucles es:

for expresión
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 último, señalamos que los programas en MATLAB, como el programa “bg”, no
poseen variables internas al mismo. Esto es, cualquier variable definida en el programa pasa,
automáticamente, a formar parte de las variables del espacio de trabajo. Por consiguiente, si
en una sesión definimos la variable a como:

>>a=[1 2;2 4]
a =
1 2
2 4

y seguidamente calculamos la solución de log x = 0 en [1/2, 3] con la ayuda de “bg”:


80 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS

>>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
método de bisección:
>>format long
>>a
a =
0.99999237060547
Si las variables definidas 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 definidas en él. Por ejemplo, podemos saber cual es el valor de
“c(9)” en el programa “bg”:
>>c(9)
ans =
1.0029
6.2. DEFINICIÓN DE FUNCIONES 81

6.2 Definición de funciones


Podemos utilizar M—ficheros para definir nuevas funciones no incorporadas al conjunto de
funciones MATLAB.
Si queremos definir una función fun(x1,...,xN)=[y1,...,yM] con N matrices como argumen-
tos de entrada y M matrices como argumentos de salida crearemos un M—fichero de nombre
“fun.m” (es esencial la correspondencia entre el nombre de la función y el del fichero) cuya
primera lı́nea debe ser

function [y1,...,yM]=fun(x1,...,xN)

y las restantes contendrán la propia definición de la función fun(x1,...,xN).


Por ejemplo, si el fichero “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 sesión MATLAB introducimos un vector columna v y tecleamos “H=house(v)”


la variable H tomará como valor la matriz de Householder asociada al vector v, es decir,
t
H = I − 2 xx
xt 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

Nótese que N es una variable interna de la función “house” que no pasará a formar de
nuestro espacio de trabajo. Véase

>>N
??? Undefined function or variable.
Symbol in question ==> N
82 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS

Las primeras lı́neas de comentario definidas en el fichero “house.m” nos informan del
cometido de la función “house(x)”. Ası́, con ayuda de la orden “help” podemos obtener
información de la función “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 lı́nea de comentario se denomina lı́nea H1. La orden lookfor palabra realiza
una busqueda de palabra en la lı́nea 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 lı́neas
de comentario basta teclear la orden lookfor palabra -all.
Para acabar este capı́tulo recordamos que algunas funciones de MATLAB pueden ser
ejecutadas con distintos argumentos de entrada y distintos argumentos de salida y que esta
caracterı́stica estaba ı́ntimamente ligada con las variables “nargin” (número de argumentos de
entrada) y “nargout” (número de argumentos de salida). Pues bien, como no podı́a ser menos,
cualquier función creada por el usuario puede poseer esta caracterı́stica si ası́ lo explicitamos
en la definición de nuestra función. Para ver esto nos creamos la función “numero” que nos
darán el número de argumentos de entrada y el número de argumentos de salida cuando
realizamos una llamada a la función “numero”.
El fichero “numero.m” contiene:

function [y1,y2,y3,y4,y5,y6,y7,y8,y9,y10]=numero(x1,x2,x3,x4,x5,...
x6,x7,x8,x9,x10)
%NUMERO: Numero de argumentos de entrada y salida
%Esta funcion nos proporciona el numero de argumentos de entrada
%y salida. Como maximo podemos dar diez argumentos de entrada y diez
%de salida.
y1=nargin;
y2=nargout;

De esta forma si teclamos

>>[a,b,c,d]=numero(1,2,[1 2],sqrt(1),4)

las variables a y b contendrán el número de argumentos de entrada y de salida, respecti-


vamente, en la llamada a la función “numero”. Véase

a =
5
b =
4
c =
6.2. DEFINICIÓN DE FUNCIONES 83

[]
d =
[]

Observamos ası́ que cuando realizamos la llamada a una función MATLAB, automáticamente
se determinan el número de argumentos de entrada y el número de argumentos de salida de
la llamada efectuada.
Por ejemplo, podemos crearnos una función 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úmeros. Llamamos a esta función “sumpro” y está definida como:

function y=sumpro(x1,x2,x3)
%SUMPRO: Suma o producto
%La funcion sumpro nos proporciona la suma de dos numeros si
%introducimos dos argumentos de entrada y el produto de tres
%numeros, si son tres los argumentos de entrada.
na=nargin;
if na==1,
error(’No hay bastantes argumentos de entrada’)
elseif na==2
y=sum([x1 x2]);
else
y=prod([x1 x2 x3]);
end

Se pueden presentar las siguientes situaciones:

>>sumpro(2)
??? Error using ==> sumpro
No hay bastantes argumentos de entrada

>>sumpro(1,2)
ans =
3
>>sumpro(1,2,5)
ans =
10
>>sumpro(1,2,3,4)
??? Error using ==> sumpro
Too many input arguments.
Capı́tulo 7

Aspectos de análisis numérico

En esta sección comentaremos, de forma breve, como Matlab puede ser utilizado para re-
solver los problemas que con más frecuencia se pueden encontrar en el campo del Análisis
Numérico: sistemas de ecuaciones (no lineales), integración, optimización y ecuaciones difer-
enciales.
Sólo vamos a comentar las versiones básicas de estas órdenes, que poseen numerosas
variantes. Como siempre recomendamos una lectura a fondo del manual.

7.1 Resolución de Ecuaciones y Sistemas no Lineales


1. Ecuaciones:
Imaginemos que queremos resolver la ecuación g(x) = 0 y además que hemos podido
averiguar que una de las soluciones de tal ecuación está cercana al punto x0 . Entonces,
la orden “fzero(‘g’,x0)” nos proporciona la raı́z de g más próxima a x0 .
Señalamos que la función g debe estar introducida en un fichero denominado g.m. Por
ejemplo, para g(x) =sen(x2 ) − 3x + 1 (ver figura 7.1) se tiene:
>>format long e
>>solucion=fzero(’g’,0)
solucion =
3.817356369038296e-001
que nos da la solución más cercana a cero de sen(x2 ) − 3x + 1 = 0

2. Sistemas:
Para resolver un sistema de ecuaciones (no lineal1 ), como por ejemplo, (ver figura 7.2)
x2 + y 2 − 1 = 0
x−y =0
1
La orden fsolve ha pasado a formar parte del la caja de herramientas de optimización.

84
7.2. INTEGRACIÓN NUMÉRICA 85

definimos la función dim2(X, Y ) = (X 2 + Y 2 − 1, X − Y )mediante el fichero “dim2.m”


que contiene:
function y=dim2(p)
x=p(1);z=p(2);
y=zeros(2,1); % Es esencial
y(1)=xˆ2+zˆ2-1;
y(2)=x-z;
y tecleando:
>>sol1=fsolve(’dim2’,[1 1]’)
sol1 =
7.071078431372548e-001
7.071078431372548e-001
obtenemos la solución del sistema más próxima al punto del plano (1, 1). Pero obsérvese
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ón numérica


La integral definida de la función 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)” (Newton—Cotes)

Ası́, para la función anterior se tiene:

>>area=quad(’g’,-1,0)
area =
2.810248532388182e+000
>>area=quad8(’g’,-1,0)
area =
2.810268301723342e+000
86 CAPÍTULO 7. ASPECTOS DE ANÁLISIS NUMÉRICO

Resolucion y minimizacion
1
cero
0

-1

-2

-3

-4

-5

-6

-7 minimo

-8
0 0.5 1 1.5 2 2.5 3

Figura 7.1: g(x) = sen (x2 ) − 3x + 1

Interseccion de una recta y una circunferencia


1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-1 -0.5 0 0.5 1

Figura 7.2: Intersección de y = x con x2 + y 2 = 1


7.3. OPTIMIZACIÓN EN UNA Y VARIAS VARIABLES 87

7.3 Optimización en una y varias variables


Si queremos calcular el mı́nimo de la función 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 mı́nimo de g (véase la
figura 7.1). Para funciones de varias variables disponemos de la orden “fmins(‘f’,x0)” que
calcula el mı́nimo de la función f más cercano al punto x0 .(En la versión 4.2c ’fmins’se incluye
en el toolbox dde optimización). Por ejemplo, la función
−4x
z=
x2 + y 2 + 1
alcanza su valor mı́nimo en el punto (1, 0), donde vale −2 (ver figura 7.3). Esto puede
−4x
calcularse si definimos f (x, y) = 2 en el archivo maximini.m y teclemos las órdenes
x + y2 + 1
>>mini=fmins(’maximini’,[0,0.5]’)
mini =
0.9999
0.0001
>>maximini(mini)
ans =
-2.0000
El archivo maximini.m contiene
function z=maximini(p)
x=p(1);y=p(2);
z=zeros(1,1);
z=(-4*x)./(x.^2+y.^2+1);

7.4 Resolución de Ecuaciones Diferenciales Ordinarias


Describamos con un ejemplo como proceder:
Deseamos resolver el problema de Cauchy (o problema de valor inicial)
x0 = cos(t)x en [0, 3]
x(0) = 1
Para ello se define la función “dife(t,x)” (en el archivo “dife.m”) que representa la ecuación
diferencial
88 CAPÍTULO 7. ASPECTOS DE ANÁLISIS NUMÉRICO

1.5

0.5

-0.5

-1

-1.5

-2
-2 2
-1 1
0 0
1 -1
2 -2

Figura 7.3: Optimización 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ón 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ÓN DE ECUACIONES DIFERENCIALES ORDINARIAS 89

2.8

2.6

2.4

2.2

2
x

1.8

1.6

1.4

1.2

1
0 0.5 1 1.5 2 2.5 3
t

Figura 7.4: Solución 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 figuras 7.4 y 7.5 pueden contemplarse la solución aproximada ofrecida por MAT-
LAB y la solución exacta, respectivamente. Nótese que la solución exacta es x(t) = esent .

La función “ode23” resuelve ecuaiones diferenciales numéricamente por métodos de Runge—


Kutta de segundo y tercer orden, pero podemos resolver la ecuación con más aproximación
si utilizamos la función “ode45”, pues de esta forma estamos utilizando métodos de Runge—
Kutta de cuarto y quinto orden.
Un buen ejercicio para el lector serı́a representar las gráficas que aparecen en este capı́tulo
que, naturalmente, han sido realizadas con MATLAB.
90 CAPÍTULO 7. ASPECTOS DE ANÁLISIS NUMÉRICO

2.8

2.6

2.4

2.2

2
x

1.8

1.6

1.4

1.2

1
0 0.5 1 1.5 2 2.5 3
t

Figura 7.5: Solución exacta: x(t) = e sen t


Capı́tulo 8

Consejos prácticos

En este capı́tulo 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 capı́tulo ya han sido tratadas en los anteriores, pero estamos conven-
cidos que resultará beneficioso darles un ligero repaso.

8.1 Las órdenes help, lookfor y demo


Si tecleamos “help ncof”, siendo ncof el nombre de un comando o función disponible en
MATLAB, obtendremos una breve información sobre dicho comando o función. Si ncof
ha sido creado por el usuario aparecerá en pantalla el bloque de comentarios incluido en
las primeras lı́neas del fichero que define la función o cmando ncof. Por ejemplo, para el
programa “bg”, definido en el capı́tulo 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ún la versión de MATLAB de la


que hagamos uso, una colección de las funciones y comandos que podemos utilizar. Nótese
que, si la funciones definidas por el usuario aparecen en la ruta de acceso de MATLAB,
éstas también podrán visualizar en la colección 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ÍTULO 8. CONSEJOS PRÁCTICOS

Estamos convencidos que un primer contacto con MATLAB debe ser la visualización 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á, dependiendo de la versión utilizada, un menú con distintas opciones;
recomendamos que se visualicen todas, la primera vez que utilizamos MATLAB.
En versiones más actuales la orden “intro” nos da un breve resumen de las capacidades
de MATLAB. También recomendamos se haga uso de esta orden, al menos la primera vez
que hacemos correr MATLAB.

8.2 Información 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 información sobre las variables que estamos utilizan-
do en la sesión:

• “who” nos proporciona una todas las variables que tenemos en memoria. La
variante “whos” nos da información 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 gráficos.
• “’shg” nos muestra el contenido actual de la pantalla gráfica.

3. Instrucciones para eliminar variables, salvarlas o cargarlas de un fichero.


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 más memoria dentro de una
sesión. 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 sesión, almacenándolas en un fichero “nombre.mat”, mediante el comando “save
nombre”, o alguna de sus variantes. Si deseamos usar las variables que previamente
hemos salvado en un fichero “nombre.mat”, teclearemos “load nombre” y las variables
que se encuentran en nombre.mat serán cargadas en el espacio de trabajo.
También podemos salvar nuestras variables en archivos ASCII, para ello utilizamos
algunas de las siguientes posibilidades:
8.3. RELACIÓN CON EL SISTEMA OPERATIVO. EL COMANDO DIARY 93

• “save nombre a /ascii” que guardará en un fichero ascii la variable a en simple


precisión, i.e., con 8 cifras significativas.
• “save nombre a /ascii /double” que almacena la variable a en doble precisión.

De la misma forma que podemos salvar variables en un archivo ASCII, también podemos
cargar, en una sesión MATLAB, variables almacenadas en un archivo ASCII. Esto
podemos conseguirlo1 tecleando “load nombre”; ası́ obtendremos una variable llamada
“nombre” con el contenido del archivo de la misma denominación.

8.3 Relación con el sistema operativo. El comando diary


Al igual que en MS—DOS en MATLAB disponemos de los comandos “dir”, “delete”, “type”
y “chdir” con los mismos cometidos. En cualquier caso si tecleamos ! nos situaremos mo-
mentáneamente en el sistema operativo; de esta manera, cualquier instrucción que contenga
como primer caracter ! será interpretada como una orden del sistema. Ası́, una alternativa
a la orden de MATLAB “chdir directorio” es la instrucción “!cd directorio”.
La instrucción “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 programación. Por ejemplo, el número de condición de una matriz se calcula
mediante la versión 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ÍTULO 8. CONSEJOS PRÁCTICOS

end
y = max(s)./min(s);

La opción “diary nombre.m” tecleada dentro de una sesión, hará que todo cuanto aparez-
ca en pantalla a partir de esta lı́nea sea almacenado en el archivo “nombre.m”, hasta que
anulemos este comando mediante la instrucción “diary off”.
Recordamos que para las funciones, las variables definidas en ella (i.e., internas) no pasan
a forma parte del espacio de trabajo y que lo contrario sucede para los M—Ficheros que se
ejecutan en forma de programas.
Por último, invitamos al lector a investigar la utilidad del comando “echo” y sacarle todo
el partido posible.
Capı́tulo 9

Resumen de los comandos y


funciones más utilizados

En este capı́tulo presentamos, en forma de cuadros, un resumen de los comandos y fun-


ciones que con más frecuencia se utilizan en MATLAB. Para la realización de los “cuadros—
resúmenes” se ha intentando, en la medida de lo posible, seguir el ı́ndice de materias de los
capı́tulos anteriores. Naturalmente, se realiza una breve descripción del comando o función
en cuestión, que puede aumentarse con ayuda de las páginas anteriores, del comando “help”
de MATLAB o del manual. Algunos de los comandos pueden aparecer repetidos en más 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ón que
estemos utilizando.

BÁSICO
help Ayuda
lookfor Busca funciones relacionadas con una palabra
who Muestra las variables del espacio de trabajo
whos Lo mismo que who, pero con más información
what Muestra archivos.m
which Muestra el directorio de un comando
Ctrl—C Interrupción
quit Salir de MATLAB
exit Salir de MATLAB
demo Demostración de MATLAB
intro Breve introducción
casesen Sensibilidad a las mayúsculas

95
96CAPÍTULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MÁS UTILIZADOS

VARIABLES PERMANENTES
eps Valor de precisión
ans Variable de respuesta cuando no hay asignación
pi π
i, j Unidad imaginaria
Inf Infinito
NaN No es un número
flops Número de operaciones
clock Fecha y hora actual
date Fecha actual
nargin Número de argumentos de entrada
nargout Número de argumentos de salida
cputime Tiempo de CPU
tic, . . . , toc Tiempo de cálculo

CARACTERES ESPECIALES
= Asignación
[, ] Creación de matrices
. Punto decimal. Operaciones elemento a elemento
... Continuación de lı́nea
; Terminación de filas. Suprime impresión de resultado
% Comentario
: Genera vectores

OPERACIONES MATRICIALES Y PUNTUALES


+ Suma
− Diferancia
∗, .∗ Multiplicación
/, ./ División derecha
\, .\ División izquierda
∧ , .∧ Potenciación
0 Transposición.
97

FUNCIONES ELEMENTALES
abs Valor absoluto o módulo angle Argumento
real Parte real imag Parte imaginaria
conj Conjugado exp Función 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 hiperbólico
cosh Coseno hiperbólico tanh Tangente hiperbólica
asinh Argumento seno hiperbólico acosh Argumento coseno hiperbólico
atanh Argumento tangente hiperbólica round Redondeo al entero más cercano
fix Redondeo hacia cero floor Redondeo hacia −∞
ceil Redondeo hacia +∞ sign Signo
rem Resto de la división sqrt Raı́z cuadrada

MATRICES ESPECIALES
compan Matriz compañera
eye Matriz identidad
gallery Matrices “famosas”
magic Matriz mágica
hilb Matriz de Hilbert
invhilb Inversa de la matriz de Hilbert
ones Matriz de unos
rand Matriz aleatoria
zeros Matriz nula

MANIPULACIÓN DE MATRICES
rot90 Rotación de 90o
tril Triangular inferior
triu Triangular superior
reshape Reordenación
fliplr Inversión en el orden de las columnas
flipud Inversión en le orden de las filas
: Bloques de Matrices
diag Diagonal
98CAPÍTULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MÁS UTILIZADOS

RESOLUCIÓN DE S.E.L. Y DESCOMPOSICIONES


\ Divsisión izquierda. Solución de S.E.L.
inv Matriz inversa
pinv Pseudoinversa
lu Descomposición LU (LR)
chol Descomposición de Cholesky
qr Descomposición QR
sdv Descomposición en valores singulares
shur Descomposición de Schur

FUNCIONES MATRICIALES
det Determinante
poly Polinomio caracterı́stico
trace Traza
eig Autovalores y autovectores
diag Diagonal
expm Exponencial matricial
logm Logaritmo matricial
sqrtm Raı́z cuadrada matricial
funm Evaluación de función matricial
polyvalm Evaluación matricial de un polinomio

TRATAMIENTO DE POLINOMIOS
roots Raı́ces de polinomios
polyval Valor númerico de polinomios
conv Multiplicación
deconv División
residue Descomposición en fracciones simples (complejas)
polyfit Ajuste de datos mediante polinomios
99

FUNCIONES Y OPERADORES LÓGICOS Y RELACIONALES


any Condiciones lógicas
all Conciones lógicas
strcomp Compara cadenas caracteres
find Detecta ı́ndices para relaciones lógicas
finite Encuentra infinitos
isnan Detecta NaN
isempty Encuentra matrices vacı́as
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úmeros en cadenas de caracteres
int2str Convierte enteros en cadenas de caracteres
sprintf Convierte números en cadenas de caracteres
hex2num Convierte cadenas hexadecimales en números

INSTRUCCIONES DE ARCHIVO
load Cargar variables de un archivo en el espacio de trabajo
save Guardar variables en un fichero
type Mostrar contenido de un archivo
cd Cambiar de directorio
delete Borrar un archivo
diary Archivar una sesión de trabajo
! Instrucción del sistema operativo
Ver también fread, fopen, . . .
100CAPÍTULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MÁS UTILIZADOS

CONTROL DE FLUJO Y PROGRAMACIÓN


if, elseif, else Bloque condicional
end Termina bloques
for, while Repetición 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 función definida por cadena de caracteres
function Define una función
global Define variables globales
echo Muestras instrucciones en pantalla
menu Genera un menú

GENERANDO GRÁFICOS
plot Gráfico bidimensional
subplot Divide la pantalla de gráficos
loglog Gráfico logaritmico
semilogx Gráfico semilogaritmico en el eje x
semilogy Gráfico semilogarı́tmico en el eje y
polar Representación en polares
meshgrid Dominio de definición de superficies
mesh Gráfico tridimensional
bar, stairs Diagramas de barras
title Tı́tulo
xlable Etiqueta en el eje x
ylabel Etiqueta en el eje y
grid Mallado
text, gtext Coloca texto en la pantalla gráfica
ginput Entrada de coordenadas desde el gráfico
axis Escalado de los ejes
view Punto de vista tridimensional
shg Muestra el contenido de la pantalla gráfica
clf Limpia la pantalla de gráficos
hold Mantiene el gráfico 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ÁLISIS NUMÉRICO
fzero Resolución de ecuaciones
quad, quad8 Integración numérica
fmin Mı́nimos en una variable
ode23, ode45 Resolución de ecuaciones diferenciales
diff Derivadas Aproximadas

ANÁLISIS DE DATOS (POR COLUMNAS)


max Máximo
min Mı́nimo
sum Suma
prod Producto
cumsum Suma acumultiva
cumpro Producto acumulativo
sort Ordena
mean Valor medio
median Mediana
std Desviación tı́pica
hist Histogramas
cov Matriz de covarianza
corrcoef Coeficientes de correlación
Capı́tulo 10

Relación de ejercicios

1. Introduce las siguientes matrices:


 
à ! à ! 1
1 2 0 0.1 −1  
A= B= C= 0 
3 4 2 3/4 5
1

 √ 
2 π −1 4 ³ ´
 
D =  32 7 0 9  E= 1 0 2 3 −1
8 −1 6 2

(a) Muestra las matrices anteriores utilizando diversos formatos de salida.


(b) Evalúa a12 , b23 , c11 , (Dt )41 y (E t )31 .
(c) Comprueba que (At )t = A.

2. Utilizando las matrices anteriores, extrae las siguientes filas o columnas:

(a) Primera fila de A.


(b) Primera fila de At .
(c) Segunda columna de B.
(d) Cuarta columna de D.
(e) Tercera columna de Dt .

3. De la siguiente relación de matrices identifica las que son simétricas o antisimétricas:


 
à ! 1 2 3
1 1  
a) b) 4 5 6 
−1 1
7 8 9
à ! à !
1 1 1 1 1
c) d)
−1 0 1 1 1

102
103

1
e) A = (aij ) ∈ M4 (R), siendo aij = i+j
1
f) A = (aij ) ∈ M4 (R), siendo aij = i2 +j
 
1 0 1
 
g)  0 2 0 
−1 0 3

4. Sea x = 2 e y = 1.
 
x 2x 3
 
(a) Introduce la matriz A =  x + y x − y x + πy 
π2 2πx x2 + y2
(b) Cambia la entrada 2πx a 2πx + 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ón la matriz


à !
1 2 3 4
A=
5 6 7 8

(a) Introduce A(1, :).


(b) Introduce A(:, 1).
(c) Introduce A(2, :).
(d) Introduce A(:, 2).
(e) Escribe los comandos que muestran la columna tercera y a continuación la cuarta.
(f) ¿Qué 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 continuación 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)
à !
1 2
8. Introduce A = y a continuación:
5 3
(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ÍTULO 10. RELACIÓN DE EJERCICIOS

9. Encuentre el complejo conjugado y el módulo de cada uno de los siguientes números


complejos:
√ √
(a)2 (b) 2i (c) −3 − i (d) ( 3 + i)( 3 − 3i)

(e) i2 (f) 3 −8 (g) (Re : (i))2 (h) eπi + 1
1−2i
(i) (1 + i)2 (j) (1 + i)−1 (k) (3 + 2i)(−4 + i) (l) −2+3i
7−6i 3−i 2
(m) 1+i · 2−9i (n) Im((1 + i) ) (o) log(2i) (p) sen(2i)

(a) eps (b) pi (c) Inf (d) 1/0


(e) 0/0 (f) 2 + NaN (g) NaN/NaN (h) Inf/Inf
10. Observe la salida:
(i) 1/Inf (j) 2 + Inf (k) Inf + 0 (l) NaN/Inf
(m) inf*inf
 
1 2 3 4 5
 6 7 8 9 10 
 
11. Introduce A =   y observa la salida:
 11 12 13 14 15 
16 17 18 19 20
(a) A(1, :) (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 = I4
 
1 1
 
(c) C= 1 1 
1 1
 
1 0 0 0 0
 
(d) D= 0 1 0 0 0 
0 0 1 0 0
 
0 1 1 1 1
 
(e) E= 1 0 1 1 1 
1 1 0 1 1
 
0 0 0 0 0
 1 0 0 0 0 
 
(f) F = 
 0 2 0 0 0 
0 0 3 0 0
105

 
0 0 0 0
 
(g) G= 1 0 0 0 
0 1 0 0
 
0 1 0
 
(h) H= 0 0 2 
0 0 0
à !
3 3 3
(i) I=
3 3 3
 
4 5 6
 
(j) J =  8 10 12 
12 15 18
 
1 1/2 1/3
 
(k) K =  1/2 1/4 1/6 
1/3 1/6 1/9
(l) La matriz de orden 5 cuyas filas 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 fila de D.


(b) Suprime la tercera columna de la matriz E.
(c) Calcula el menor del elemento k2 2.
(d) Calcula el adjunto de j13 .

14. Construye las matrices


   
2 −1 0 0 3 1 1 1
 −1 2 −1 0   1 3 1 1 
   
A=  B= 
 0 −1 2 −1   1 1 3 1 
0 0 −1 2 1 1 1 3
y calcula con ayuda de la división izquierda A−1 B, AB −1 , A−1 v, ut B −1 siendo v =
(1, 0, 0, 0) y u = (0, 1, 0, 0).

15. Resuelve los siguientes sistemas de ecuaciones



x2 + x3 + x4 = 4  

 2x1 + 3x2 + 2x3 = 9 
3x1 + 3x3 − 4x4 = 7  
x1 + 2x2 − 3x3 = 14
x1 + x2 + x3 + 2x4 = 6   

 3x1 + 4x2 + x3 = 14 
2x1 + 3x2 + x3 + 3x4 = 6
106 CAPÍTULO 10. RELACIÓN DE EJERCICIOS

16. Calcula la descomposición LU de A calculando primeramente [L, U ] = lu(A) y compro-


bando que A = LU ; y seguidamente [L, U, P ] = lu(A) confirmando que P A = LU .
 
3 1 −2 −1
 1 5 −4 −1 
 
(a) A =  
 3 1 2 3 
2 −2 2 3
 
3 2 5 4
 2 3 6 8 
 
(b) A =  
 1 −6 −9 −20 
4 1 4 1
 
4 2 4 1
 30 20 45 12 
 
(c) A =  
 20 15 36 10 
35 28 70 20
à !
0 1
(d) A =
1 0

17. Encontrar la solución, en el sentido de los mı́nimos cuadrados, del sistema


)
x1 + 2x2 + 2x3 + 3x4 = 2
x3 + 2x4 = 1

18. Encontrar la recta que mejor aproxima en el sentido de los mı́nimos 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ón sobre sum, cumsum, prod, cumprod y diff.

4 X
X k
(a) Dado a = (1, 2, 3, 4) utiliza cumsum y sum para calcular el valor de ai .
k=1 i=1
 
1 2 3 Y3 X 3
 
(b) Dada la matriz A =  4 5 6  usa sum y prod para calcular el valor aij .
7 8 9 j=1 i=1

3 Y
X 3
(c) Usa sum y prod para calcular el valor aij para la matriz de apartado b).
j=1 i=1

(d) Dada la matriz del apartado b) usa sum y cumprod para calcular el valor
Y3 X
3
aij .
j=1 i=1
107

20. Calcular An para algunos valores n enteros y positivos. Estudiar el comportamiento de


An para n “grande”.
à ! à !
0.6 0.5 0.6 0.5
a) A = b) A =
−0.18 1.2 −0.2 1.2
 
à ! 0.67 0.31 0.20
0.9 1.0  
c) A = d) A =  0.18 0.54 0.40 
0 0.9
0.15 0.15 0.40
   
0.8 0.2 0.1 0.2
   
21. Sea A =  0.1 0.7 0.3  y x0 =  0.3 
0.1 0.1 0.6 0.5
Calcula xn = An xn−1 para n = 1, 2, . . . , 16 y comprueba que, con la menos tres cifras
significativas, se obtiene que xn = x16 ∀n ≥ 16.

22. Consideremos el sistema de ecuaciones en diferencias:


)
zn+1 = 0.6zn + 0.5cn
con z1 = 100, c1 = 1000
zn+1 = −0.16zn + 1.2cn

¿Cúal es le comportamiento de zn y cn para n “grande”?


Si se escribe el sistema en forma matricial, ¿cúal 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 definida por
à !
107 + ε 107 − ε
Bε = ε 6= 0
1/ε 1/ε

. Varı́e ε desde 10−1 hasta 10−12 y calcule los determinantes de las matrices Bε que se
obtienen.
adj(A)
24. Para la matriz A del ejercico 16 calcule A−1 mediante inv : (A) y . Compare
det(A)
número de operaciones.

25. Sea Az la matriz de orden 5 dada por


 
z −1 0 0 0
 −1 z −1 0 0 
 
 
Az =  0 −1 z −1 0 
 
 0 0 −1 z −1 
0 0 0 −1 z

(a) Pruebe que A5 es regular encontrando su inversa.


108 CAPÍTULO 10. RELACIÓN DE EJERCICIOS

(b) Demuestre que A2 es regular calculando su rango.


(c) Pruebe que A0 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 Az no tiene inversa.
(e) Construya la matriz B de orden 10 que posee la misma estrutura que A2 y el
vector c = (1, 1, . . . , 1). Resuelva el sistema Bx = c mediante inv(B) ∗ c y B\c
comparando el número de operaciones y el tiempo de cáculo. ¿Qué método es más
eficiente?

26. Pruebe que x1 = 1, x2 = −1 es la solución exacta del sistema


)
0.89x1 + 0.53x2 = 0.36
0.47x1 + 0.28x2 = 0.19

Tome x1 = 0.47 y x2 = −0.11 y compruebe que “casi resuelve el sitema”. ¿Está bien o
mal condicionado?

27. Consideremos las matrices


à ! à ! à !
1 1−ε
2−ε 1−ε ε 0 −1 ε ε
A= P = B=P AP −1+ε2 −1+ε+ε2
2 − 2ε 1 − 2ε 1−ε 1 ε ε

con ε 6= 0.
Dar a ε valores pequeños y calcular los autovalores, determinantes y rangos de las
matrices A y B. ¿Qué conclusiones se pueden decucir?
à !
−0.4 0.5
28. Sea A = . Utilice MATLAB para sumar varios términos de la serie
−0.18 0.2
de eA y comprobar que converge a expm : (A).

29. Realiza los siguientes cálculos:

(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 analı́ticamente el último apartado.

30. Siendo L = [1 2 − 2 0 1 − 5 − pi sqrt(2)], realice los siguientes cálculos: s=sign(L),


s==1, find(s==1), length(find(s==1)).
109

31. Con la utilidad help informate sobre el cometido de la función poly. Construye los
polinomios que tienen por raı́ces:

(a) 1, 2, 3.
(b) ei2πk/5 , k = 0, 1, 2, 3, 4, 5.
(c) −1 con multiplicidada 5.

32. Usando la función poly calcula los números combinatorios


à ! à ! à !
10 10 10
, ,... ,
0 1 10

33. Calcula las raı́ces de los polinomios:

(a) p(x) = x3 + 6x2 − 72x + 27


(b) q(x) = 2x4 + x3 − 2x − 8

34. Evalúa p(A) en los siguientes casos:

(a) A = ones(3), p(t) = t3 − 3t2


(b) A = eye(3), p(t) = (t − 1)3
(c) A = rand(2), p(t) = t2 − (a11 + a22 )t + (a11 a22 − a12 a21 )

35. Calcula la pseudoinversa de las matrices:


 
−3 1
 
 −2 1 
  Ã !
 −1 1 
  0 0 1 2
A=  0 1 
 A=
 1 1 2 2 3
 1 

 
 2 1 
3 1

36. Experimente la función sdv sobre vectores filas y vectores columnas. ¿Qué puede
deducir?

37. Encontrar la recta que mejor aproxima en el sentido de los mı́nimos cuadrados a la nube
de puntos {(−3, 10), (−2, 15), (−1, 9), (0, 27), (1, 18), (2, 34), (3, 42)},utilizando la orden
”polyfit(x,y,n)”.

38. Encuentre la recta que pasa por los puntos (0, 1) y (2, 3).

39. Determine la parábola que pasa por (−1, 2), (0, 1) y (2, 4).
110 CAPÍTULO 10. RELACIÓN DE EJERCICIOS

40. Repersentar la función z = f (x, y) =sen(x)sen(y).


−4x
41. Representar la función f (x, y) = x2 +y2 +1
y encontrar su valor máximo.

42. Calcula los autovalores de las siguientes matrices:


 
5 3 6
 
(a) A =  2 6 6 
2 3 9
 
0 0 0 1
 0 0 1 0 
 
(b) A =  
 0 −1 0 0 
−1 0 0 0
(c) ones(20)
(d) orth((2*rand(5)-1)+i*(2*rand(5)-1))

¿Qué propiedad cumplen los autovalores del apartado d)?


   
1 0 0 1 1 1
   
43. Utilice MATLAB para comprobar que las matrices A =  0 2 0  y B =  0 2 1 
0 0 3 0 0 3
son semejantes.

44. Escribe una función MATLAB que remplace por 0 las componentes de un vector real
que sean menores, en valor absoluto, que un número positivo dado.

45. Describa una función con las siguientes condiciones:

• Tenga dos vectores x e y de dimensión n y un ángulo t (en radianes) como argu-


mentos de entrada.
• Nos proporcione los pares de números que se obtienen aplicando a (xi , yi ), i =
1, . . . , n un giro con centro el origen t de ángulo t.

46. Escriba un programa en MATLAB con las siguientes caracterı́sticas:

• Nos pida introducir (por el tecaldo) cuatro puntos del plano P1 , P2 , P3 , P4 y un


ángulo t.
• Represente el cuadrilátero Q determinando por P1 , P2 , P3 , P4 .
• Y en el gráfico anterior dibuje, además, el cuadrilátero que se obtiene al aplicar a
Q un giro con centro el origen y ángulo t.’

47. Construye una función que calcule el k—ésimo coeficiente del producto de polinomios.
111

48. Con ayuda de la función poly y las fórmulas de Cardano construye una función que
nos proporcione la suma de los cuadrados de los autovalores de una matriz.

49. Construye una función MATLAB con las siguientes caracterı́sticas:

• Acepte como argumentos de entrada un matriz A ∈ Mn y polinomio p.


• Nos proporcione el vector fila (p(λ1 ), . . . , p(λn )), donde λi son los autovalores de
A.
• Evalue la matriz p(A).
• Nos proporcione un vector fila con los autovalores de p(A).

50. Escribir una función que actúe sobre dos argumentos: una matriz A y un númrero
natural i; proporcionando como resultado la matriz que se obtiene al suprimir la i—
ésima fila de la matriz A.

51. Idem para la columna j de una matriz.

52. Describir la función que nos proporciona el menor complementario del elemento aij de
la matriz A.

53. Describir la función que nos proporciona el elemento adjunto de aij .

54. En un archivo .m describir la función que nos proporciona la adjunta (ya traspuesta)
de una matriz.

55. Con ayuda de la función anterior describir la función que determina la inversa de A
mediante A−1 = adj(A)
det(A) . Comparar el número de operaciones y el tiempo de cálculo
entre “nuestra función inversa” y la función inv de MATLAB.

56. Describir una función en MATLAB que nos proporcione la suma de dos polinomios
de cualquier grado.

57. Con ayuda de las funciones diag y triu describir la función que con una matriz A
como argumento de entrada nos proporcione la descomposición de A como suma de
una matriz diagonal, una triangular superior y otra inferior.

58. Diseñar una función que resuelva un sistema cuadrado por la regla de ,Cramer. Com-
parar el tiempo de cálculo y el número de operaciones con la resolución del sistema
mediante inv(A)*b y A\b.

59. Realizar una estrategia que calcule la descomposición LU sin pivoteo parcial, para una
matriz no necesariamente cuadrada.

60. Escribir una función con tres argumentos (una matriz A y dos números enteros positivos
i, j) que nos propocione la matriz que se obtiene intercambiando las filas i y j de la
matriz de entrada A.
112 CAPÍTULO 10. RELACIÓN DE EJERCICIOS

61. Idem, pero intercambiando columnas.

62. Contruir una función que nos proporcione la matriz resultante de sumar a la fila i—ésima
de A la j—ésima fila multiplicada por λ. (Naturalmente i 6= j).

63. Hacer lo mismo, pero para las columnas de A.

64. Describir una función que tenga como argumentos de entrada una matriz A ∈ Mm×n
y un vector (columna) b ∈ Rm , genere 100 vectores (colunma) aleatorios x ∈ Rn y nos
devuelva el mı́nimo de kAx − bk cuando x recorre los anteriores vectores aleatorios.

65. Escribir una función MATLAB que aceptando, como argumento, una matriz cuadrada
A nos proporcione el valor máximo de kAuk cuando u recorre 100 vectores alearorios
unitarios.

66. Editar en un archivo de extensión .m una función que nos proporciona la recta que
mejor aproxima (por mı́nimos cuadrados) a una nube de puntos y que represente en un
mismo gráfico la recta encontrada y los puntos dados.

67. Escribir una función que nos de como resultado 1 ó 0, dependiendo si la matriz de
entrada es hermı́tica o no.

68. Hacer lo mismo que en el ejercicio anterior, pero para detectar matrices hermı́ticas
definidas positivas.

69. Generar un programa que nos pida un número natural positivo n y nos proprocione el
n—ésimo número de Fibonacci.

70. Diseñar una función que nos resulva un S.E.L. cuadrado compatible utilizando el método
de Gauss con estrategia de pivote total.

71. Describir una función MATLAB que nos estudie la compatibilidad de un sitema de
ecuaciones lineales y lo resuelva cuando sea compatible (determinado o indeterminado).
Aplicar esa función a
à !
1 1−ε
A= ε
−1+ε2
ε
−1+ε+ε2 con ε 6= 0 y b = (1, −1)t
ε ε

para valores pequeños de ε.

72. Realizar una estrategia que determine la descomposición QR mediante el método de


Gram—Schmidt de una matriz A con columnas linelamente independientes. Escriba la
estrategia en un archivo.m.
113

73. Considere la matriz


 
1 1 1
 1+ε 1 1 
 
A=  ε 6= 0
 1 1+ε 1 
1 1 1+ε

Asigne un valor pequeño a ε y aplique el método de Gramm—Schmidt (ver ejercicio


anterior) para ortonormalizar las columnas de A. Comprudebe si realmente se han
obtenido columnas ortonormales. Aplique la función qr sobre A y obtenga resultados.
Bibliografı́a

[1] PC—MATLABTM for MS—DOS Personal Computers (User’s Guide).


The MathWorks, Inc., (1990).

[2] MATLAB Reference Guide.


The MathWorks, Inc., (Octubre 1992).

[3] B. Noble, J.W. Daniel Álgebra Lineal Aplicada.


Ed. Prentice Hall, (1989).

[4] G. Strang Álgebra Lineal y sus Aplicaciones.


Ed. Addison Wesley, (1990).

[5] S.I. Grossman Álgebra Lineal, (Quinta edición)


Ed. MacGraw-Hill, (1996)

[6] M. Marcus Matrices y Matlab: a tutorial


Prentice-Hall (1993)

114

View publication stats

Вам также может понравиться