introduccion a matlabpersonal.us.es/julio/metodos/intromatlab.pdf ·  ·...

118
INTRODUCCION A MATLAB Victoriano Carmona Centeno y Julio R. Fern´ andez Garc´ ıa

Upload: tranthu

Post on 24-Apr-2018

217 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

INTRODUCCION A MATLAB

Victoriano Carmona Centeno y Julio R. Fernandez Garcıa

Page 2: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

INTRODUCCION A MATLAB

c° Victoriano Carmona Centeno y

Julio R. Fernandez Garcıa

Profesores del Departamento de Matematica Aplicada II

Escuela Universitaria Politecnica

Universidad de Sevilla

ISBN 84-8264-257-X

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

Page 3: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

INTRODUCCION

Hace ya bastante tiempo que el ordenador es utilizado en el calculo cientıfico y su uso

cada vez se impone con mas fuerza tanto en el terreno de la investigacion como pedagogico-

didactico. Es por ello, que hayan salido al mercado distintos programas en los que aparecen

implementados algunos de los metodos que utilizamos dıa a dıa en la resolucion 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

anos hasta su forma actual. MATLAB destaca por su facil aprendizaje, facil utilizacion, gran

potencia y pocas exigencias de equipamiento informatico. Naturalmente, esta buena ”relacion

calidad-precio” hace que sea uno de los programas de software matematico mas extendido.

La potencia de MATLAB se manifiesta por dos caracterısticas fundamentales: la

conjugacion entre programacion clasica y funcional y la gran variedad de problemas que es

capaz de resolver (Sistemas de Ecuaciones, Optimizacion, Ecuaciones diferenciales...). Su

facil uso y rapido aprendizaje estan ıntimamente relacionados con su caracter 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 resolucion 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 Calculo

Numerico (sobre todo en el Calculo Numerico Matricial) con excelente posibilidades graficas,

que ayudan al profesor y al alumno tanto en sus trabajos docentes y de estudio como en su

labor de investigacion.

Estas paginas no pretenden agotar, en absoluto, todas las posibilidades que MATLAB

ofrece. Aquellos que deseen profundizar mas 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

”Introduccion a Matlab”, celebrado en el Centro Informatico 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 Extension Cultural de la Universidad

de Sevilla y fue homologado por la Consejerıa de Educacion y Ciencia.

Por ultimo deseamos hacer constar la colaboracion del profesor D. Francisco Felix

Lara Martın en la elaboracion de unos apuntes preliminares a esta obra.

LOS AUTORES

Page 4: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

INTRODUCCIONAMATLABVictoriano Carmona Centeno y Julio R. Fernandez Garcıa

Page 5: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Indice General

1 Elementos basicos 3

1.1 Formatos de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.2 Matrices por bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1.3 Operaciones con Matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.4 Operaciones elemento a elemento . . . . . . . . . . . . . . . . . . . . . . . . . 23

2 Tipos especiales de matrices. Construcciones. 25

2.1 Matrices especiales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.2 Redefiniciones y construcciones a partir de la diagonal . . . . . . . . . . . . . 26

3 Sistemas de Ecuaciones Lineales y descomposiciones 29

3.1 Resolucion de S.E.L. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.1.1 Sistemas cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.1.2 Sistemas superdeterminados. Mınimos cuadrados . . . . . . . . . . . . 30

3.1.3 Tiempo de calculo y numero de operaciones . . . . . . . . . . . . . . . 31

3.2 Descomposiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2.1 Factorizacion LU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2.2 Descomposicion de Cholesky . . . . . . . . . . . . . . . . . . . . . . . 34

3.2.3 Factorizacion QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.2.4 Ortonormalizacion y espacio nulo . . . . . . . . . . . . . . . . . . . . . 37

3.3 Normas y numero de condicion . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.3.1 Normas vectoriales y matriciales . . . . . . . . . . . . . . . . . . . . . 39

3.3.2 Numero de condicion 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 Aproximacion por polinomios en el sentido de los mınimos cuadrados . 52

1

Page 6: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

2 INDICE GENERAL

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

5 Posibilidades graficas 57

5.1 Graficos en el plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.1.1 Poligonales y curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

5.1.2 Curvas en polares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

5.1.3 Curvas en parametricas . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.1.4 Histogramas y diagramas de barras . . . . . . . . . . . . . . . . . . . . 63

5.2 Curvas en el espacio y superficies . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.2.1 Curvas en parametricas . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Definicion de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

7 Aspectos de analisis numerico 84

7.1 Resolucion de Ecuaciones y Sistemas no Lineales . . . . . . . . . . . . . . . . 84

7.2 Integracion numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

7.3 Optimizacion en una y varias variables . . . . . . . . . . . . . . . . . . . . . . 87

7.4 Resolucion de Ecuaciones Diferenciales Ordinarias . . . . . . . . . . . . . . . 87

8 Consejos practicos 91

8.1 Las ordenes help, lookfor y demo . . . . . . . . . . . . . . . . . . . . . . . 91

8.2 Informacion sobre variables declaradas. Instrucciones para guardar y salvar

variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

8.3 Relacion con el sistema operativo. El comando diary . . . . . . . . . . . . . 93

9 Resumen de los comandos y funciones mas utilizados 95

10 Relacion de ejercicios 102

Page 7: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 1

Elementos basicos

En esta primera seccion explicaremos aquello que es necesario conocer para comenzar a

utilizar MATLAB. En particular describiremos:

1. La introduccion de matrices y sus elementos, declaraciones y variablesMATLAB.

2. Como obtener informacion, terminar y salvar variables declaradas en una sesion.

3. Numeros y expresiones aritmeticas.

4. Utilizacion de la ayuda.

5. Funciones deMATLAB.

LA INTRODUCCION 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 representaran 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 dimension u otro tipo de

declaraciones, como sucede en algunos lenguajes de programacion. MATLAB asigna y

almacena automaticamente, dependiendo de las caracterısticas de cada ordenador.

El modo mas facil de introducir matrices pequenas es introducir explıcitamente sus ele-

mentos, siguiendo las convenciones: Separar explıcitamente la lista de elementos con espacios

3

Page 8: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

4 CAPITULO 1. ELEMENTOS BASICOS

en blanco o comas, encerrar los elementos entre corchetes ([ ]) y usar ; para indicar el fin de

cada fila.

Por ejemplo, introduciendo la asignacion

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

resulta la salida

A =

1 2 3

4 5 6

7 8 9

MATLAB guarda la matriz para poder usarla posteriormente.

Las matrices tambien 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 instruccion “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 funcion “fread” permiten leer matrices generadas durante sesiones

anteriores, importar matrices de otros programas o exportarlas. Pero este es un aspecto que

sera tratado mas adelante.

Las matrices pueden incluir algunas expresiones MATLAB; por ejemplo al teclear

Page 9: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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 parentesis. Si continuamos con el ejemplo anterior, la asignacion

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

produce

>>x=

-1.3000 1.7321 4.8000 0 1.3000

Observese que el tamano de x aumenta automaticamente, 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 anadido 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 pequenas como “elementos”de

la misma. Por ejemplo podemos anadir 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

Page 10: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

6 CAPITULO 1. ELEMENTOS BASICOS

>>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 mas adelante con mucho

mas detalle.

ASIGNACIONES Y VARIABLES MATLAB

MATLAB es un lenguaje de expresiones: interpreta y evalua las expresiones introduci-

das. Las asignaciones MATLAB son con frecuencia de la forma

variable=expresion

o simplemente

expresion

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

ables. La evaluacion 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 automaticamente crea una variable con el nombre

“ans” (variable de respuesta), donde almacena el resultado. Por ejemplo, si introducimos la

expresion

>>sqrt(2)/15

se obtiene

ans =

0.0943

Si una expresion es bastante complicada (y larga) y no es suficiente una lınea para es-

cribirla completamente, podemos anadir al final tres puntos ( . . . ) seguidos de un retorno de

carro para indicar que la asignacion continue 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;

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

Page 11: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

7

Podemos dar nombres a variables y funciones que empezaran siempre por letras y que

pueden estar seguidas de otras letras o dıgitos. MATLAB solo reconoce los 19 primeros

caracteres de un nombre.

MATLAB es muy sensible: distingue entre letras mayusculas y minusculas. A y a no son

la misma variable. Todos los nombres de funciones deben escribirse con minusculas; inv(A)

es la inversa de A, pero INV(A) no esta definida. El comando “casesen” anula (o activa) esta

sensibilidad.

RECOGIENDO INFORMACION EN EL ESPACIO DE TRABAJO (WORKSPACE)

En los ejemplos previos hemos creado variables que han sido almacenadas en el espacio de

trabajo deMATLAB. Podemos listar estas variables tecleando “who” o “whos” dependiendo

de la informacion que necesitemos de las variables almacenadas.

>>who

Your variables are:

A ans r s x

Esto muestra que los ejemplos anteriores han generado cinco variables, incluyendo la

variable “ans”.

VARIABLES PERMANENTES

La variable “ans” y la variable “eps” tienen un 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 util para

detener los procesos iterativos). El valor estandar de “eps” para estaciones de trabajo y

ordenadores compatibles es:

eps = 2−52

que es aproximadamente 2.22 · 10−16. Podemos inicializar “eps” a cualquier otro valorincluido el cero.

Relacionadas con estas variables nos encontramos con las funciones pi, Inf y NaN que

generan valores especiales.

Por ejemplo, la funcion “pi” nos devuelve el numero π, precalculado por el programa

como 4 arctan(1) (cuatro veces el arco cuya tangente es uno). Otra posibilidad es calcular π

tecleando imag(log(−1)) (parte imaginaria del logaritmo principal de −1).La funcion “Inf”, que se utiliza para infinito, se encuentra en algunas calculadoras o

lenguajes de computacion. Un camino para generar el valor que nos devuelva “Inf” es

1La orden “clear A B C” limpia del espacio de trabajo estas tres variables.

Page 12: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

8 CAPITULO 1. ELEMENTOS BASICOS

>>s=1/0

Warning: Divide by zero

s =

Inf

Aunque, dependiendo de la version que utilicemos deMATLAB y el entorno de trabajo,

la respuesta al calculo anterior puede ser el sımbolo ∞.En maquinas con cierta aritmetica, la division por cero no provoca un error ni la final-

izacion de la ejecucion. Produce un mensaje y asigna un valor especial, que podemos utilizar

en calculos posteriores. Por ejemplo, la variable “NaN” es un numero relacionado con el

infinito pero con distintas propiedades. “NaN” siginfica No es Un Numero. Calculos como

Inf/Inf o 0/0 lo generan. Como otra variable intrıseca deMATLAB podemos citar la unidad

imaginaria que se representa enMATLAB por i o j.

LA UTILIDAD HELP

La utilidad “help” proporciona informacion instantanea de la mayorıa de los topicos de

MATLAB. El comando “help” sin argumentos muestra, dependiendo de la version deMAT-

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.

Page 13: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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 mas relevantes en Analisis Numerico Ma-

tricial.

Matrix functions - numerical linear algebra.

Matrix analysis.

cond - Matrix condition number.

norm - Matrix or vector norm.

rcond - LINPACK reciprocal condition estimator.

rank - Number of linearly independent rows or columns.

det - Determinant.

trace - Sum of diagonal elements.

null - Null space.

orth - Orthogonalization.

rref - Reduced row echelon form.

Linear equations.

\ and / - Linear equation solution; use "help slash".

chol - Cholesky factorization.

lu - Factors from Gaussian elimination.

inv - Matrix inverse.

qr - Orthogonal-triangular decomposition.

qrdelete - Delete a column from the QR factorization.

qrinsert - Insert a column in the QR factorization.

nnls - Non-negative least-squares.

pinv - Pseudoinverse.

lscov - Least squares in the presence of known covariance.

Eigenvalues and singular values.

Page 14: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

10 CAPITULO 1. ELEMENTOS BASICOS

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 informacion de la factorizacion 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 funcion o comando, a menos que

haya sido anadida por algun usuario.

Page 15: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

11

Una informacion mas general nos la proporciona “lookfor”. Por ejemplo

>>lookfor inverse

INVHILB Inverse Hilbert matrix.

ACOS Inverse cosine.

ACOSH Inverse hyperbolic cosine.

ACOT Inverse cotangent.

ACOTH Inverse hyperbolic cotangent.

ACSC Inverse cosecant.

ACSCH Inverse hyperbolic cosecant.

ASEC Inverse secant.

ASECH Inverse hyperbolic secant.

ASIN Inverse sine.

ASINH Inverse hyperbolic sine.

ATAN Inverse tangent.

ATAN2 Four quadrant inverse tangent.

ATANH Inverse hyperbolic tangent.

ERFINV Inverse of the error function.

INVERF Inverse Error function.

INV Matrix inverse.

PINV Pseudoinverse.

IFFT Inverse discrete Fourier transform.

IFFT2 Two-dimensional inverse discrete Fourier transform.

nos da una lista de funciones relacionadas con la palabra inverse.

TERMINANDOYGUARDANDO EL ESPACIO DE TRABAJO (WORKSPACE)

Para terminar una sesion con MATLAB teclearemos “quit” o “exit”. Al finalizar

una sesion MATLAB se borran todas las variables del espacio de trabajo (i.e., las vari-

ables declaradas en la sesion actual). Antes de terminar podemos guardar el contenido del

“workspace”, para una sesion posterior, tecleando

>>save

Este comando salva todas las variables en un fichero llamado matlab.mat. La proxima

vez que MATLAB sea llamado podremos ejecutar “load” para restaurar, en el workspace,

el contenido de matlab.mat.

Podemos utilizar “save” y “load’ con otros nombres de fichero.mat o bien guardar solo

aquellas variables en las que estemos interesados. El comando “save temp X” guarda en el

fichero temp.mat solo la variable X, mientras que “save temp X Y Z” almacena en temp.mat

Page 16: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

12 CAPITULO 1. ELEMENTOS BASICOS

las variables X,Y y Z. “load temp” cargas todas las variables almacenadas en el fichero

temp.mat

Por ultimo, con los comandos “load” y “save” podemos importar y exportar ficheros con

datos ASCII. (Ver mas adelante).

NUMEROS Y EXPRESIONES ARITMETICAS

MATLAB utiliza la notacion decimal, pudiendo incluir factores con potencias de diez o

unidades imaginarias. Algunos ejemplos de numeros legales son:

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

La aproximacion del numero es “eps”, i.e., aproximadamente 16 dıgitos decimales significa-

tivos cuando se usa aritmetica de punto flotante. El rango de la mantisa es [−308, 308].Podemos combinar expresiones con los operadores aritmeticos usuales y las reglas de prece-

dencia2. Las operaciones elementales son:

• + Suma• − Resta• ∗ Multiplicacion• / Division derecha• \ Division izquierda• ∧ PotenciaLas operaciones con matrices hacen conveniente tener dos sımbolos para la division. Esto

se analizara con mas detalle cuando abordemos el estudio de las operaciones y funciones con

matrices. Pero, adelantamos que por ejemplo, las expresiones escalares 1/4 y 4\1 tienen elmismo valor numerico, es decir 0.25.

NUMEROS COMPLEJOS, CADENAS DE CARACTERES Y MATRICES

MATLAB trabaja con numeros complejos y representa la unidad imaginaria por i o j.

El numero z en forma binomica podemos escribirlo de dos formas

>>z=3+4*i

z =

3.0000 + 4.0000i

>>z=3+4*j

z =

3.0000 + 4.0000i2Para alterar el orden usual de la precedencia de las operaciones, utilizaremos parentesis.

Page 17: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

13

Otra opcion consiste en utilizar la notacion 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 mas actuales deMATLAB se pueden escribir los numeros complejos sin

necesidad de utilizar *. Pero hay que tener cuidado en no dejar espacios en blanco al escribir

la parte imaginaria de un numero complejo. Si escribimos

>>1+ 4i

se obtiene

1.0000 + 4.0000i

en cambio, al introducir

>>1 + 4 i

aparece el siguiente mensaje de error

??? 1+4 i

\vert

Missing operator, comma, or semi-colon.

Esto tambien hay que tenerlo en cuenta cuando se utiliza la notacion exponencial con

numeros reales. Si introducimos

>>1.23e-4

la respuesta es

1.2300e-004

en cambio

Page 18: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

14 CAPITULO 1. ELEMENTOS BASICOS

>>1.23 e-4

produce el siguiente mensaje de error

??? 1.23 e

\vert

Missing operator, comma, or semi-colon.

Si hemos utilizado durante una sesion las letras i o j como nombre de variables o fun-

ciones que juegan un papel distinto al de la unidad imaginaria, y necesitamos posteriormente

trabajar con complejos, podemos definir la unidad imaginaria del siguiente modo:

>>ii=sqrt(-1)

ii =

0 + 1.0000i

Consideremos, por ejemplo, la siguiente sesion

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

Page 19: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

15

z =

1.0000 + 1.0000i

Realmente MATLAB solo maneja matrices, pero los elementos de estas pueden ser

numeros (reales o complejos) o cadenas de caracteres. Por ejemplo si tecleamos

>> 34

ans =

34

aparece el numero 34, en cambio introduciendo matrices formadas por cadenas de caracteres

(incluido el espacio en blanco) podemos leer, por ejemplo, la profunda conversacion:

>> 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 estan anadiendo funciones que han sido creadas por usuarios individuales,

o grupos de usuarios, para aplicaciones mas especializadas. Este es un hecho importante,

cada usuario puede crear sus propias funciones y trabajar con ellas conjuntamente con las

funciones intrınsecas deMATLAB. Este es un aspecto importante que desarrollaremos mas

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. Descomposicion de matrices

6. Analisis de datos

7. Tratamiento de polinomios

Page 20: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

16 CAPITULO 1. ELEMENTOS BASICOS

8. Ecuaciones diferenciales

9. Ecuaciones no lineales y optimizacion

10. Integracion numerica

11. Procesamiento de la senal

Una breve descripcion de casi todas las funciones de estos grupos se puede encontrar en

los cuadros resumenes del ultimo capıtulo o, con mas profundidad, en la guıa de usuarios de

MATLAB.

Destacamos que la practica totalidad de las funciones elementales deMATLAB no solo

actua sobre numeros, sino que tambien operan con matrices actuando directamente sobre las

entradas de la matriz.

En el subapartado dedicado al orden “polyvalm” veremos algunas funciones matriciales,

como la exponencial matricial, el logaritmo matricial, . . .

1.1 Formatos de salida

Antes de comenzar con el siguiente apartado (las operaciones matriciales) senalamos que

aunque MATLAB siempre trabaja en doble precision, es posible elegir diversos “formatos

de salida” para los resultados numericos. Por defecto, el formato usual sera de 5 cifras

decimales.

Algunas de las posibilidades que tenemos las describimos a continuacion con ejemplos

concretos:

>> format short e

>> A=[4/3 7.908767 3]

A =

1.3333e+000 7.9088e+000 3.0000e+000

>> format long

>> A

A =

1.33333333333333 7.90876700000000 3.00000000000000

>> format long e

>> A

A =

1.333333333333333e+000 7.908767000000000e+000

3.000000000000000e+000

La orden “format rat” hace que los resultados numericos siempre aparezcan como numeros

racionales. Pero tengase en cuenta que esto no significa que la matriz en cuestion sea tratada

internamente, porMATLAB, como una matriz racional. Por consiguiente, esto resulta util

Page 21: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

1.1. FORMATOS DE SALIDA 17

si tenemos la certeza de estar siempre trabajando con numeros racionales. Ponemos esto de

manifiesto con la aproximacion racional de MATLAB para√2.

>>format rat

>>sqrt(2)

ans =

114243/80782

>>format long e

>>114243/80782

ans =

1.414213562427273e+00

>>sqrt(2)

ans =

1.414213562373095e+00

Observese que si utilizamos “format rat” para la representacion de la matriz de Hilbert

de orden 5 se obtiene:

>>format rat

>>H=hilb(5)

H =

1 1/2 1/3 1/4 1/5

1/2 1/3 1/4 1/5 1/6

1/3 1/4 1/5 1/6 1/7

1/4 1/5 1/6 1/7 1/8

1/5 1/6 1/7 1/8 1/9

El formato “format +” muestra un diagrama de la matriz en el que solo aparecen los

elementos no nulos (positivos marcados con “+” y negativos con “−”). “format +” resultaespecialmente util para destacar la estructura de una matriz (banda ,diagonal por bloques,

...). Por ejemplo:

>> J=[-3 1 0 0;0 -3 0 0;0 0 4 1;0 0 0 4]

J =

-3 1 0 0

0 -3 0 0

0 0 4 1

0 0 0 4

>> format +

>> J

J =

Page 22: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

18 CAPITULO 1. ELEMENTOS BASICOS

-+

-

++

+

Para volver al formato corto usual podemos teclear “format” o bien “format short”.

En relacion con la presentacion 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 sesion MATLAB, mostrando de esta forma mas informacion en pantalla;

el segundo de los comandos anula el anterior.

1.2 Matrices por bloques

Es posible manejar bloques completos de una matriz utilizando los dos puntos (:). Por

ejemplo:

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

A =

4 5 3 2

3 5 7 -1

2 5 8 0

>> A(1,:)

Nos proporciona la primera 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 interseccion de las filas 2a y 3a y

de las columnas 1a y 2a de la matriz A.

bloque =

3 5

2 5

Page 23: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

1.2. MATRICES POR BLOQUES 19

En particular, es posible hacer referencia a un elemento concreto de una matriz. El

elemento (2, 1) de la matriz denominada “bloque” se obtiene de forma totalmente natural:

>> bloque(2,1)

ans =

2

Una instruccion del tipo M = [P ;B] construye, si es posible, una matriz M anadiendo a

P las filas de B. Vease,

>> P=[3 5 6; -2 .5 9]; B=[4 6 2; 9 0 0;5 5 0.25];

>> P,B

P =

3.0000 5.0000 6.0000

-2.0000 0.5000 9.0000

B =

4.0000 6.0000 2.0000

9.0000 0 0

5.0000 5.0000 0.2500

>> F=[P;B]

F =

3.0000 5.0000 6.0000

-2.0000 0.5000 9.0000

4.0000 6.0000 2.0000

9.0000 0 0

5.0000 5.0000 0.2500

La orden M = [P B], analoga a la anterior, construye la matriz M anadiendo a P las

columnas de B. Naturalmente, esto es posible si P y B tienen el mismo numero 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.

Page 24: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

20 CAPITULO 1. ELEMENTOS BASICOS

>>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 estan en progresion artimetica:

>> t=0:2:10

t =

0 2 4 6 8 10

Los dos puntos tambien se pueden utilizar para transformar una matriz en un vector

columna, siguiendo el orden de las columnas.

>>A(:)

ans =

4

3

2

5

5

5

3

7

8

2

-1

0

1.3 Operaciones con Matrices.

En esta seccion mostraremos como las operaciones con matrices se realizan en MATLAB

de forma bastante natural.

Dada una matriz A, A0 nos proporciona la traspuesta de A, si esta es real, o la adjuntaen sentido hermıtico, si A es de numeros complejos.

>> T=J’

T =

-3 0 0 0

1 -3 0 0

0 0 4 0

Page 25: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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—esima de una matriz (A∧n) serealizan como sigue.

>> S=T+C

S =

6.0000 13.0000 - 2.0000i

13.0000 + 2.0000i 0

>> E=[6 3 2;-1 3 -1;5 3 8]

E =

6 3 2

-1 3 -1

5 3 8

>> P=E*E’

P =

49 1 55

1 11 -4

55 -4 98

>>NI=[0 1 -2;0 0 15;0 0 0]

NI =

0 1 -2

0 0 15

0 0 0

>>NI^3

ans =

0 0 0

0 0 0

0 0 0

Para calcular el determinante de una matriz cuadrada usaremos la funcion “det”. Por

ejemplo, para la matriz de Hilbert de orden 5 el determinante es:

>>format rat

>>H=hilb(5)

Page 26: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

22 CAPITULO 1. ELEMENTOS BASICOS

H=

1 1/2 1/3 1/4 1/5

1/2 1/3 1/4 1/5 1/6

1/3 1/4 1/5 1/6 1/7

1/4 1/5 1/6 1/7 1/8

1/5 1/6 1/7 1/8 1/9

>> det(H)

ans =

1/266716800000

Para calcular la traza emplearemos “trace”, para obtener el rango “rank” y para hallar

la inversa “inv”. Esto se ilustra en el siguiente ejemplo:

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

A =

1 2 3

0 1 2

0 0 1

>>trace(A)

ans =

3

>>rank(A)

ans =

3

>>inv(A)

ans =

1 -2 1

0 1 -2

0 0 1

La orden “size” nos da un vector cuyas componentes nos indican el orden de la matriz.

Page 27: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

1.4. OPERACIONES ELEMENTO A ELEMENTO 23

La primera componente denota el numero de filas y la segunda el numero de columnas.

>>size(A)

ans =

3 3

Por ultimo, indicar que la orden “nnz” determina el numero de elementos no nulos de la

matriz.

>>nnz(A)

ans =

6

1.4 Operaciones elemento a elemento

Si M y N son matrices del mismo orden M. ∗ N , M.∧N y M./N realizan el producto, la

potenciacion y la division 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

Page 28: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

24 CAPITULO 1. ELEMENTOS BASICOS

ans =

1 4 125

Cuando una de las matrices sea de orden 1 por 1 (i.e., un escalar), las operaciones ante-

riores tambien tienen sentido. Vease

>> 3 .^v

ans =

3 9 27

>>3 ./v

ans =

3.0000 1.5000 1.0000

Notese el espacio entre el numero 3 y el punto; este es necesario en las primeras versiones

deMATLAB.

En relacion con las operaciones elemento a elemento podemos destacar la operacion

no+matriz (o matriz+no) que, al contrario de las anteriores no necesita el punto (.), y cuyo

cometido es sumar a cada elemento de la matriz el numero en cuestion.

>>8+v

ans =

9 10 11

Page 29: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 2

Tipos especiales de matrices.

Construcciones.

2.1 Matrices especiales.

Indiquemos en primer lugar como generar automaticamente, con ayuda de algunas funciones

incorporadas en MATLAB, algunos tipos de matrices.

“zeros(m,n)” genera la matriz nula de orden m× n. Analogamente “ones(m,n)” produceuna 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 solo las funciones anteri-

ores, sino que la mayorıa de las funciones de MATLAB gozan de la misma, como iremos

descrubiendo mas adelante.

Ademas, la anterior caracterıstica esta ıntimamente ligada con la funcion (variable in-

trıseca) “nargin” (numero de argumentos de entrada) que nos proporciona, una vez que

25

Page 30: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

26 CAPITULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.

llamamos a una funcion, el numero de argumentos de entrada que utilizamos en dicha llama-

da (es decir, el numero de elementos entre parentesis y separados por comas que preceden

al nombre de una funcion). Relacionada con la funcion “nargin” nos encontramos la funcion

“nargout” (numero de argumentos de salida) de la que hablaremos mas adelante.

La orden “ones(A)” nos proporciona una matriz de unos del mismo orden que A. Efectos

analogos tienen los comandos “eye(A)” y “zeros(A)”.

>> ones(E)

ans =

1 1 1 1

1 1 1 1

Para la version 4.2c de MATLAB las ordenes “ones(A)”,“ eye(A)” y “size(A)” han

quedado obsoletas y conviene sustituirlas por “ones(size(A))”, “eye(size(A))” y “zeros(size(A))”.

Tambien es posible generar algunas matrices especiales como por ejemplo matrices de

Hilbert. Ası, “hilb(n)” produce la matriz de Hilbert de orden n:

>> H=hilb(5)

H =

1.0000 0.5000 0.3333 0.2500 0.2000

0.5000 0.3333 0.2500 0.2000 0.1667

0.3333 0.2500 0.2000 0.1667 0.1429

0.2500 0.2000 0.1667 0.1429 0.1250

0.2000 0.1667 0.1429 0.1250 0.1111

2.2 Redefiniciones y construcciones a partir de la diagonal

Existen varias funcionesMATLAB que permiten redefinir la estructura de una matriz:

>>rot90(E)

Esta instruccion 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 deorden m × n siguiendo el orden de las columnas. Naturalmente, A debe tener m · nelementos.

Page 31: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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 traves de la(s)

diagonal(es) de A.

Para obtener la diagonal de una matriz A, (que puede no ser cuadrada) basta teclear

>> D=diag(A)

D =

3

0

8

Si v es un vector “diag(v)” nos da una matriz diagonal (cuadrada) cuya diagonal es v.

>> diag([5 7 -3])

ans =

5 0 0

0 7 0

0 0 -3

La orden “diag(A)” posee como variante la orden “diag(A,k)” que muestra la k—esima

superdiagonal de A, si k es positivo, y la k—esima subdiagonal, si k es negativo. (Observese

de nuevo la posibilidad de dar distinto numero de argumentos de entrada a una funcion

MATLAB).

Page 32: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

28 CAPITULO 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 analoga a la orden “diag(A)” nos encontramos las ordenes “triu(A)”

y “tril(A)” que generan matrices triangulares superiores y triangulares inferiores, respecti-

vamente, con los elementos superiores e inferiores, respectivamente, a la diagonal de A y

con los elementos diagonales de la misma.

>> TS=triu(A)

TS =

3 4 6 8

0 0 7 20

0 0 8 0

Tambien disponemos de las variantes “triu(A,k)” y “tril(A,k)” que actuan de forma

analoga a la instruccion “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 cuadradaA como

suma de una matriz triangular inferior L, una matriz diagonal D y una matriz triangular

superior U . (Esta descomposicion resulta util en la resolucion de S.E.L. mediantes metodos

iterativos).

Page 33: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 3

Sistemas de Ecuaciones Lineales y

descomposiciones

3.1 Resolucion de S.E.L.

3.1.1 Sistemas cuadrados

Si se desea resolver el S.E.L. (S) :Ax = b, donde A es una matriz cuadrada (no singular);

puede obtenerse la solucion mediante la operacion A\b. Esta operacion nos indica que estamosdividiendo, por la izquierda, el vector columna b por la matriz A, i.e., estamos haciendo la

operacion A−1b. Como se puede imaginar esta operacion no se realiza calculando la inversa1

de A, se lleva a cabo de forma general mediante el metodo de Gauss con estrategia de pivoteo

parcial. Por ejemplo, para resolver el sistema

x + 2y = 3

3x − 4y = −1se realizan las siguientes instrucciones:

• Introduccion de la matriz de coeficientes y el vector columna b.• Resolucion del sistema mediante la division izquierda A\b.

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

>> x=A\b

x =

1.0000

1.0000

Si A es singular, aun cuando el sistema sea compatible,MATLAB nos proporcionara un

mensaje de error.

1Pues el calculo de la inversa de una matriz es demasiado costoso desde el punto de vista computacional.

29

Page 34: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

30 CAPITULO 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. Deesta forma, podemos resolver el sistema anterior anadiendo 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, solo hemos obtenido una de las soluciones del sistema. Para

tener todas, solamente nos falta una base del espacio nulo (nucleo) de la matriz A. Veremos

como obtener esto en una proxima seccion.

Se ha puesto de manifiesto en este subapartado que la resolucion del sistema Ax = b,

llevada a cabo porMATLAB mediante la orden A\b, depende de la estructura de la matrizde coeficientes del sistema. De hecho, la division izquierda \ utiliza, a grandes rasgos, elsiguiente algoritmo:

• Si la matriz A es una permutacion de una matriz triangular superior (resp. inferior) seutiliza el metodo de subida (resp. bajada).

• Si A es simetrica (hermıtica) definida positiva se calcula la descomposicion de Choleskyde A, i.e., se determina la matriz triangular superior R con elementos diagonales es-

trictamente positivos tal que A = RtR y a continuacion se determina x de la forma

x = R\(R0\b).• Si la matriz de coeficientes no es una permutacion de una matriz triangular o no esdefinida positiva, la resolucion del sistema se lleva a cabo calculando la descomposicion

LU de A mediante el metodo de Gauss con estrategia de pivoteo parcial. Una vez

calculadas las matrices L y U , la solucion del sistema es x = U\(L\b).• Por ultimo, si A no es cuadrada se computa la descomposicion QR de A mediante

simetrıas de Householder. Es decir, se calcula Q ortogonal, R triangular superior y P

matriz de permutacion tales que AP = QR. Una vez obtenidas P,Q y R se calcula x

mediante x = P ∗ (R\(Q0 ∗ b)).

Page 35: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

3.1. RESOLUCION DE S.E.L. 31

3.1.3 Tiempo de calculo y numero de operaciones

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

A, si esta es regular (en realidad, solo podemos fiarnos del resultado final si A no es casi

singular). La resolucion de un determinado S.E.L. puede realizarse conMATLAB mediante

la orden “inv(A)*b”, pero como pondremos de manifiesto a continuacion es mas efectivo la

utilizacion del comando “A\b”. Esta eficacia se pone de manifiesto comparando el numerode operaciones de ambos metodos y el tiempo de calculo para llevar a cabo los mismos. El

numero de operaciones que MATLAB ha efectuado en una sesion puede obtenerse con el

comando “flops”. Ahora bien, la utilizacion de la version “flops(0)” hace que el contandor

(del numero de operaciones) se inicialice a cero, con lo que si seguidamente realizamos algunas

operaciones conMATLAB podemos conocer el numero de estas sin mas que teclear “flops”.

Para el sistema cuadrado

x + 2y = 3

3x − 4y = −1

comparamos el numero de operaciones:

>>flops(0)

>>x=A\b

x =

1.0000

1.0000

>>flops

ans =

33

>>flops(0)

>>x=inv(A)*b

x =

1.0000

1.0000

>>flops

ans =

44

Se observa que, incluso para un sistema con dos ecuaciones y dos incognitas, el numero

de operaciones es mucho mayor si utilizamos para resolver el sistema la orden “inv(A)∗b”.Dentro de los ejercicios que se acompanan al final se propone la construccion de una

funcion que nos permita resolver un S.E.L. cuadrado por el metodo de Cramer. Serıa conve-

niente que el lector comparase con algunos ejemplos el numero de operaciones necesario para

la resolucion del sistema utilizando el metodo de Cramer y el algoritmo division izquierda.

Page 36: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

32 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

Para la evaluacion de tiempos de calculo, tenemos varias posibilidades. Las funciones

“tic” y “toc” nos proporcionan conjuntamente el tiempo de calculo de cualquier expresion

MATLAB sin mas que teclear

>>tic

>>expresiones

>>toc

La funcion “cputime” nos propociona el tiempo en segundos usado porMATLAB desde

el instante en que entramos en el programa. De esta forma podemos calcular el tiempo de

calculo de cualquier expresion realizando las siguientes instrucciones:

>>t1=cputime

>>expresiones

>>t2=cputime-t1

Para comparar los tiempos de calculo tambien 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 ano, 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 numeros aleato-

rios, comprendidos entre cero y uno, con ayuda de la funcion “rand(m,n)”:

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

y resolvemos el sistema Ax = b mediante la division izquierda \ y mediante la inversa“inv(A)”:

>>t1=clock;x=A\b;etime(clock,t1)

ans =

0.5167

>>t1=clock;x=inv(A)*b;etime(clock,t1)

ans =

1.0333

Se comprueba que la resolucion del sistema mediante la orden “inv(A)∗b” necesita mayortiempo de calculo que la division izquierda (de hecho, casi el doble de tiempo).

2Hacemos esto, pues la diferencia entre los tiempos de calculo de los dos metodos para S.E.L. pequenos es

casi inapreciable.

Page 37: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

3.2. DESCOMPOSICIONES 33

3.2 Descomposiciones

3.2.1 Factorizacion LU.

Dada una matriz A “[L,U]=lu(A)” realiza la descomposicion LU (LR) de la matriz cuadrada

A. Esta descomposicion siempre se realiza siguiendo el metodo de Gauss con estrategia de

pivote parcial, por lo cual, aunque U es triangular superior, L en la 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 permutacion que nos da los intercambios

de filas. Es decir, PA = LU . Compruebese

>> [L,U,P]=lu(A)

L =

1.0000 0 0

-1.0000 1.0000 0

0.3333 -0.6667 1.0000

U =

3.0000 4.0000 6.0000

0 2.0000 14.0000

Page 38: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

34 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

0 0 14.3333

P =

1 0 0

0 0 1

0 1 0

Vemos que la funcion “lu” posee una caracterıstica particular: la funcion puede ser llama-

da con distinto numero de argumentos de salida segun nuestra finalidad. Esta caraterıstica

no es privilegio exclusivo de la funcion “lu”, sino muchas otras funciones de MATLAB,

como veremos mas adelante, tambien presentan esta particularidad.

3.2.2 Descomposicion de Cholesky

Si A es una matriz simetrica (hermıtica) definida positiva la descomposicion de Cholesky

de A se realiza con la funcion “chol(A)”. Se obtiene una matriz R triangular superior con

elementos diagonales estrictamente positivos tal que A = RtR.

>>S=[2 -1 0;-1 2 -1;0 -1 2]

S =

2 -1 0

-1 2 -1

0 -1 2

>>chol(S)

ans =

1.4142 -0.7071 0

0 1.2247 -0.8165

0 0 1.1547

Notese que se obtiene un mensaje de error si la matriz no es 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 funcion “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 descomposicion de Cholesky

de A.

Page 39: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

3.2. DESCOMPOSICIONES 35

• Si A no es definida positiva, entonces p es un numero entero estrictamente positivo yR 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 descomposicion de Cholesky de la mayor

submatriz principal de A que es definida positiva (y, salvo una unidad, el orden de esta).

>>[R,p]=chol(T)

R=

1.4142 -0.7071

0 1.2247

p=

3

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

valor la matriz vacia (matriz que no contiene elementos) y p sera igual a uno.

>>M=[-2 1;2 3];

>>[s,f]=chol(M)

s=

[ ]

f=

1

3.2.3 Factorizacion QR

La factorizacion QR de una matriz A, no necesariamente cuadrada, puede realizarse medi-

ante la orden “[Q,R]=qr(A)”; Q sera entonces una matriz ortogonal (o unitaria en el caso

complejo) y R una matriz triangular superior del mismo tipo que A, tales que A = QR. Tal

descomposicion se lleva a efecto mediante transformaciones de Householder y como se puede

observar en el siguiente ejemplo los elementos diagonales de R no tienen porque ser positivos.

(Se realiza la descomposicion de esta forma por cuestiones de estabilidad en el metodo).

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

>> [Q,R]=qr(M)

Q =

-0.3123 -0.7840 0.5365

-0.1562 -0.5147 -0.8430

0.9370 -0.3471 0.0383

R =

-12.8062 1.2494 -3.7482 -2.0303

0 -8.1510 -2.5375 -4.9732

0 0 -9.6183 4.5984

Podemos comprobar que Q es ortogonal, es decir, (salvo errores de redondeo) QtQ = I.

Page 40: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

36 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

>> Q’*Q

ans =

1.0000 -0.0000 -0.0000

-0.0000 1.0000 -0.0000

-0.0000 -0.0000 1.0000

De la misma forma que la funcion “lu”, la funcion “qr” tambien puede ser ejecutada

con tres argumentos de salida: la orden “[Q,R,P]=qr(A)” proporciona una matriz ortogonal

(unitaria) Q, una matriz R triangular superior con elementos diagonales decrecientes y una

matriz C de permutacion de columnas, tales que AC = QR.

>>[Q,R,MPC]=qr(M)

Q =

-0.3123 0.3187 0.8949

-0.1562 -0.9464 0.2826

0.9370 -0.0515 0.3454

R =

-12.8062 -3.7482 1.2494 -2.0303

0 -9.9474 -2.0792 3.1777

0 0 7.8814 5.9817

MPC =

1 0 0 0

0 0 1 0

0 1 0 0

0 0 0 1

Ponemos un ejemplo en el que se observa los elementos nulos en la diagonal de R.

>>MM=[1 1 2;2 0 2;-1 3 2;1 4 5]

MM =

1 1 2

2 0 2

-1 3 2

1 4 5

>>[Q,R]=qr(MM)

Q =

-0.3780 0.1416 0.6928 -0.5976

-0.7559 -0.1133 -0.5978 -0.2417

0.3780 0.6516 -0.3863 -0.5323

-0.3780 0.7366 0.1165 0.5487

R =

-2.6458 -0.7559 -3.4017

0 5.0427 5.0427

Page 41: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

3.2. DESCOMPOSICIONES 37

0 0 -0.0000

0 0 0

Hacemos notar que, una vez conocida R, el calculo 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 Ortonormalizacion y espacio nulo

Gracias a la descomposicion QR que se obtiene mediante MATLAB podemos calcular una

base ortonormal del espacio columna y una base ortonormal del espacio nulo (nucleo) de una

matriz A.

La funcion que permite obtener una base ortonormal del espacio columna de A es “or-

th(A)” y una base ortonormal del espacio nulo nos la proporciona la funcion “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 OrtOr y nulotnulo.

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

Page 42: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

38 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

Notese que con ayuda de “null” y \ se pueden resolver sistemas de ecuaciones compatiblesindeterminados. Por ejemplo, el sistema compatible indeterminado

x+ 2y = 3

2x+ 4y = 6

puede resolverse siguiendo los pasos:

1. Si es necesario, se anade un fila nula a la matriz ampliada para conseguir un sistema

no cuadrado.

2. Se calcula una solucion particular del mismo.

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

Estos tres pasos se realizan enMATLAB 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

Page 43: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

3.3. NORMAS Y NUMERO DE CONDICION 39

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

x = −0.8944αy = 1.5 + 0.4472α

con α ∈ R

3.3 Normas y numero de condicion

3.3.1 Normas vectoriales y matriciales

Si A es una matriz cuadrada “norm(A,p)” (siendo p = 1, 2, inf) proporciona la norma p de

A.

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

>> N2=norm(V,2)

N2 =

8.0828

>> N1=norm(V,1)

N1 =

9

>> Ninf=norm(V,inf)

Ninf =

9

Puesto que en la 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 funcion

“norm” puede tener distinto numero 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 Numero de condicion y rango

El numero de condicion de una matriz nos proporciona el valor maximo de amplificacion de

los errores relativos en la resolucion de un S.E.L. sometido a perturbaciones. Si el numero de

condicion es mucho mayor que uno, la matriz esta mal condicionada y no debemos fiarnos de

la solucion del sistema; si por el contrario es proximo a uno, la matriz se dice bien condicionada

y los posibles errores relativos en la solucion estan acotados por los errores relativos cometidos

en los datos del sistema (matriz y termino independiente).

El numero de condicion de una matriz A se calcula mediante MATLAB con la funcion

“cond(A)”. Para la matriz de Hilbert anterior

Page 44: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

40 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

>> cond(H)

ans =

4.7661e+005

Parece, entonces, necesario obtener el numero de condicion 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 aproximacion

del inverso del numero de condicion de la matriz de coeficientes A, dandonos un aviso para

que tengamos en cuenta que si “rcond(A)” es pequeno, hay posibilidad de un gran error en

la solucion si hemos cometido un pequeno error en los datos del sistema. Para la matriz

“H=hilb(5)”, 1/cond(A) = 2.0982e− 006 y mediante la funcion “rcond” se obtiene:>> rcond(H)

ans =

1.4407e-006

Ponemos de manifiesto a continuacion la ventaja de la informacion complementaria de

MATLAB cuando resolvemos un S.E.L. Por ejemplo, para la resolucion del sistema

x + 2y + 3z = 1

4x + 5y + 6z = 0

7x + 8y + 9z = 0

mediante MATLAB, se efectuan 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

Page 45: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

3.3. NORMAS Y NUMERO DE CONDICION 41

Apreciamos en la obtencion de la resolucion del sistema un mensaje de error que nos

informa que la matriz de coeficientes puede ser casi singular (estar mal condicionada). De

hecho la solucion que hemos obtenido no es solucion 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 queMATLAB “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 ademas ha “cal-

culado” la inversa de A. Evidentemente esta matriz no es la inversa de A, pues A ∗ ans noda 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

Ademas, como puede comprobarse facilmente, nuestro sistema es INCOMPATIBLE.

Advertencia: Aunque MATLAB nos da informacion 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 ningun mensaje de precaucion a la hora de resolver el sistema

Page 46: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

42 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES

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

(o “rcond(A)”) antes de resolver un sistema y tomar la decision de resolverlo una vez conocido

el numero de condicion de la matriz de coeficientes.

El rango de una matriz se calcula mediante MATLAB con la funcion “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 numero de valores singulares (ver mas

adelante) casi no nulos de esta. Esto permite utilizar la funcion “rank” con dos argumentos

de entrada: “rank(A,tol)” que considera nulos los valores singulares menores que tol.

>> rank(H,.001)

ans =

3

Si hemos introducido un solo argumento de entrada para “rank” el valor de tol viene dado

por defecto como tol=max(size(A))∗norm(A)∗eps.Finalizamos esta seccion proponiendo al lector que resuelva los siguientes sistemas de

ecuaciones, que se encuentran propuestos en el libro de G. Strang, Algebra Lineal Aplicada,

y que compare los resultados obtenidos:

[A]

(x + y = 2

x + 1.0001y = 2

[B]

(x + y = 2

x + 1.0001y = 2.0001

Page 47: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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 funcion “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 condicion: V X = XD. Por tanto, las columnas de X son

autovectores de V .

En el siguiente ejemplo comprobamos que las columnas de X no tienen por que ser

linealmente independientes (tenganse en cuenta los errores de redondeo).

>>N=[1 1;0 1];

>>[X,D]=eig(N)

X =

1.0000 -1.0000

0 0.0000

D =

1 0

43

Page 48: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

44 CAPITULO 4. AUTOVALORES Y POLINOMIOS

0 1

>>rank(X)

ans =

1

La funcion “eig(A)” puede utilizar uno o dos argumentos de salida. En el caso de utilizar

dos argumentos se obtienen los autovectores y los autovalores como se ha descrito anterior-

mente. Cuando utilizamos un unico argumento de salida obtenemos un vector columna que

contiene los autovalores (puede que repetidos) de la matriz A.

>>aut=eig(V)

aut =

5.7446

-5.7446

>>VV=[1 2;-2 1]

VV =

1 2

-2 1

>>autVV=eig(VV)

autVV =

1.0000 + 2.0000i

1.0000 - 2.0000i

Estrechamente relacionadas con el calculo de autovalores tenemos la funciones “hess(A)”

y “schur(A)” que calculan la forma de Hessenberg y la forma de Schur (superior) de A,

respectivamente. Para la matriz de Hilbert de orden cinco y la matriz V anterior se obtiene:

>>hess(H)

ans =

0.0001 0.0002 0 0 0

0.0002 0.0079 0.0143 0 0

0 0.0143 0.2556 -0.3302 0

0 0 -0.3302 1.4126 -0.3222

0 0 0 -0.3222 0.1111

>>schur(V)

ans =

5.7446 -4.0000

-0.0000 -5.7446

Observese que en la diagonal de la matriz de Schur aparecen los autovalores de V .

Page 49: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

4.2. VALORES SINGULARES Y PSEUDOINVERSA 45

4.2 Valores singulares y pseudoinversa

La descomposicion en valores singulares de una matriz A cualquiera se efectua por medio de

la funcion “svd”. De esta forma, la orden “[U,S,V]=svd(A)” proporciona una matriz diagonal

S, del mismo tipo que A, y dos matrices ortogonales (unitarias) U y V tales que A = USV t.

Los elementos de la diagonal de S son por tanto los valores singulares de la matriz A, i.e.,

la raız cuadrada1 de los autovalores de la matriz simetrica (hermıtica) semidefinida positiva

AtA (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 AtA son los valores sin-

gulares de A:

>>sqrt(eig(A’*A))

ans =

1.3846

3.7527

Vease que la funcion “sqrt” ha actuado sobre cada uno de los elementos del vector columna

formado por los autovalores de AtA.

Naturalmente la descomposicion en valores singulares tambien es posible para matrices

con elementos complejos:

>>C=[2+i -i;3 3+2*i];

>>[U,S,V]=svd(C)

1Puesto que A∗A es hermıtica semidefinida positiva sus autovalores son no negativos.

Page 50: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

46 CAPITULO 4. AUTOVALORES Y POLINOMIOS

U =

0.2292 + 0.0156i -0.7696 - 0.5958i

0.9710 + 0.0660i 0.1817 + 0.1406i

S =

4.7900 0

0 2.2485

V =

0.7071 -0.7071

0.6325 - 0.3162i 0.6325 - 0.3162i

La funcion “svd” permite la posibilidad de incluir varios argumentos de salidas. En

concreto, podemos utilizar uno o tres argumentos de salida. En el caso de la utilizacion de

“svd” con tres argumentos se obtienen las tres matrices anteriores y cuando se utiliza un solo

argumento de salida, se almacenan en el, los valores singulares formando un vector columna.

>>MN=[1 2 3;4 5 6;5 7 9]’

MN =

1 4 5

2 5 7

3 6 9

>>vs=svd(MN)

vs =

15.6633

0.8126

0.0000

Notese que uno de los valores singulares de MN es nulo; esto sucede porque MN no es de

rango maximo.

Relacionada con el algoritmo de calculo 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 sercalculada, una vez obtenida la descomposicion en valores singulares de A, como A+ = V S+U∗

donde S+ es la matriz diagonal de orden n×m cuyos elementos diagonales no nulos son los

inversos de los elementos no nulos de S. Recuerdese ademas, que A+A = I y que la pseu-

doinversa de A coincide con la inversa de A si esta es cuadrada y regular.

>>ps=pinv(A)

ps =

0.4444 -0.5556 -0.1111

0.1111 0.1111 0.2222

>>ps*A

ans =

1.0000 -0.0000

Page 51: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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: solo hace falta introducir los coeficientes del polinomio (en orden decreciente de

potencias) en un vector fila2. Aquellos resultados que nos muestren como salidas polinomios

tambien seran recogidos de esta forma.

Ası, el polinomio p(x) = 2x3 − 3x+ 7 es representado por MATLAB como

>>p=[2 0 -3 7]

p =

2 0 -3 7

4.3.1 Polinomio caracterıstico de una matriz cuadrada

La instruccion “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

2La dimesion del vector fila sera mayor en una unidad que el grado del polinomio.

Page 52: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

48 CAPITULO 4. AUTOVALORES Y POLINOMIOS

Luego el polinomio caracterıstico de M es

pC(λ) = λ3 − 5λ2 − 84λ+ 1004y podemos observar que el determinante de M es, salvo signo, el termino 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, tengase en cuentaque para sumar o restar matrices estas deben tener la misma dimension y por consiguiente,

podemos realizar suma o diferencia de polinomios, siempre y cuando, estos tengan el mismo

grado. Por ejemplo si p(x) = 3x3 + 2x2 − x + 1 y q(x) = −7x3 + 3x2 + 2x − 15 la suma ydiferencia 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 deforma tan simple:

>>q=[3 2 -15]

q =

3 2 -15

>>p+q

??? Error using ==> +

Matrix dimensions must agree.

Page 53: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

4.3. TRATAMIENTO DE POLINOMIOS 49

El lector deberıa pensar una estrategia que permita sumar o restar polinomios de grados

diferentes. La multiplicacion y division de los polinomios p y q se llevan a cabo con las

funciones “conv(p,q)” y “[c,r]=deconv(p,q)”. Para la funcion “deconv” se entiende que en c

se guarda el cociente de la division 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 calculo anterior se obtiene que

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

El cociente y el resto de la divisionx5 − 2x4 − x3 + 7x2 − 6x+ 2

x2 − 2x+ 1 se calculan mediante:

>>p=[1 -2 -1 7 -6 2]

p =

1 -2 -1 7 -6 2

>>q=[1 -2 1]

q =

1 -2 1

>>[c,r]=deconv(p,q)

c =

1 0 -2 3

r =

0 0 0 0 2 -1

Es decir, c(x) = x3 − 2x+ 3 y r(x) = 2x− 1. Compruebese.Incluimos en esta seccion una funcion que nos parece bastante interesante. Se trata de

la funcion “residue” que nos proporciona, a grandes rasgos, la descomposicion en fracciones

simples de una funcion racional cuyo denominador posee raıces reales simples. De esta forma,

la instruccion “[a,r,k]=residue(p,q)” obtiene la descomposicion

P (x)

Q(x)=

a1x− r1 + · · ·+

anx− rn + k(x)

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.

Por ejemplo, la descomposicion en fraciones simples de x2

x2−1 viene dada por:

Page 54: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

50 CAPITULO 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

x2 − 1 =−0.5x+ 1

+0.5

x− 1 + 1

La funcion “residue” actua en MATLAB como su propia inversa, pues si se utiliza con

tres argumentos de entrada y dos de salida, es decir, de la forma “[p,q]=residue(a,r,k)”,

nos proporciona la funcion racional que tiene como descomposicion 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 almacenaran en un vector columna.

Por ejemplo, las soluciones de la ecuacion x2 − 1 = 0 se obtiene facilmente:

>>p=[1 0 -1]

p =

1 0 -1

>>rp=roots(p)

rp =

-1

1

Si el polinomio posee raıces complejasMATLAB tambien nos las proporciona. Las raıces

de q(x) = x3 − 2x2 + x− 2 son:

Page 55: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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 lafuncion “polyval(p,x)”. De esta forma, por ejemplo, podemos comprobar que p y q se anulan

(salvo errores de redondeo) en las componentes de rp y rq, respectivamente:

>>polyval(p,rp(1)),polyval(p,rp(2))

ans =

0

ans =

0

>>polyval(q,rq(1)),polyval(q,rq(2)),polyval(q,rq(3))

ans =

-6.6613e-15

ans =

0+ 2.2204e-16i

ans =

0- 2.2204e-16i

Puede tambien evaluarse el valor del polinomio en una serie de puntos, sin mas 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 queMATLAB utiliza para calcular las raıces de un polinomio esta basado

en la funcion “compan(p)” que determina la matriz companera del polinomio p; esto es, la

Page 56: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

52 CAPITULO 4. AUTOVALORES Y POLINOMIOS

matriz cuyo polinomio caracterıstico es, salvo constante multiplicativa, el polinomio dado.

Por ejemplo, la matriz companera 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 companera de un polinomio p, con ayuda de

la funcion “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 Aproximacion por polinomios en el sentido de los mınimos cuadrados

Dados dos vectores x e y, de la misma dimension, la instruccion “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 funcion “polyfit”a la resolucion del siguiente problema:

En un experimento para determinar la capacidad de orientacion se coloca a un

individuo en una habitacion especial y despues de un cierto tiempo en ella se le

pide que encuentre el camino de salida de un laberinto. Se obtienen los siguientes

resultados:

Page 57: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

4.3. TRATAMIENTO DE POLINOMIOS 53

Tiempo en la habitacion (horas): 1 2 3 4 5 6

Tiempo en salir del laberinto (minutos): 0.8 2.1 2.6 3 3.1 3.3

Se pide:

1. Encontrar la recta que mejor aproxime a los datos anteriores.

2. Con la recta obtenida, estimar el tiempo que tardarıa en salir del laberinto una persona

que ha permanecido en la habitacion 10 horas.

Puesto que nos piden una recta debemos encontrar el polinomio de grado uno que mejor

aproxime a los punto de la tabla anterior:

>>x=1:6

x =

1 2 3 4 5 6

>>y=[0.8 2.1 2.6 3 3.1 3.3]

y =

0.8000 2.1000 2.6000 3.0000 3.1000 3.3000

>>recta=polyfit(x,y,1)

recta =

0.4543 0.8933

>>rats(recta)

ans =

159/350 67/75

Luego la recta que mejor aproxima, en el sentido de los mınimos cuadrados, viene dada

por la ecuacion y = 159/350x+ 67/75 y el tiempo estimado para salir del laberinto despues

de diez horas en la habitacion 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 estimacion se puede obtener calculando el polinomio de interpolacion 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

Page 58: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

54 CAPITULO 4. AUTOVALORES Y POLINOMIOS

1 2 3 4 5 6 7 8 9 100

1

2

3

4

5

6

7

Tiempo en la habitacion

Tiem

po e

n el

labe

rinto

Aproximacion por minimos cuadrados

Figura 4.1: Recta de regresion

>>estimado2=polyval(poliinterp,10)

estimado2 =

118.1000

Es decir, el polinomio de interpolacion tiene por ecuacion 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-imacion puede contemplarse en la siguiente figura, que ha sido realizada conMATLAB. (En

el capıtulo dedicado a las posibilidades graficas aprenderemos a generarla).

4.3.5 La orden polyvalm y semejantes

En la subseccion anterior hemos visto como MATLAB puede propocionarnos el valor de

un polinomio p en una cierta coleccion de puntos gracias a la funcion “polyval”. Pues bien

si p(x) = cnxn + cn−1xn−1 + · · · + c1x + c0, el valor de p en la matriz A, i.e., p(A) =

cnAn + cn−1An−1 + · · ·+ c1A+ c0 puede obtenerse con la funcion “polyvalm(p,A)”.

>>p=[1 2 -1]

p =

1 2 -1

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

A =

1 2

-1 1

3Observese la diferencia tan enorme entre las dos estimaciones.

Page 59: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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. (Tengase en cuenta los errores de

redondeo).

>>pcA=poly(A)

pcA =

1.0000 -2.0000 3.0000

>>polyvalm(pcA,A)

ans =

1.0e-15 *

0.4441 0

0 0.4441

La orden “polyvalm” nos permite evaluar un polinomio matricialmente, pero no solo

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

Notese que, salvo errores de redondeo, sqrtm(A)*sqrt(A)=A y logm(expm(A))=A.

>>logariteA=logm(expoA)

logariteA =

1.0000 2.0000 - 0.0000i

-1.0000 - 0.0000i 1.0000 + 0.0000i

>>raizA*raizA

Page 60: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

56 CAPITULO 4. AUTOVALORES Y POLINOMIOS

ans =

1.0000 + 0.0000i 2.0000 + 0.0000i

-1.0000 + 0.0000i 1.0000 - 0.0000i

No solo las anteriores funciones pueden ser evaluadas matricialmente, sino que cualquier

funcion elemental puede ser evaluada en una matriz. Esto se consigue con la ayuda de la

funcion deMATLAB “funm(A,‘funcion’)” que determina el valor de “funcion” 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

Page 61: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 5

Posibilidades graficas

A continuacion detallamos algunas de las posibilidades de representacion grafica que nos

ofreceMATLAB. Como siempre recomendamos una viva lectura del manual para una vision

mas extensa de las posibilidades de visualizacion grafica.

5.1 Graficos en el plano

5.1.1 Poligonales y curvas

La curva mas simple que podemos dibujar es una poligonal. Para ello, basta introducir un

vector M y teclear “plot(M)”; esto produce la representacion 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 grafica y etiquetas a los ejes mediante las instrucciones:

>> title(’POLIGONAL’)

>> xlabel(’eje de abcisa’)

>> ylabel(’eje de ordenada’)

Para obtener un mallado del grafico tecleamos

>> grid

De manera analoga, si introducimos dos vectores x e y, de la misma dimension, la in-

struccion “plot(x,y)” nos proporcionara la grafica 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

Page 62: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

58 CAPITULO 5. POSIBILIDADES GRAFICAS

1 1.5 2 2.5 3 3.5 4 4.5 5-2

-1

0

1

2

3

4

5

6POLIGONAL

eje de abcsisa

eje

de o

rden

ada

Figura 5.1: Una poligonal

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

0

2

4

6

8

10

12

14

16PARABOLA

Figura 5.2

Figura 5.2: Una parabola

Page 63: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

5.1. GRAFICOS EN EL PLANO 59

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

-0.5

0

0.5

1

1.5

2

2.5

3PARÁBOLA

Figura 5.3: Cambio en los ejes

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

un grafico bidimensional, pues tecleando “gtext(‘texto’)” despues de realizar un grafico nos

aparecera este en pantalla y el vector puntero de nuestro raton. Seguidamente situamos el

puntero donde queramos poner el texto y pulsamos, por ultimo, el boton del raton para

disponer el texto en el lugar elegido.

Para modificar la escala de los ejes en los que se representa el grafico (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.

Tambien podemos dibujar simultaneamente varias curvas con una instruccion de la forma

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

que mostrara en pantalla todas las curvas (xI,yI) (con la opcion ’simbI’) en unico grafico.

En la figura 5.4 se ilustra el uso conjunto de estas dos ultimas posibilidades.

Page 64: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

60 CAPITULO 5. POSIBILIDADES GRAFICAS

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

-0.5

0

0.5

1

1.5

2

2.5

3DISTINTOS TIPOS DE LINEAS

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 (modulo). 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 representacion sin el sistema de referencia procederemos como se indica

a continuacion:

>> clf

>> axis off

Page 65: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

5.1. GRAFICOS EN EL PLANO 61

ESPIRAL LOGARITMICA

5000

1e+004

1.5e+004

2e+004

2.5e+004

30

210

60

240

90

270

120

300

150

330

180 0

Figura 5.5: Espiral logarıtmica

>> hold on

>> polar(th,R)

>> title(’ESPIRAL LOGARITMICA’)

>> hold off

La orden “clf” limpia la pantalla grafica. El comando “axis off” desactiva los ejes del

grafico que nos disponemos a realizar. La orden “hold on” hace que se superpongan en dicha

ventana todos los graficos que se dibujen a continuacion. La orden “hol off” anula “hold

on”. La utlizacion de estas dos ordenes reviste interes, ademas de en este caso concreto, en

aquellos casos en los que interese visualizar simultaneamente distintas graficas en una misma

figura.

5.1.3 Curvas en parametricas

El siguiente ejemplo ilustra la representacion de una curva dada mediante sus ecuaciones

parametricas.

>> t=0:.1:2*pi;

>> x=5*cos(t)-cos(5*t);

>> y=5*sin(t)-sin(5*t);

>> plot(x,y)

>> grid

>> title(’EPICICLOIDE’)

>> axis(’square’)

Page 66: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

62 CAPITULO 5. POSIBILIDADES GRAFICAS

ESPIRAL LOGARITMICA

Figura 5.6: Espiral sin ejes

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

-4

-2

0

2

4

6EPICICLOIDE

Figura 5.7: Curva en parametricas

Page 67: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 63

-4 -3 -2 -1 0 1 2 3 4 5 60

10

20

30

40

50

60

Figura 5.8: Diagrama de barras

5.1.4 Histogramas y diagramas de barras

En esta brevısima seccion estudiaremos dos formas mas de representacion bidimensional: las

ordenes “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 parametricas

La representacion de una curva en el espacio dada mediante sus ecuaciones parametricas se

hace de modo similar al caso plano. Se utiliza la orden “plot3”

>> t = 0:pi/50:10*pi;

>> plot3(sin(t),cos(t),t);

>>title(’HELICE’)

Page 68: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

64 CAPITULO 5. POSIBILIDADES GRAFICAS

-2 -1 0 1 2 3 40

10

20

30

40

50

60

Figura 5.9: Escalera

-1-0.5

00.5

1

-1-0.5

00.5

10

5

10

15

20

25

30

35

HELICE

Figura 5.10: Curva en el espacio

Page 69: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 65

-10-5

05

10

-10-5

05

10-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

EL SOMBRERO

Superficie

Figura 5.11: Una curiosa superficie

5.2.2 Superficies

Para representar una funcion 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 funcion de x e y.

3. Dibujamos la superficie mediante la opcion “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 mas que elegir los

1Tambien exite la orden “text(x,y,‘texto’)” para graficos bidimensionales

Page 70: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

66 CAPITULO 5. POSIBILIDADES GRAFICAS

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

figura girada tecleando, a continuacion de “mesh(x,y,z)”, la orden “view(al,el)”, siendo “al”

y “el” los angulos elegidos.

La pantalla grafica puede ser dividida en varios trozos en los que se pueden realizar

distintos graficos. Esto se consigue mediante una instruccion del tipo “subplot(ijk)” seguida

de una orden de dibujo: la pantalla grafica quedara dividida en i× j trozos y nuestro dibujoaparecera en el k-esimo.

La figura 5.12 combina las ordenes “view” y “subplot”:

>> subplot(221),mesh(x,y,z),view(45,0)

>> subplot(222),mesh(x,y,z),view(45,-25)

>> subplot(223),mesh(x,y,z),view(45,-50)

>> subplot(224),mesh(x,y,z),view(45,-75)

5.2.3 Curvas de nivel y vector gradiente

MATLAB permite dibujar las lıneas de contorno de una superficie, las curvas de nivel y

vectores gradiente.Esto se ilustra en los siguientes ejemplos:

En primer lugar dibujamos en la figura 5.13 la superficie de ecuacion z = xe−x2−y2 ,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 grafica simultanea de la superficie y de las curvas de nivel utilizaremos

“meshc(x,y,z)”

Page 71: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 67

-10 0 10-10 0 10-0.5

0

0.5

1

-100

10-100

10

-0.5

0

0.5

1

-100

10-100

10

-1

0

1

-10

0

10-10

0

10

-101

Figura 5.12: Distintos tipos de vista

Page 72: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

68 CAPITULO 5. POSIBILIDADES GRAFICAS

-2-1

01

2

-2-1

01

2-0.5

0

0.5

SUPERFICIE

Figura 5.13: z = e−x2−y2

-2-1

01

2

-2-1

01

2-0.4

-0.2

0

0.2

0.4

Lineas de contorno

Figura 5.14: Representacion realizada con contour3

Page 73: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 69

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

-1.5

-1

-0.5

0

0.5

1

1.5

2Curvas de nivel

Figura 5.15: Utilizacion del comando contour

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

-1.5

-1

-0.5

0

0.5

1

1.5

2

-0.4 -0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

Curvas de nivel

Figura 5.16: Con clabel se etiquetan las curvas nivel

Page 74: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

70 CAPITULO 5. POSIBILIDADES GRAFICAS

-2-1

01

2

-2-1

01

2-0.5

0

0.5

Superficie y curvas de nivel

Figura 5.17: Grafica realizada con meshc

>> meshc(x,y,z)

>> title(’Superficie y curvas de nivel’)

Si queremos visualizar las curvas de nivel y los vectores gradiente utilizaremos las ordenes

“gradient” y “quiver”. Esta ultima orden visualiza un vector cuyas componentes vienen dadas

por “gradient”

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

>> z = x .* exp(-x.^2 - y.^2);

>> [px,py] = gradient(z,.1,.1);

>> contour(x,y,z);

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

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

En el siguiente ejemplo se dibujan las curvas de nivel identificandolas con la opcion “man-

ual” de la orden “clabel”. Utilizando dicha opcion nos situamos en la vantana gr’afica y

pulsamos el raton encima de la curva que deseemos, seguidamente aparecera junto a ella el

numero 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’);

Page 75: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 71

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

-1.5

-1

-0.5

0

0.5

1

1.5

2Curvas de nivel y vector gradiente

Figura 5.18: Utilizacion de quiver

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

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

Para graficos tridimensionales las utilizacion de “axis” es similar al caso bidimensional.

Para trabajar con distintas figuras simultaneamente, en distintas ventanas, se utilizara la

orden “figure(n)”.

Page 76: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

72 CAPITULO 5. POSIBILIDADES GRAFICAS

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

-1.5

-1

-0.5

0

0.5

1

1.5

2Curvas de nivel y vector gradiente

-0.1

-0.2

-0.3

-0.4

0.1

0.2

0.3

0.4

Figura 5.19: El comando clabel con la opcion manual

Page 77: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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 sesion de

MATLAB. Esta caracterıstica es particularmente interesante, ya que nos permitira definir

nuevas funciones: que podran ser utilizadas posteriormente del mismo modo que aquellas de

que disponemos enMATLAB; y crear lo que podemos llamar programas, que se ejecutaran

dentro de una sesion.

Los ficheros que podemos editar para su utilizacion desde MATLAB seran ficheros de

texto en ASCII, creados por un editor que queda a nuestra eleccion. La extension de estos

ficheros sera .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

sucesion de instrucciones deMATLAB. Al teclear dentro de una sesion el nombre del fichero

se produce la ejecucion secuencial de todas las instrucciones en el 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

Page 78: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

74 CAPITULO 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 podran ser utilizadas en la sesion 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 deMATLAB.

Al disponerMATLAB de instrucciones del tipo IF, WHILE y FOR (analogas a las que

podemos encontrar en lenguajes de programacion como FORTRAN o PASCAL) si un M—

fichero “nombre.m” contiene una sucesion de instrucciones de este tipo que describen una

cierta tarea, al teclear dentro de una sesion el nombre del fichero, dichas instrucciones se

ejecutaran secuencialmente dando un resultado similar a la ejecucion de un programa por un

interprete.

Antes de continuar describiremos las instrucciones “if”, “while” y “for” anteriormente

mencionadas y algunas otras que resultan utiles en este contexto. Para ello comentaremos,

dentro de un ejemplo concreto, el uso y posibilidades de estas ordenes.

El 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’);

Page 79: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

6.1. INSTRUCCIONES ENMATLAB: INPUT, IF,ERROR,WHILE,BREAK,PAUSE, FOR . . .

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

ep=input(’ep= ’);

if ep<=0

error(’El test de parada debe ser >0’)

end

if feval(g,a)==0

solucion=a

return

end

if feval(g,b)==0

solucion=b

return

end

if feval(g,a)*feval(g,b)>0

error(’El intervalo podria no contener solucion’)

end

i=0;

while b-a>=ep

i=i+1;

c(i)=(a+b)/2;

gc(i)=feval(g,c(i));

if gc(i)==0

disp(’La solucion se ha obtenido en uno de los puntos medios’)

disp(’de los subintervalos’)

solucion=c(i)

return

end

if feval(g,a)*gc(i)<0

b=c(i);

else

a=c(i);

end

end

d=(a+b)/2;%Cuando hemos conseguido la tolerancia dada en ep,

%tomamos como solucion el punto medio del intervalo.

solucion=d

disp(’El numero de iteraciones es:’)

i

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

’Si’,’No’);

if iop==1

Page 80: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

76 CAPITULO 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 continuacion del tanto por ciento sera

interpretado como un comentario y no se evaluara.

La lınea,

disp(’Deme el extremo inferior del intervalo’)

hace que el programa disponga en pantalla el texto escrito entre las comillas. (La funcion

“disp(matriz)” hace que la matriz1 aparezca en pantalla).

La orden:

a=input(’a= ’);

detiene momentaneamente la ejecucion del programa, mostrando en pantalla a=, esperando

la introduccion de un dato numerico que sera asignado a la variable “a”. La opcion

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

detiene el programa a la espera de la introduccion de una cadena de caracteres, que se asignara

a la variable g.

La instruccion “feval(g,a)” nos da el valor numerico de la funcion “g” en el punto “a”. La

variable “g” debe contener, como cadenas de caracteres, el nombre del fichero que contiene

la definicion de la funcion que deseamos aplicar sobre “a”. Por ejemplo, sen(1/2) y log(−1)se pueden obtener con ayuda de la funcion “feval” como sigue:

>>feval(’sin’,1/2)

ans =

0.4794

>>feval(’log’,-1)

ans =

0 + 3.1416i

El conjunto de instrucciones

if feval(g,a)*gc(i)<0

b=c(i);

else

a=c(i);

end

1Recuerdese que una matriz puede estar formada por cadena de caracteres.

Page 81: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

6.1. INSTRUCCIONES ENMATLAB: INPUT, IF,ERROR,WHILE,BREAK,PAUSE, FOR . . .

actua de la siguiente manera:

si la condicion “feval(g,a)*gc(i)<0” se satisface, entonces la variable “b” toma el valor “c(i)”,

en caso contrario “a” tomara el valor “c(i)”.

La estructura general de un bloque IF es la siguiente:

if condicion1

instrucciones1

elseif condicion2

instrucciones2

.

.

.

else instruccionesN end

y actua de la siguiente forma:

Si “condicion1” se satisface se ejecutaran solamente las “instrucciones1”, si por el contrario

se satisface “condicion2” solo las “instrucciones2”se ejecutaran, . . . . Si ninguna de estas

condiciones es satisfecha se ejecutara solo el bloque “instruccionesN”. Las condiciones que

aparecen en un bloque IF son expresiones del tipo: “expresion1 S expresion2”, donde S puede

ser: == (igual), <,>,<=, >= y ∼ = (distinto), incluidos los operadores logicos & (y), | (o),∼ (No) y las funciones logicas que se encuentran en los cuadros—resumen del ultimo capıtulo.

La orden

error(‘texto’)

detiene definitivamente la ejecucion 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 faciles de entender. La estructura general es:

while condicion

instrucciones

end

Page 82: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

78 CAPITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS

lo que provoca la ejecucion de las instrucciones detalladas mientras la condicion 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 instruccion “return” detiene por completo la ejecucion del programa. En nuestro

ejemplo se ha utilizado para romper el programa cuando la solucion es trivial (i.e., algunos

de los extremos del intervalo) o se ha alcanzado la solucion exacta en los puntos medios de

los subintervalos.

Una vez que el flujo del programa llega a la a instrucion

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

’Si’,’No’);

aparece en pantalla2 el siguiente menu:

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

1) Si

2) No

Select a menu number:

y el programa se detiene momentaneamente a la espera de introducir uno de los valores

de opcion. Si introducimos el valor 1, entonces la variable “iop” tomara el valor 1 y la

representacion se llevara a cabo, debido a la inclusion en el programa del bloque:

2Si utilizamos MATLAB en un entorno de ventanas aparecera una ventana con botones de opcion.

Page 83: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

6.1. INSTRUCCIONES ENMATLAB: 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 numero 2, la representacion no se realizarıa.

Si se desea interrumpir por un momento el programa (por ejemplo, para comprobar

algunos datos) incluimos en el la orden “pause” que lo detendra hasta que alguna tecla

sea pulsada. Tambien disponemos de la opcion “pause(n)” que lo detiene por n segundos.

Para terminar comentamos los bucles FOR. La estructura de uno de estos bucles es:

for expresion

instrucciones

end

Por ejemplo, usando FOR podemos crear una matriz triangular inferior mediante dos

bucles anidados:

>> for i=1:4

for j=1:1:i

A(i,j)=1;

end

end

>> A

A =

1 0 0 0

1 1 0 0

1 1 1 0

1 1 1 1

Por ultimo, senalamos que los programas en MATLAB, como el programa “bg”, no

poseen variables internas al mismo. Esto es, cualquier variable definida en el programa pasa,

automaticamente, a formar parte de las variables del espacio de trabajo. Por consiguiente, si

en una sesion definimos la variable a como:

>>a=[1 2;2 4]

a =

1 2

2 4

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

Page 84: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

80 CAPITULO 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

metodo de biseccion:

>>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 el. Por ejemplo, podemos saber cual es el valor de

“c(9)” en el programa “bg”:

>>c(9)

ans =

1.0029

Page 85: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

6.2. DEFINICION DE FUNCIONES 81

6.2 Definicion de funciones

Podemos utilizar M—ficheros para definir nuevas funciones no incorporadas al conjunto de

funcionesMATLAB.

Si queremos definir una funcion 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 funcion y el del fichero) cuya

primera lınea debe ser

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

y las restantes contendran la propia definicion de la funcion 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 sesionMATLAB introducimos un vector columna v y tecleamos “H=house(v)”

la variable H tomara como valor la matriz de Householder asociada al vector v, es decir,

H = I − 2xxtxtx

>> v=[1 4 -7 0]’;

>> H=house(v)

H =

0.9697 -0.1212 0.2121 0

-0.1212 0.5152 0.8485 0

0.2121 0.8485 -0.4848 0

0 0 0 1.0000

Notese que N es una variable interna de la funcion “house” que no pasara a formar de

nuestro espacio de trabajo. Vease

>>N

??? Undefined function or variable.

Symbol in question ==> N

Page 86: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

82 CAPITULO 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 funcion “house(x)”. Ası, con ayuda de la orden “help” podemos obtener

informacion de la funcion “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” (numero de argumentos de

entrada) y “nargout” (numero de argumentos de salida). Pues bien, como no podıa ser menos,

cualquier funcion creada por el usuario puede poseer esta caracterıstica si ası lo explicitamos

en la definicion de nuestra funcion. Para ver esto nos creamos la funcion “numero” que nos

daran el numero de argumentos de entrada y el numero de argumentos de salida cuando

realizamos una llamada a la funcion “numero”.

El fichero “numero.m” contiene:

function [y1,y2,y3,y4,y5,y6,y7,y8,y9,y10]=numero(x1,x2,x3,x4,x5,...

x6,x7,x8,x9,x10)

%NUMERO: Numero de argumentos de entrada y salida

%Esta funcion nos proporciona el numero de argumentos de entrada

%y salida. Como maximo podemos dar diez argumentos de entrada y diez

%de salida.

y1=nargin;

y2=nargout;

De esta forma si teclamos

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

las variables a y b contendran el numero de argumentos de entrada y de salida, respecti-

vamente, en la llamada a la funcion “numero”. Vease

a =

5

b =

4

c =

Page 87: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

6.2. DEFINICION DE FUNCIONES 83

[]

d =

[]

Observamos ası que cuando realizamos la llamada a una funcionMATLAB, automaticamente

se determinan el numero de argumentos de entrada y el numero de argumentos de salida de

la llamada efectuada.

Por ejemplo, podemos crearnos una funcion que con dos argumentos de entrada nos

proporcione la suma de ambos y que con tres argumentos de entrada nos de el producto de

esos tres numeros. Llamamos a esta funcion “sumpro” y esta 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.

Page 88: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 7

Aspectos de analisis numerico

En esta seccion comentaremos, de forma breve, como Matlab puede ser utilizado para re-

solver los problemas que con mas frecuencia se pueden encontrar en el campo del Analisis

Numerico: sistemas de ecuaciones (no lineales), integracion, optimizacion y ecuaciones difer-

enciales.

Solo vamos a comentar las versiones basicas de estas ordenes, que poseen numerosas

variantes. Como siempre recomendamos una lectura a fondo del manual.

7.1 Resolucion de Ecuaciones y Sistemas no Lineales

1. Ecuaciones:

Imaginemos que queremos resolver la ecuacion g(x) = 0 y ademas que hemos podido

averiguar que una de las soluciones de tal ecuacion esta cercana al punto x0. Entonces,

la orden “fzero(‘g’,x0)” nos proporciona la raız de g mas proxima a x0.

Senalamos que la funcion g debe estar introducida en un fichero denominado g.m. Por

ejemplo, para g(x) =sen(x2)− 3x+ 1 (ver figura 7.1) se tiene:>>format long e

>>solucion=fzero(’g’,0)

solucion =

3.817356369038296e-001

que nos da la solucion mas cercana a cero de sen(x2)− 3x+ 1 = 02. Sistemas:

Para resolver un sistema de ecuaciones (no lineal1), como por ejemplo, (ver figura 7.2)

x2 + y2 − 1 = 0x− y = 0

1La orden fsolve ha pasado a formar parte del la caja de herramientas de optimizacion.

84

Page 89: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

7.2. INTEGRACION NUMERICA 85

definimos la funcion dim2(X,Y ) = (X2 + 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 solucion del sistema mas proxima al punto del plano (1, 1). Pero observese

que la circunferencia y la recta se cortan en otro punto, opuesto al anterior:

>>sol2=fsolve(’dim2’,[-1 -1]’)

sol2 =

-7.071078431372548e-001

-7.071078431372548e-001

7.2 Integracion numerica

La integral definida de la funcion g en el intervalo [a, b] puede obtenerse de forma aproximada

mediante

1. “quad(‘g’,a,b)” (Regla de Simpson)

2. “quad8(‘g’,a,b)” (Newton—Cotes)

Ası, para la funcion anterior se tiene:

>>area=quad(’g’,-1,0)

area =

2.810248532388182e+000

>>area=quad8(’g’,-1,0)

area =

2.810268301723342e+000

Page 90: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

86 CAPITULO 7. ASPECTOS DE ANALISIS NUMERICO

0 0.5 1 1.5 2 2.5 3-8

-7

-6

-5

-4

-3

-2

-1

0

1Resolucion y minimizacion

cero

minimo

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

-1 -0.5 0 0.5 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1Interseccion de una recta y una circunferencia

Figura 7.2: Interseccion de y = x con x2 + y2 = 1

Page 91: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

7.3. OPTIMIZACION EN UNA Y VARIAS VARIABLES 87

7.3 Optimizacion en una y varias variables

Si queremos calcular el mınimo de la funcion g en el intervalo [1,2.5] tecleamos

>>format

>>min=fmin(’g’,1,2.5)

min =

2.3266

Esto nos ofrece el punto del intervalo [1, 2.5] donde se alcanza el mınimo de g (vease la

figura 7.1). Para funciones de varias variables disponemos de la orden “fmins(‘f’,x0)” que

calcula el mınimo de la funcion f mas cercano al punto x0.(En la version 4.2c ’fmins’se incluye

en el toolbox dde optimizacion). Por ejemplo, la funcion

z =−4x

x2 + y2 + 1

alcanza su valor mınimo en el punto (1, 0), donde vale −2 (ver figura 7.3). Esto puede

calcularse si definimos f(x, y) =−4x

x2 + y2 + 1en el archivo maximini.m y teclemos las ordenes

>>mini=fmins(’maximini’,[0,0.5]’)

mini =

0.9999

0.0001

>>maximini(mini)

ans =

-2.0000

El archivo maximini.m contiene

function z=maximini(p)

x=p(1);y=p(2);

z=zeros(1,1);

z=(-4*x)./(x.^2+y.^2+1);

7.4 Resolucion 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 funcion “dife(t,x)” (en el archivo “dife.m”) que representa la ecuacion

diferencial

Page 92: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

88 CAPITULO 7. ASPECTOS DE ANALISIS NUMERICO

-2-1

01

2-2-1

01

2

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

Figura 7.3: Optimizacion 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 solucion 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

Page 93: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

7.4. RESOLUCION DE ECUACIONES DIFERENCIALES ORDINARIAS 89

0 0.5 1 1.5 2 2.5 31

1.2

1.4

1.6

1.8

2

2.2

2.4

2.6

2.8

t

x

Figura 7.4: Solucion 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 solucion aproximada ofrecida porMAT-

LAB y la solucion exacta, respectivamente. Notese que la solucion exacta es x(t) = esent.

La funcion “ode23” resuelve ecuaiones diferenciales numericamente por metodos de Runge—

Kutta de segundo y tercer orden, pero podemos resolver la ecuacion con mas aproximacion

si utilizamos la funcion “ode45”, pues de esta forma estamos utilizando metodos de Runge—

Kutta de cuarto y quinto orden.

Un buen ejercicio para el lector serıa representar las graficas que aparecen en este capıtulo

que, naturalmente, han sido realizadas conMATLAB.

Page 94: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

90 CAPITULO 7. ASPECTOS DE ANALISIS NUMERICO

0 0.5 1 1.5 2 2.5 31

1.2

1.4

1.6

1.8

2

2.2

2.4

2.6

2.8

t

x

Figura 7.5: Solucion exacta: x(t) = e sen t

Page 95: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 8

Consejos practicos

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 resultara beneficioso darles un ligero repaso.

8.1 Las ordenes help, lookfor y demo

Si tecleamos “help ncof”, siendo ncof el nombre de un comando o funcion disponible en

MATLAB, obtendremos una breve informacion sobre dicho comando o funcion. Si ncof

ha sido creado por el usuario aparecera en pantalla el bloque de comentarios incluido en

las primeras lıneas del fichero que define la funcion 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, segun la version de MATLAB de la

que hagamos uso, una coleccion de las funciones y comandos que podemos utilizar. Notese

que, si la funciones definidas por el usuario aparecen en la ruta de acceso de MATLAB,

estas tambien podran visualizar en la coleccion anterior.

Relacionada con la orden “help” nos encontramos con la orden “lookfor cadena” que nos

proporciona una lista de la funcionesMATLAB (y del usuario) relacionadas con la palabra

cadena.

91

Page 96: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

92 CAPITULO 8. CONSEJOS PRACTICOS

Estamos convencidos que un primer contacto conMATLAB debe ser la visualizacion de

todas y cada una de las demostraciones que el programa posee. En ellas pueden observarse

las posibilidades y usos deMATLAB en un tiempo relativamente corto. Las demostraciones

queMATLAB nos ofrece pueden contemplarse tecleando la orden “demo”. Una vez tecleada

esta orden aparecera, dependiendo de la version utilizada, un menu con distintas opciones;

recomendamos que se visualicen todas, la primera vez que utilizamosMATLAB.

En versiones mas actuales la orden “intro” nos da un breve resumen de las capacidades

de MATLAB. Tambien recomendamos se haga uso de esta orden, al menos la primera vez

que hacemos correr MATLAB.

8.2 Informacion sobre variables declaradas. Instrucciones

para guardar y salvar variables

El espacio de trabajo puede controlarse con tres grupos de instrucciones:

1. Instrucciones destinadas a obtener informacion sobre las variables que estamos utilizan-

do en la sesion:

• “who” nos proporciona una todas las variables que tenemos en memoria. La

variante “whos” nos da informacion adicional sobre las mismas.

2. Instrucciones de control de pantalla.

• “clc” suprime el contenido de la pantalla de comandos.• “clf” borra el contenido de la pantalla de graficos.• “’shg” nos muestra el contenido actual de la pantalla grafica.

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 mas memoria dentro de una

sesion. Por ejemplo, “clear” elimina todas la variables que se encuentran en el espacio

de trabajo.

MATLAB permite salvar, algunas o todas las variables que estamos utilizando en

una sesion, almacenandolas 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 seran cargadas en el espacio de trabajo.

Tambien podemos salvar nuestras variables en archivos ASCII, para ello utilizamos

algunas de las siguientes posibilidades:

Page 97: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

8.3. RELACION CON EL SISTEMA OPERATIVO. EL COMANDO DIARY 93

• “save nombre a /ascii” que guardara en un fichero ascii la variable a en simpleprecision, i.e., con 8 cifras significativas.

• “save nombre a /ascii /double” que almacena la variable a en doble precision.

De la misma forma que podemos salvar variables en un archivo ASCII, tambien podemos

cargar, en una sesion MATLAB, variables almacenadas en un archivo ASCII. Esto

podemos conseguirlo1 tecleando “load nombre”; ası obtendremos una variable llamada

“nombre” con el contenido del archivo de la misma denominacion.

8.3 Relacion con el sistema operativo. El comando diary

Al igual que en MS—DOS enMATLAB disponemos de los comandos “dir”, “delete”, “type”

y “chdir” con los mismos cometidos. En cualquier caso si tecleamos ! nos situaremos mo-

mentaneamente en el sistema operativo; de esta manera, cualquier instruccion que contenga

como primer caracter ! sera interpretada como una orden del sistema. Ası, una alternativa

a la orden deMATLAB “chdir directorio” es la instruccion “!cd directorio”.

La instruccion “type” (antes mencionada) es de gran utilidad, pues podemos contemplar

las instrucciones, en MATLAB, de algunas de sus funciones y aprender bastante sobre su

lenguaje de programacion. Por ejemplo, el numero de condicion de una matriz se calcula

mediante la version 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

1En versiones mas actuales hay que teclear “load nombre /ascii”

Page 98: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

94 CAPITULO 8. CONSEJOS PRACTICOS

end

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

La opcion “diary nombre.m” tecleada dentro de una sesion, hara 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 instruccion “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 ultimo, invitamos al lector a investigar la utilidad del comando “echo” y sacarle todo

el partido posible.

Page 99: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 9

Resumen de los comandos y

funciones mas utilizados

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

ciones que con mas frecuencia se utilizan enMATLAB. Para la realizacion de los “cuadros—

resumenes” se ha intentando, en la medida de lo posible, seguir el ındice de materias de los

capıtulos anteriores. Naturalmente, se realiza una breve descripcion del comando o funcion

en cuestion, que puede aumentarse con ayuda de las paginas anteriores, del comando “help”

deMATLAB o del manual. Algunos de los comandos pueden aparecer repetidos en mas de

un cuadro.

Advertimos que algunas funciones (o comandos) deMATLAB han podido variar de unas

verisones a otras o quedarse obsoletos; recomendamos tener cerca el manual de la version que

estemos utilizando.

BASICO

help Ayuda

lookfor Busca funciones relacionadas con una palabra

who Muestra las variables del espacio de trabajo

whos Lo mismo que who, pero con mas informacion

what Muestra archivos.m

which Muestra el directorio de un comando

Ctrl—C Interrupcion

quit Salir de MATLAB

exit Salir de MATLAB

demo Demostracion deMATLAB

intro Breve introduccion

casesen Sensibilidad a las mayusculas

95

Page 100: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

96CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS UTILIZADOS

VARIABLES PERMANENTES

eps Valor de precision

ans Variable de respuesta cuando no hay asignacion

pi π

i, j Unidad imaginaria

Inf Infinito

NaN No es un numero

flops Numero de operaciones

clock Fecha y hora actual

date Fecha actual

nargin Numero de argumentos de entrada

nargout Numero de argumentos de salida

cputime Tiempo de CPU

tic, . . . , toc Tiempo de calculo

CARACTERES ESPECIALES

= Asignacion

[, ] Creacion de matrices

. Punto decimal. Operaciones elemento a elemento

. . . Continuacion de lınea

; Terminacion de filas. Suprime impresion de resultado

% Comentario

: Genera vectores

OPERACIONES MATRICIALES Y PUNTUALES

+ Suma

− Diferancia

∗, .∗ Multiplicacion

/, ./ Division derecha

\, .\ Division izquierda∧, .∧ Potenciacion0 Transposicion.

Page 101: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

97

FUNCIONES ELEMENTALES

abs Valor absoluto o modulo angle Argumento

real Parte real imag Parte imaginaria

conj Conjugado exp Funcion exponencial de base e

log Logaritmo neperiano log10 Logaritmo en base 10

sin Seno cos Coseno

tan Tangente asin Arcoseno

acos Arcocoseno atan Arcotangente

atan2 Arcotangente de x/y sinh Seno hiperbolico

cosh Coseno hiperbolico tanh Tangente hiperbolica

asinh Argumento seno hiperbolico acosh Argumento coseno hiperbolico

atanh Argumento tangente hiperbolica round Redondeo al entero mas cercano

fix Redondeo hacia cero floor Redondeo hacia −∞ceil Redondeo hacia +∞ sign Signo

rem Resto de la division sqrt Raız cuadrada

MATRICES ESPECIALES

compan Matriz companera

eye Matriz identidad

gallery Matrices “famosas”

magic Matriz magica

hilb Matriz de Hilbert

invhilb Inversa de la matriz de Hilbert

ones Matriz de unos

rand Matriz aleatoria

zeros Matriz nula

MANIPULACION DE MATRICES

rot90 Rotacion de 90o

tril Triangular inferior

triu Triangular superior

reshape Reordenacion

fliplr Inversion en el orden de las columnas

flipud Inversion en le orden de las filas

: Bloques de Matrices

diag Diagonal

Page 102: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

98CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS UTILIZADOS

RESOLUCION DE S.E.L. Y DESCOMPOSICIONES

\ Divsision izquierda. Solucion de S.E.L.

inv Matriz inversa

pinv Pseudoinversa

lu Descomposicion LU (LR)

chol Descomposicion de Cholesky

qr Descomposicion QR

sdv Descomposicion en valores singulares

shur Descomposicion de Schur

FUNCIONES MATRICIALES

det Determinante

poly Polinomio caracterıstico

trace Traza

eig Autovalores y autovectores

diag Diagonal

expm Exponencial matricial

logm Logaritmo matricial

sqrtm Raız cuadrada matricial

funm Evaluacion de funcion matricial

polyvalm Evaluacion matricial de un polinomio

TRATAMIENTO DE POLINOMIOS

roots Raıces de polinomios

polyval Valor numerico de polinomios

conv Multiplicacion

deconv Division

residue Descomposicion en fracciones simples (complejas)

polyfit Ajuste de datos mediante polinomios

Page 103: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

99

FUNCIONES Y OPERADORES LOGICOS Y RELACIONALES

any Condiciones logicas

all Conciones logicas

strcomp Compara cadenas caracteres

find Detecta ındices para relaciones logicas

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 numeros en cadenas de caracteres

int2str Convierte enteros en cadenas de caracteres

sprintf Convierte numeros en cadenas de caracteres

hex2num Convierte cadenas hexadecimales en numeros

INSTRUCCIONES DE ARCHIVO

load Cargar variables de un archivo en el espacio de trabajo

save Guardar variables en un fichero

type Mostrar contenido de un archivo

cd Cambiar de directorio

delete Borrar un archivo

diary Archivar una sesion de trabajo

! Instruccion del sistema operativo

Ver tambien fread, fopen, . . .

Page 104: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

100CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS UTILIZADOS

CONTROL DE FLUJO Y PROGRAMACION

if, elseif, else Bloque condicional

end Termina bloques

for, while Repeticion de instrucciones

break Ruptura de bucles

return Retorno

pausa, pausa(n) Pausa. Pausa de n segundos

input Entrada de datos desde el teclado

error Mensaje de error

feval Evalua funcion definida por cadena de caracteres

function Define una funcion

global Define variables globales

echo Muestras instrucciones en pantalla

menu Genera un menu

GENERANDO GRAFICOS

plot Grafico bidimensional

subplot Divide la pantalla de graficos

loglog Grafico logaritmico

semilogx Grafico semilogaritmico en el eje x

semilogy Grafico semilogarıtmico en el eje y

polar Representacion en polares

meshgrid Dominio de definicion de superficies

mesh Grafico 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 grafica

ginput Entrada de coordenadas desde el grafico

axis Escalado de los ejes

view Punto de vista tridimensional

shg Muestra el contenido de la pantalla grafica

clf Limpia la pantalla de graficos

hold Mantiene el grafico en pantalla

Page 105: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

101

CONTROL DE LA VENTANA DE COMANDOS

clc Limpia la pantalla de comandos

format Formato de salida

disp Dispone matriz o texto

home Mueve el cursor al comienzo

ANALISIS NUMERICO

fzero Resolucion de ecuaciones

quad, quad8 Integracion numerica

fmin Mınimos en una variable

ode23, ode45 Resolucion de ecuaciones diferenciales

diff Derivadas Aproximadas

ANALISIS DE DATOS (POR COLUMNAS)

max Maximo

min Mınimo

sum Suma

prod Producto

cumsum Suma acumultiva

cumpro Producto acumulativo

sort Ordena

mean Valor medio

median Mediana

std Desviacion tıpica

hist Histogramas

cov Matriz de covarianza

corrcoef Coeficientes de correlacion

Page 106: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

Capıtulo 10

Relacion de ejercicios

1. Introduce las siguientes matrices:

A =

Ã1 2

3 4

!B =

Ã0 0.1 −12 3/4 5

!C =

1

0

1

D =

√2 π −1 4

32 7 0 9

8 −1 6 2

E =³1 0 2 3 −1

´

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

(b) Evalua 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 relacion de matrices identifica las que son simetricas o antisimetricas:

a)

Ã1 1

−1 1

!b)

1 2 3

4 5 6

7 8 9

c)

Ã1 1

−1 0

!d)

Ã1 1 1

1 1 1

!

102

Page 107: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

103

e) A = (aij) ∈M4(R), siendo aij = 1i+j

f) A = (aij) ∈M4(R), siendo aij = 1i2+j

g)

1 0 1

0 2 0

−1 0 3

4. Sea x =

√2 e y = 1.

(a) Introduce la matriz A =

x 2x 3

x+ y x− y x+ πy

π2 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 continuacion la matriz

A =

Ã1 2 3 4

5 6 7 8

!

(a) Introduce A(1, :).

(b) Introduce A(:, 1).

(c) Introduce A(2, :).

(d) Introduce A(:, 2).

(e) Escribe los comandos que muestran la columna tercera y a continuacion la cuarta.

(f) ¿Que ocurre sı pretendemos mostrar la “inexistente” quinta columna de A?

6. Limpia la pantalla y el espacio de trabajo con clc y clear y a continuacion introduce:(a) u = 1 : 5 (b) v = −5 : 2 : 8 (c) w = (1 : 5)0

(d) x = 5 : −1 : −5 (e) y = −2 ∗ pi : .1 : 2 ∗ pi (f) u(2)

(g) v(3) (h) w(4) (g) y(1) y(126)

7. Para el anterior vector u realiza:

(a) u.∧2 (b) u.∧3 (c) u.∧(1/2) (d) u.∧(−1)

8. Introduce A =

Ã1 2

5 3

!y a continuacion:

(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)

Page 108: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

104 CAPITULO 10. RELACION DE EJERCICIOS

9. Encuentre el complejo conjugado y el modulo de cada uno de los siguientes numeros

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

(i) (1 + i)2 (j) (1 + i)−1 (k) (3 + 2i)(−4 + i) (l) 1−2i−2+3i

(m) 7−6i1+i · 3−i2−9i (n) Im((1 + i)2) (o) log(2i) (p) sen(2i)

10. Observe la salida:

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

(e) 0/0 (f) 2 + NaN (g) NaN/NaN (h) Inf/Inf

(i) 1/Inf (j) 2 + Inf (k) Inf + 0 (l) NaN/Inf

(m) inf*inf

11. Introduce A =

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

y observa la salida:

(a) A(1, :) (b) A(3, :) (c) A(:, 2) (d) A(:, 5)

(e) A(1, 1 : 2 : 5) (f) A([2, 4], :) (g) A([4, 2], :) (h) A(4 : −1 : 1, 5 : −1 : 1)/i) A([1 1], [2 2]) (j) A([2 2], [5 4]) (k) A([3 2], [5 4])

12. Construye las siguientes matrices utilizando .,+,−, \, ∗,∧, :, zeros, eye, ones y diag.

(a) A = θ2,3

(b) B = I4

(c) C =

1 1

1 1

1 1

(d) D =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

(e) E =

0 1 1 1 1

1 0 1 1 1

1 1 0 1 1

(f) F =

0 0 0 0 0

1 0 0 0 0

0 2 0 0 0

0 0 3 0 0

Page 109: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

105

(g) G =

0 0 0 0

1 0 0 0

0 1 0 0

(h) H =

0 1 0

0 0 2

0 0 0

(i) I =

Ã3 3 3

3 3 3

!

(j) J =

4 5 6

8 10 12

12 15 18

(k) K =

1 1/2 1/3

1/2 1/4 1/6

1/3 1/6 1/9

(l) La matriz de orden 5 cuyas 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 sumade 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 k22.

(d) Calcula el adjunto de j13.

14. Construye las matrices

A =

2 −1 0 0

−1 2 −1 0

0 −1 2 −10 0 −1 2

B =

3 1 1 1

1 3 1 1

1 1 3 1

1 1 1 3

y calcula con ayuda de la division izquierda A−1B,AB−1, A−1v, utB−1 siendo v =(1, 0, 0, 0) y u = (0, 1, 0, 0).

15. Resuelve los siguientes sistemas de ecuaciones

x2 + x3 + x4 = 4

3x1 + 3x3 − 4x4 = 7

x1 + x2 + x3 + 2x4 = 6

2x1 + 3x2 + x3 + 3x4 = 6

2x1 + 3x2 + 2x3 = 9

x1 + 2x2 − 3x3 = 14

3x1 + 4x2 + x3 = 14

Page 110: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

106 CAPITULO 10. RELACION DE EJERCICIOS

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

bando que A = LU ; y seguidamente [L,U, P ] = lu(A) confirmando que PA = LU .

(a) A =

3 1 −2 −11 5 −4 −13 1 2 3

2 −2 2 3

(b) A =

3 2 5 4

2 3 6 8

1 −6 −9 −204 1 4 1

(c) A =

4 2 4 1

30 20 45 12

20 15 36 10

35 28 70 20

(d) A =

Ã0 1

1 0

!

17. Encontrar la solucion, 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 informacion sobre sum, cumsum, prod, cumprod y diff.

(a) Dado a = (1, 2, 3, 4) utiliza cumsum y sum para calcular el valor de4Xk=1

kXi=1

ai.

(b) Dada la matrizA =

1 2 3

4 5 6

7 8 9

usa sum y prod para calcular el valor3Yj=1

3Xi=1

aij .

(c) Usa sum y prod para calcular el valor3Xj=1

3Yi=1

aij para la matriz de apartado b).

(d) Dada la matriz del apartado b) usa sum y cumprod para calcular el valor3Yj=1

3Xi=1

aij .

Page 111: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

107

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

An para n “grande”.

a) A =

Ã0.6 0.5

−0.18 1.2

!b) A =

Ã0.6 0.5

−0.2 1.2

!

c) A =

Ã0.9 1.0

0 0.9

!d) A =

0.67 0.31 0.20

0.18 0.54 0.40

0.15 0.15 0.40

21. Sea A =

0.8 0.2 0.1

0.1 0.7 0.3

0.1 0.1 0.6

y x0 =

0.2

0.3

0.5

Calcula xn = A

nxn−1 para n = 1, 2, . . . , 16 y comprueba que, con la menos tres cifrassignificativas, se obtiene que xn = x16 ∀n ≥ 16.

22. Consideremos el sistema de ecuaciones en diferencias:

zn+1 = 0.6zn + 0.5cnzn+1 = −0.16zn + 1.2cn

)con z1 = 100, c1 = 1000

¿Cual es le comportamiento de zn y cn para n “grande”?

Si se escribe el sistema en forma matricial, ¿cual 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

Bε =

Ã107 + ε 107 − ε

1/ε 1/ε

!ε 6= 0

. Varıe ε desde 10−1 hasta 10−12 y calcule los determinantes de las matrices Bε que se

obtienen.

24. Para la matriz A del ejercico 16 calcule A−1 mediante inv : (A) yadj(A)

det(A). Compare

numero de operaciones.

25. Sea Az la matriz de orden 5 dada por

Az =

z −1 0 0 0

−1 z −1 0 0

0 −1 z −1 0

0 0 −1 z −10 0 0 −1 z

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

Page 112: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

108 CAPITULO 10. RELACION 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\ccomparando el numero de operaciones y el tiempo de caculo. ¿Que metodo es mas

eficiente?

26. Pruebe que x1 = 1, x2 = −1 es la solucion 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”. ¿Esta bien omal condicionado?

27. Consideremos las matrices

A =

Ã2− ε 1− ε

2− 2ε 1− 2ε

!P =

Ãε 0

1− ε 1

!B = P−1AP

Ã1ε

1−εε

−1+ε2ε

−1+ε+ε2ε

!

con ε 6= 0.Dar a ε valores pequenos y calcular los autovalores, determinantes y rangos de las

matrices A y B. ¿Que conclusiones se pueden decucir?

28. Sea A =

Ã−0.4 0.5

−0.18 0.2

!. Utilice MATLAB para sumar varios terminos de la serie

de eA y comprobar que converge a expm : (A).

29. Realiza los siguientes calculos:

(a) expm(zeros(2)).

(b) expm(eye(2)).

(c) X = expm([0 1;−1 0]);XtX.

(d) A = rand(3);X = logm(A); expm(X).

(e) sqrtm([0 1;0 0]).

Analiza analıticamente el ultimo apartado.

30. Siendo L = [1 2 −2 0 1 −5 −pi sqrt(2)], realice los siguientes calculos: s=sign(L),s==1, find(s==1), length(find(s==1)).

Page 113: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

109

31. Con la utilidad help informate sobre el cometido de la funcion 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 funcion poly calcula los numeros combinatoriosÃ10

0

!,

Ã10

1

!, . . . ,

Ã10

10

!

33. Calcula las raıces de los polinomios:

(a) p(x) = x3 + 6x2 − 72x+ 27(b) q(x) = 2x4 + x3 − 2x− 8

34. Evalua 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+ (a11a22 − a12a21)

35. Calcula la pseudoinversa de las matrices:

A =

−3 1

−2 1

−1 1

0 1

1 1

2 1

3 1

A =

Ã0 0 1 2

1 2 2 3

!

36. Experimente la funcion sdv sobre vectores filas y vectores columnas. ¿Que 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 parabola que pasa por (−1, 2), (0, 1) y (2, 4).

Page 114: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

110 CAPITULO 10. RELACION DE EJERCICIOS

40. Repersentar la funcion z = f(x, y) =sen(x)sen(y).

41. Representar la funcion f(x, y) = −4xx2+y2+1

y encontrar su valor maximo.

42. Calcula los autovalores de las siguientes matrices:

(a) A =

5 3 6

2 6 6

2 3 9

(b) A =

0 0 0 1

0 0 1 0

0 −1 0 0

−1 0 0 0

(c) ones(20)

(d) orth((2*rand(5)-1)+i*(2*rand(5)-1))

¿Que propiedad cumplen los autovalores del apartado d)?

43. UtiliceMATLAB para comprobar que las matricesA =

1 0 0

0 2 0

0 0 3

yB = 1 1 1

0 2 1

0 0 3

son semejantes.

44. Escribe una funcionMATLAB que remplace por 0 las componentes de un vector real

que sean menores, en valor absoluto, que un numero positivo dado.

45. Describa una funcion con las siguientes condiciones:

• Tenga dos vectores x e y de dimension n y un angulo t (en radianes) como argu-mentos de entrada.

• Nos proporcione los pares de numeros que se obtienen aplicando a (xi, yi), i =1, . . . , n un giro con centro el origen t de angulo 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 unangulo t.

• Represente el cuadrilatero Q determinando por P1, P2, P3, P4.• Y en el grafico anterior dibuje, ademas, el cuadrilatero que se obtiene al aplicar aQ un giro con centro el origen y angulo t.’

47. Construye una funcion que calcule el k—esimo coeficiente del producto de polinomios.

Page 115: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

111

48. Con ayuda de la funcion poly y las formulas de Cardano construye una funcion que

nos proporcione la suma de los cuadrados de los autovalores de una matriz.

49. Construye una funcionMATLAB 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 deA.

• Evalue la matriz p(A).• Nos proporcione un vector fila con los autovalores de p(A).

50. Escribir una funcion que actue sobre dos argumentos: una matriz A y un numrero

natural i; proporcionando como resultado la matriz que se obtiene al suprimir la i—

esima fila de la matriz A.

51. Idem para la columna j de una matriz.

52. Describir la funcion que nos proporciona el menor complementario del elemento aij de

la matriz A.

53. Describir la funcion que nos proporciona el elemento adjunto de aij .

54. En un archivo .m describir la funcion que nos proporciona la adjunta (ya traspuesta)

de una matriz.

55. Con ayuda de la funcion anterior describir la funcion que determina la inversa de A

mediante A−1 = adj(A)det(A) . Comparar el numero de operaciones y el tiempo de calculo

entre “nuestra funcion inversa” y la funcion inv de MATLAB.

56. Describir una funcion en MATLAB que nos proporcione la suma de dos polinomios

de cualquier grado.

57. Con ayuda de las funciones diag y triu describir la funcion que con una matriz A

como argumento de entrada nos proporcione la descomposicion de A como suma de

una matriz diagonal, una triangular superior y otra inferior.

58. Disenar una funcion que resuelva un sistema cuadrado por la regla de ,Cramer. Com-

parar el tiempo de calculo y el numero de operaciones con la resolucion del sistema

mediante inv(A)*b y A\b.59. Realizar una estrategia que calcule la descomposicion LU sin pivoteo parcial, para una

matriz no necesariamente cuadrada.

60. Escribir una funcion con tres argumentos (una matriz A y dos numeros enteros positivos

i, j) que nos propocione la matriz que se obtiene intercambiando las filas i y j de la

matriz de entrada A.

Page 116: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

112 CAPITULO 10. RELACION DE EJERCICIOS

61. Idem, pero intercambiando columnas.

62. Contruir una funcion que nos proporcione la matriz resultante de sumar a la fila i—esima

de A la j—esima fila multiplicada por λ. (Naturalmente i 6= j).

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

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

65. Escribir una funcionMATLAB que aceptando, como argumento, una matriz cuadrada

A nos proporcione el valor maximo de kAuk cuando u recorre 100 vectores alearoriosunitarios.

66. Editar en un archivo de extension .m una funcion que nos proporciona la recta que

mejor aproxima (por mınimos cuadrados) a una nube de puntos y que represente en un

mismo grafico la recta encontrada y los puntos dados.

67. Escribir una funcion que nos de como resultado 1 o 0, dependiendo si la matriz de

entrada es 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 numero natural positivo n y nos proprocione el

n—esimo numero de Fibonacci.

70. Disenar una funcion que nos resulva un S.E.L. cuadrado compatible utilizando el metodo

de Gauss con estrategia de pivote total.

71. Describir una funcion MATLAB que nos estudie la compatibilidad de un sitema de

ecuaciones lineales y lo resuelva cuando sea compatible (determinado o indeterminado).

Aplicar esa funcion a

A =

Ã1ε

1−εε

−1+ε2ε

−1+ε+ε2ε

!con ε 6= 0 y b = (1,−1)t

para valores pequenos de ε.

72. Realizar una estrategia que determine la descomposicion QR mediante el metodo de

Gram—Schmidt de una matriz A con columnas linelamente independientes. Escriba la

estrategia en un archivo.m.

Page 117: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

113

73. Considere la matriz

A =

1 1 1

1 + ε 1 1

1 1 + ε 1

1 1 1 + ε

ε 6= 0

Asigne un valor pequeno a ε y aplique el metodo de Gramm—Schmidt (ver ejercicio

anterior) para ortonormalizar las columnas de A. Comprudebe si realmente se han

obtenido columnas ortonormales. Aplique la funcion qr sobre A y obtenga resultados.

Page 118: INTRODUCCION A MATLABpersonal.us.es/julio/metodos/intromatlab.pdf ·  · 2004-11-09cadavezseimponeconm´as fuerza tanto en el terreno de la investigaci´on como pedag ... de Sevilla

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 Algebra Lineal Aplicada.

Ed. Prentice Hall, (1989).

[4] G. Strang Algebra Lineal y sus Aplicaciones.

Ed. Addison Wesley, (1990).

[5] S.I. Grossman Algebra Lineal, (Quinta edicion)

Ed. MacGraw-Hill, (1996)

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

Prentice-Hall (1993)

114