Академический Документы
Профессиональный Документы
Культура Документы
net/publication/265074269
INTRODUCCION A MATLAB
CITATIONS READS
0 60
2 authors, including:
Julio R. Fernández
Universidad de Sevilla
36 PUBLICATIONS 382 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
Modelos Cooperativos entre Agentes Asimétricos. Aplicaciones al Análisis del poder en el Parlamento Europeo (ECO2013-40755-P -
Equipo de Investigación) View project
All content following this page was uploaded by Julio R. Fernández on 16 October 2014.
ISBN 84-8264-257-X
Depósito Legal SE-233-98
Febrero de 1998
1 Elementos básicos 3
1.1 Formatos de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 Matrices por bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3 Operaciones con Matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4 Operaciones elemento a elemento . . . . . . . . . . . . . . . . . . . . . . . . . 23
4 Autovalores y polinomios 43
4.1 Autovalores y autovectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Valores singulares y pseudoinversa . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3 Tratamiento de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.1 Polinomio caracterı́stico de una matriz cuadrada . . . . . . . . . . . . 47
4.3.2 Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.3 Raı́ces de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3.4 Aproximación por polinomios en el sentido de los mı́nimos cuadrados . 52
1
2 ÍNDICE GENERAL
5 Posibilidades gráficas 57
5.1 Gráficos en el plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.1 Poligonales y curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1.2 Curvas en polares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.1.3 Curvas en paramétricas . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.1.4 Histogramas y diagramas de barras . . . . . . . . . . . . . . . . . . . . 63
5.2 Curvas en el espacio y superficies . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.1 Curvas en paramétricas . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2.2 Superficies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.3 Curvas de nivel y vector gradiente . . . . . . . . . . . . . . . . . . . . 66
8 Consejos prácticos 91
8.1 Las órdenes help, lookfor y demo . . . . . . . . . . . . . . . . . . . . . . . 91
8.2 Información sobre variables declaradas. Instrucciones para guardar y salvar
variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.3 Relación con el sistema operativo. El comando diary . . . . . . . . . . . . . 93
Elementos básicos
En esta primera sección explicaremos aquello que es necesario conocer para comenzar a
utilizar MATLAB. En particular describiremos:
4. Utilización de la ayuda.
5. Funciones de MATLAB.
LA INTRODUCCIÓN DE MATRICES
MATLAB trabaja esencialmente con matrices rectangulares cuyos elementos pueden ser
reales, complejos y/o cadenas de caracteres. En ocasiones consideraremos matrices de orden
1 por 1, que son escalares, y matrices con una fila o una columna, que representarán vectores.
En MATLAB podemos introducir las matrices de varias formas:
3
4 CAPÍTULO 1. ELEMENTOS BÁSICOS
en blanco o comas, encerrar los elementos entre corchetes ([ ]) y usar ; para indicar el fin de
cada fila.
Por ejemplo, introduciendo la asignación
resulta la salida
A =
1 2 3
4 5 6
7 8 9
>>A=[1 2 3
4 5 6
7 8 9]
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]
>>pepe
A =
1 2 3
4 5 6
7 8 9
El comando “load” y la función “fread” permiten leer matrices generadas durante sesiones
anteriores, importar matrices de otros programas o exportarlas. Pero este es un aspecto que
será tratado más adelante.
Las matrices pueden incluir algunas expresiones MATLAB; por ejemplo al teclear
5
resulta
>>x=
>>x(5)= abs(x(1))
produce
>>x=
>>r=[10 11 12];
no obtenemos salida alguna; ello se debe a que hemos añadido el punto y coma al final. No
obstante MATLAB si ha almacenado la matriz r, para comprobarlo tecleamos
>>r
y resulta
>>r =
10 11 12
>>A = [ A; r]
A =
1 2 3
4 5 6
7 8 8
10 11 12
>>A = A(1:3,:)
A =
1 2 3
4 5 6
7 8 9
toma las tres primeras filas de la matriz A y todas las columnas, y nos devuelve el resultado
introducido en la matriz original. Estos y otros aspectos los veremos más adelante con mucho
más detalle.
variable=expresión
o simplemente
expresión
>>sqrt(2)/15
se obtiene
ans =
0.0943
Si una expresión es bastante complicada (y larga) y no es suficiente una lı́nea para es-
cribirla completamente, podemos añadir al final tres puntos ( . . . ) seguidos de un retorno de
carro para indicar que la asignación continúe en la lı́nea siguiente. Por ejemplo,
evalúa la suma de estas fracciones y asigna dicha suma a la variable s. Los espacios en blanco
tras los signos =, + y − son opcionales, pero se incluyen para facilitar la lectura.
7
Podemos dar nombres a variables y funciones que empezarán siempre por letras y que
pueden estar seguidas de otras letras o dı́gitos. MATLAB sólo reconoce los 19 primeros
caracteres de un nombre.
MATLAB es muy sensible: distingue entre letras mayúsculas y minúsculas. A y a no son
la misma variable. Todos los nombres de funciones deben escribirse con minúsculas; inv(A)
es la inversa de A, pero INV(A) no está definida. El comando “casesen” anula (o activa) esta
sensibilidad.
En los ejemplos previos hemos creado variables que han sido almacenadas en el espacio de
trabajo de MATLAB. Podemos listar estas variables tecleando “who” o “whos” dependiendo
de la información que necesitemos de las variables almacenadas.
>>who
Your variables are:
A ans r s x
Esto muestra que los ejemplos anteriores han generado cinco variables, incluyendo la
variable “ans”.
VARIABLES PERMANENTES
eps = 2−52
que es aproximadamente 2.22 · 10−16 . Podemos inicializar “eps” a cualquier otro valor
incluido el cero.
Relacionadas con estas variables nos encontramos con las funciones pi, Inf y NaN que
generan valores especiales.
Por ejemplo, la función “pi” nos devuelve el número π, precalculado por el programa
como 4 arctan(1) (cuatro veces el arco cuya tangente es uno). Otra posibilidad es calcular π
tecleando imag(log(−1)) (parte imaginaria del logaritmo principal de −1).
La función “Inf”, que se utiliza para infinito, se encuentra en algunas calculadoras o
lenguajes de computación. Un camino para generar el valor que nos devuelva “Inf” es
1
La orden “clear A B C” limpia del espacio de trabajo estas tres variables.
8 CAPÍTULO 1. ELEMENTOS BÁSICOS
>>s=1/0
LA UTILIDAD HELP
La utilidad “help” proporciona información instantánea de la mayorı́a de los tópicos de
MATLAB. El comando “help” sin argumentos muestra, dependiendo de la versión de MAT-
LAB que estemos usando, una lista de los directorios que contienen ficheros relacionados con
MATLAB.
>>help
HELP topics:
Cada linea de pantalla incluye el nombre de un directorio seguido por una descripcion del
contenido de los directorios. Si ahora introducimos
>>help matfun
obtenemos la lista de las funciones sobre matrices más relevantes en Análisis Numérico Ma-
tricial.
Matrix 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.
Matrix functions.
expm - Matrix exponential.
expm1 - M-file implementation of expm.
expm2 - Matrix exponential via Taylor series.
expm3 - Matrix exponential via eigenvalues and eigenvectors.
logm - Matrix logarithm.
sqrtm - Matrix square root.
funm - Evaluate general matrix function.
Si ahora tecleamos “help lu” obtenemos información de la factorización LU de una matriz.
>>help lu
>>lookfor inverse
Para terminar una sesión con MATLAB teclearemos “quit” o “exit”. Al finalizar
una sesión MATLAB se borran todas las variables del espacio de trabajo (i.e., las vari-
ables declaradas en la sesión actual). Antes de terminar podemos guardar el contenido del
“workspace”, para una sesión posterior, tecleando
>>save
Este comando salva todas las variables en un fichero llamado matlab.mat. La próxima
vez que MATLAB sea llamado podremos ejecutar “load” para restaurar, en el workspace,
el contenido de matlab.mat.
Podemos utilizar “save” y “load’ con otros nombres de fichero.mat o bien guardar sólo
aquellas variables en las que estemos interesados. El comando “save temp X” guarda en el
fichero temp.mat sólo la variable X, mientras que “save temp X Y Z” almacena en temp.mat
12 CAPÍTULO 1. ELEMENTOS BÁSICOS
las variables X,Y y Z. “load temp” cargas todas las variables almacenadas en el fichero
temp.mat
Por último, con los comandos “load” y “save” podemos importar y exportar ficheros con
datos ASCII. (Ver más adelante).
MATLAB utiliza la notación decimal, pudiendo incluir factores con potencias de diez o
unidades imaginarias. Algunos ejemplos de números legales son:
• + Suma
• − Resta
• ∗ Multiplicación
• / División derecha
• \ División izquierda
• ∧ Potencia
Las operaciones con matrices hacen conveniente tener dos sı́mbolos para la división. Esto
se analizará con más detalle cuando abordemos el estudio de las operaciones y funciones con
matrices. Pero, adelantamos que por ejemplo, las expresiones escalares 1/4 y 4\1 tienen el
mismo valor numérico, es decir 0.25.
>>w=4*exp(i*pi/2)
w =
0.0000 + 4.0000i
>>A=[1 2; 3 4] + i*[5 6; 7 8]
A =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
>> A=[ 1 + 5*i 2 + 6*i; 3 + 7*i 4 + 8*i]
A =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
En las versiones más actuales de MATLAB se pueden escribir los números complejos sin
necesidad de utilizar *. Pero hay que tener cuidado en no dejar espacios en blanco al escribir
la parte imaginaria de un número complejo. Si escribimos
>>1+ 4i
se obtiene
1.0000 + 4.0000i
en cambio, al introducir
>>1 + 4 i
??? 1+4 i
\vert
Missing operator, comma, or semi-colon.
Esto también hay que tenerlo en cuenta cuando se utiliza la notación exponencial con
números reales. Si introducimos
>>1.23e-4
la respuesta es
1.2300e-004
en cambio
14 CAPÍTULO 1. ELEMENTOS BÁSICOS
>>1.23 e-4
??? 1.23 e
\vert
Missing operator, comma, or semi-colon.
Si hemos utilizado durante una sesión las letras i ó j como nombre de variables o fun-
ciones que juegan un papel distinto al de la unidad imaginaria, y necesitamos posteriormente
trabajar con complejos, podemos definir la unidad imaginaria del siguiente modo:
>>ii=sqrt(-1)
ii =
0 + 1.0000i
>>i
ans =
0 + 1.0000i
>>z = 1 + i
z =
1.0000 + 1.0000i
>>w= 1 + j
w =
1.0000 + 1.0000i
>>i=7
i =
7
>>j=6
j =
6
>>z
z =
1.0000 + 1.0000i
>>z= 1+i
z =
8
>>ii=sqrt(-1)
ii =
0 + 1.0000i
>>z=1+ii
15
z =
1.0000 + 1.0000i
Realmente MATLAB sólo maneja matrices, pero los elementos de éstas pueden ser
números (reales o complejos) o cadenas de caracteres. Por ejemplo si tecleamos
>> 34
ans =
34
aparece el número 34, en cambio introduciendo matrices formadas por cadenas de caracteres
(incluido el espacio en blanco) podemos leer, por ejemplo, la profunda conversación:
>> saludo=[’Hola,’ ’Buenos dı́as’],respuesta=[’Buenos dı́as’]
saludo =
Hola, Buenos dı́as
respuesta =
Buenos dı́as
FUNCIONES
1. Funciones elementales
2. Funciones especiales
5. Descomposición de matrices
6. Análisis de datos
7. Tratamiento de polinomios
16 CAPÍTULO 1. ELEMENTOS BÁSICOS
8. Ecuaciones diferenciales
Una breve descripción de casi todas las funciones de estos grupos se puede encontrar en
los cuadros resúmenes del último capı́tulo o, con más profundidad, en la guı́a de usuarios de
MATLAB.
Destacamos que la práctica totalidad de las funciones elementales de MATLAB no sólo
actúa sobre números, sino que también operan con matrices actuando directamente sobre las
entradas de la matriz.
En el subapartado dedicado al orden “polyvalm” veremos algunas funciones matriciales,
como la exponencial matricial, el logaritmo matricial, . . .
La orden “format rat” hace que los resultados numéricos siempre aparezcan como números
racionales. Pero téngase en cuenta que esto no significa que la matriz en cuestión sea tratada
internamente, por MATLAB, como una matriz racional. Por consiguiente, esto resulta útil
1.1. FORMATOS DE SALIDA 17
si tenemos la certeza de estar siempre trabajando con números racionales. Ponemos esto de
√
manifiesto con la aproximación racional de MATLAB para 2.
>>format rat
>>sqrt(2)
ans =
114243/80782
>>format long e
>>114243/80782
ans =
1.414213562427273e+00
>>sqrt(2)
ans =
1.414213562373095e+00
>>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
>> format +
>> J
J =
18 CAPÍTULO 1. ELEMENTOS BÁSICOS
-+
-
++
+
Para volver al formato corto usual podemos teclear “format” o bien “format short”.
En relación con la presentación por pantalla tenemos los comandos “format compact”
y “format loose”. El primero de ellos nos suprime las lı́neas en blanco que, por defecto,
aparecen en una sesión MATLAB, mostrando de esta forma más información en pantalla;
el segundo de los comandos anula el anterior.
ans =
4 5 3 2
>> b=B(:,2)
b =
5
6
-1
>> bloque=A(2:3,1:2)
bloque =
3 5
2 5
1.2. MATRICES POR BLOQUES 19
>> F=[P;B]
F =
3.0000 5.0000 6.0000
-2.0000 0.5000 9.0000
4.0000 6.0000 2.0000
9.0000 0 0
5.0000 5.0000 0.2500
La orden M = [P B], análoga a la anterior, construye la matriz M añadiendo a P las
columnas de B. Naturalmente, esto es posible si P y B tienen el mismo número de filas.
>>G=[2 1;1 3],O=[1 0 -1;2 1 -3]
G =
2 1
1 3
O =
1 0 -1
2 1 -3
>>M1=[G O]
M1 =
2 1 1 0 -1
1 3 2 1 -3
Si se definen nuevos elementos de una matriz en una fila o columna no existente, los
elementos no definidos (en la filas o columnas no existentes) se toman como nulos.
20 CAPÍTULO 1. ELEMENTOS BÁSICOS
>>P(3,2)=pi
P =
3.0000 5.0000 6.0000
-2.0000 0.5000 9.0000
0 3.1416 0
Los dos puntos se pueden utilizar con otra finalidad. Podemos definir un vector cuyos
elementos están en progresión artimética:
>> t=0:2:10
t =
0 2 4 6 8 10
Los dos puntos también se pueden utilizar para transformar una matriz en un vector
columna, siguiendo el orden de las columnas.
>>A(:)
ans =
4
3
2
5
5
5
3
7
8
2
-1
0
>> T=J’
T =
-3 0 0 0
1 -3 0 0
0 0 4 0
1.3. OPERACIONES CON MATRICES. 21
0 0 1 4
>> C=[3+2*i 6-2*i;7 2*i]
C =
3.0000 + 2.0000i 6.0000 - 2.0000i
7.0000 0 + 2.0000i
>> T=C’
T =
3.0000 - 2.0000i 7.0000
6.0000 + 2.0000i 0 - 2.0000i
La suma de matrices (+), el producto (*) y la potencia n—ésima de una matriz (A∧ n) se
realizan como sigue.
>> S=T+C
S =
6.0000 13.0000 - 2.0000i
13.0000 + 2.0000i 0
>> E=[6 3 2;-1 3 -1;5 3 8]
E =
6 3 2
-1 3 -1
5 3 8
>> P=E*E’
P =
49 1 55
1 11 -4
55 -4 98
>>NI=[0 1 -2;0 0 15;0 0 0]
NI =
0 1 -2
0 0 15
0 0 0
>>NI^3
ans =
0 0 0
0 0 0
0 0 0
Para calcular el determinante de una matriz cuadrada usaremos la función “det”. Por
ejemplo, para la matriz de Hilbert de orden 5 el determinante es:
>>format rat
>>H=hilb(5)
22 CAPÍTULO 1. ELEMENTOS BÁSICOS
H=
1 1/2 1/3 1/4 1/5
1/2 1/3 1/4 1/5 1/6
1/3 1/4 1/5 1/6 1/7
1/4 1/5 1/6 1/7 1/8
1/5 1/6 1/7 1/8 1/9
>> det(H)
ans =
1/266716800000
Para calcular la traza emplearemos “trace”, para obtener el rango “rank” y para hallar
la inversa “inv”. Esto se ilustra en el siguiente ejemplo:
>>A=[1 2 3;0 1 2;0 0 1]
A =
1 2 3
0 1 2
0 0 1
>>trace(A)
ans =
>>rank(A)
ans =
>>inv(A)
ans =
1 -2 1
0 1 -2
0 0 1
La orden “size” nos da un vector cuyas componentes nos indican el orden de la matriz.
1.4. OPERACIONES ELEMENTO A ELEMENTO 23
>>size(A)
ans =
3 3
Por último, indicar que la orden “nnz” determina el número de elementos no nulos de la
matriz.
>>nnz(A)
ans =
>> PE=E.*E’
PE =
36 -3 10
-3 9 -3
10 -3 64
>> PO=E^2
PO =
43 33 25
-14 3 -13
67 48 71
>> PO=E.^2
PO =
36 9 4
1 9 1
25 9 64
>> M=[1 2 5];v=[1 2 3];
>> M.^v
24 CAPÍTULO 1. ELEMENTOS BÁSICOS
ans =
1 4 125
Cuando una de las matrices sea de orden 1 por 1 (i.e., un escalar), las operaciones ante-
riores también tienen sentido. Véase
>> 3 .^v
ans =
3 9 27
>>3 ./v
ans =
3.0000 1.5000 1.0000
Nótese el espacio entre el número 3 y el punto; éste es necesario en las primeras versiones
de MATLAB.
En relación con las operaciones elemento a elemento podemos destacar la operación
n +matriz (o matriz+no ) que, al contrario de las anteriores no necesita el punto (.), y cuyo
o
>>8+v
ans =
9 10 11
Capı́tulo 2
25
26 CAPÍTULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.
llamamos a una función, el número de argumentos de entrada que utilizamos en dicha llama-
da (es decir, el número de elementos entre paréntesis y separados por comas que preceden
al nombre de una función). Relacionada con la función “nargin” nos encontramos la función
“nargout” (número de argumentos de salida) de la que hablaremos más adelante.
La orden “ones(A)” nos proporciona una matriz de unos del mismo orden que A. Efectos
análogos tienen los comandos “eye(A)” y “zeros(A)”.
>> ones(E)
ans =
1 1 1 1
1 1 1 1
Para la versión 4.2c de MATLAB las órdenes “ones(A)”,“ eye(A)” y “size(A)” han
quedado obsoletas y conviene sustituirlas por “ones(size(A))”, “eye(size(A))” y “zeros(size(A))”.
También es posible generar algunas matrices especiales como por ejemplo matrices de
Hilbert. Ası́, “hilb(n)” produce la matriz de Hilbert de orden n:
>> H=hilb(5)
H =
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
>>rot90(E)
Esta instrucción realiza un giro de 90o grados (en sentido positivo) de la matriz E.
ans =
0 0
0 0
0 1
1 0
A partir de una matriz A podemos conseguir nuevas matrices con los mismos elementos,
pero diferente estructura mediante instrucciones como:
• “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.
Dada una matriz A existe la posibilidad de generar diversas matrices a través de la(s)
diagonal(es) de A.
Para obtener la diagonal de una matriz A, (que puede no ser cuadrada) basta teclear
>> D=diag(A)
D =
3
0
8
Si v es un vector “diag(v)” nos da una matriz diagonal (cuadrada) cuya diagonal es v.
>> diag([5 7 -3])
ans =
5 0 0
0 7 0
0 0 -3
La orden “diag(A)” posee como variante la orden “diag(A,k)” que muestra la k—ésima
superdiagonal de A, si k es positivo, y la k—ésima subdiagonal, si k es negativo. (Obsérvese
de nuevo la posibilidad de dar distinto número de argumentos de entrada a una función
MATLAB).
28 CAPÍTULO 2. TIPOS ESPECIALES DE MATRICES. CONSTRUCCIONES.
>> D2=diag(A,2)
D2 =
6
20
>> D_1=diag(A,-1)
D_1 =
1
-2
De manera totalmente análoga a la orden “diag(A)” nos encontramos las órdenes “triu(A)”
y “tril(A)” que generan matrices triangulares superiores y triangulares inferiores, respecti-
vamente, con los elementos superiores e inferiores, respectivamente, a la diagonal de A y
con los elementos diagonales de la misma.
>> TS=triu(A)
TS =
3 4 6 8
0 0 7 20
0 0 8 0
>> TS2=triu(A,2)
TS2 =
0 0 6 8
0 0 0 20
0 0 0 0
El lector puede practicar estas instrucciones descomponiendo una matriz cuadrada A como
suma de una matriz triangular inferior L, una matriz diagonal D y una matriz triangular
superior U . (Esta descomposición resulta útil en la resolución de S.E.L. mediantes métodos
iterativos).
Capı́tulo 3
x + 2y = 3
3x − 4y = −1
29
30 CAPÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES
x + 2y = 3
3x − 4y = −1
>>flops(0)
>>x=A\b
x =
1.0000
1.0000
>>flops
ans =
33
>>flops(0)
>>x=inv(A)*b
x =
1.0000
1.0000
>>flops
ans =
44
Se observa que, incluso para un sistema con dos ecuaciones y dos incógnitas, el número
de operaciones es mucho mayor si utilizamos para resolver el sistema la orden “inv(A)∗b”.
Dentro de los ejercicios que se acompañan al final se propone la construcción de una
función que nos permita resolver un S.E.L. cuadrado por el método de Cramer. Serı́a conve-
niente que el lector comparase con algunos ejemplos el número de operaciones necesario para
la resolución del sistema utilizando el método de Cramer y el algoritmo división izquierda.
32 CAPÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES
>>tic
>>expresiones
>>toc
La función “cputime” nos propociona el tiempo en segundos usado por MATLAB desde
el instante en que entramos en el programa. De esta forma podemos calcular el tiempo de
cálculo de cualquier expresión realizando las siguientes instrucciones:
>>t1=cputime
>>expresiones
>>t2=cputime-t1
Para comparar los tiempos de cálculo también podemos hacer uso de los comandos “clock”
y “etime”. El primero de ellos nos muestra un vector fila de seis componentes en el que se
puede obeservar el año, mes, dı́a, hora, minutos y segundos que marca el reloj de nuestro orde-
nador. La orden “etime(t2,t1)” nos proporciona el tiempo, en segundos, que han transcurrido
entre dos vectores de tiempo “t1” y “t2”.
Creamos una matriz y un vector (de grandes dimesiones2 ) formados por números aleato-
rios, comprendidos entre cero y uno, con ayuda de la función “rand(m,n)”:
>>A=rand(30);b=rand(30,1);
>>t1=clock;x=A\b;etime(clock,t1)
ans =
0.5167
>>t1=clock;x=inv(A)*b;etime(clock,t1)
ans =
1.0333
Se comprueba que la resolución del sistema mediante la orden “inv(A)∗b” necesita mayor
tiempo de cálculo que la división izquierda (de hecho, casi el doble de tiempo).
2
Hacemos esto, pues la diferencia entre los tiempos de cálculo de los dos métodos para S.E.L. pequeños es
casi inapreciable.
3.2. DESCOMPOSICIONES 33
3.2 Descomposiciones
3.2.1 Factorización LU.
Dada una matriz A “[L,U]=lu(A)” realiza la descomposición LU (LR) de la matriz cuadrada
A. Esta descomposición siempre se realiza siguiendo el método de Gauss con estrategia de
pivote parcial, por lo cual, aunque U es triangular superior, L en la mayorı́a de los casos no
es triangular inferior.
>> [L,U,P]=lu(A)
L =
1.0000 0 0
-1.0000 1.0000 0
0.3333 -0.6667 1.0000
U =
0 0 14.3333
P =
1 0 0
0 0 1
0 1 0
Vemos que la función “lu” posee una caracterı́stica particular: la función puede ser llama-
da con distinto número de argumentos de salida según nuestra finalidad. Esta caraterı́stica
no es privilegio exclusivo de la función “lu”, sino muchas otras funciones de MATLAB,
como veremos más adelante, también presentan esta particularidad.
No obstante la función “chol” con dos argumentos de salida nunca nos proporciona men-
saje de error. Si escribimos [R, p] =chol(A) obtemos las siguientes respuestas:
>>[R,p]=chol(T)
R=
1.4142 -0.7071
0 1.2247
p=
3
3.2.3 Factorizacion QR
La factorización QR de una matriz A, no necesariamente cuadrada, puede realizarse medi-
ante la orden “[Q,R]=qr(A)”; Q será entonces una matriz ortogonal (o unitaria en el caso
complejo) y R una matriz triangular superior del mismo tipo que A, tales que A = QR. Tal
descomposición se lleva a efecto mediante transformaciones de Householder y como se puede
observar en el siguiente ejemplo los elementos diagonales de R no tienen porque ser positivos.
(Se realiza la descomposición de esta forma por cuestiones de estabilidad en el método).
>> M=[4 6 -2 7;2 4 10 -1;-12 4 -3 0];
>> [Q,R]=qr(M)
Q =
-0.3123 -0.7840 0.5365
-0.1562 -0.5147 -0.8430
0.9370 -0.3471 0.0383
R =
-12.8062 1.2494 -3.7482 -2.0303
0 -8.1510 -2.5375 -4.9732
0 0 -9.6183 4.5984
Podemos comprobar que Q es ortogonal, es decir, (salvo errores de redondeo) Qt Q = I.
36 CAPÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES
>> Q’*Q
ans =
1.0000 -0.0000 -0.0000
-0.0000 1.0000 -0.0000
-0.0000 -0.0000 1.0000
De la misma forma que la función “lu”, la función “qr” también puede ser ejecutada
con tres argumentos de salida: la orden “[Q,R,P]=qr(A)” proporciona una matriz ortogonal
(unitaria) Q, una matriz R triangular superior con elementos diagonales decrecientes y una
matriz C de permutación de columnas, tales que AC = QR.
>>[Q,R,MPC]=qr(M)
Q =
-0.3123 0.3187 0.8949
-0.1562 -0.9464 0.2826
0.9370 -0.0515 0.3454
R =
-12.8062 -3.7482 1.2494 -2.0303
0 -9.9474 -2.0792 3.1777
0 0 7.8814 5.9817
MPC =
1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
0 0 -0.0000
0 0 0
Hacemos notar que, una vez conocida R, el cálculo del rango de A es inmediato, pues Q
es no singular. Para el ejemplo anterior R tiene dos filas nulas y por consiguiente el rango de
MM es dos. En efecto,
>>rank(MM)
ans =
2
>>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
Or’*Or
ans =
1.0000 -0.0000 0.0000
-0.0000 1.0000 -0.0000
0.0000 -0.0000 1.0000
nulo’*nulo
ans =
1.0000
38 CAPÍTULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES
Nótese que con ayuda de “null” y \ se pueden resolver sistemas de ecuaciones compatibles
indeterminados. Por ejemplo, el sistema compatible indeterminado
x + 2y = 3
2x + 4y = 6
De este forma, todas las soluciones del sistema anterior vienen dadas por
x= −0.8944α
con α ∈ R
y = 1.5 + 0.4472α
Puesto que en la mayorı́a de los casos se trabaja con la norma euclı́dea (i.e., en norma
2), por defecto “norm(A)” nos da el mismo valor que “norm(A,2)”. (De nuevo la función
“norm” puede tener distinto número de argumentos de entrada)
Para vectores “norm(v,p)” calcula la norma p del vector v y en este caso p puede ser
cualquier real del interalo [1, +∞].
>> cond(H)
ans =
4.7661e+005
Parece, entonces, necesario obtener el número de condición de la matriz de coeficientes de
un sistema de ecuaciones lineales antes de resolverlo. Pero afortunadamente, MATLAB a
medida que resuelve el sistema calcula, mediante el comando “rcond(A)”, una aproximación
del inverso del número de condición de la matriz de coeficientes A, dándonos un aviso para
que tengamos en cuenta que si “rcond(A)” es pequeño, hay posibilidad de un gran error en
la solución si hemos cometido un pequeño error en los datos del sistema. Para la matriz
“H=hilb(5)”, 1/cond(A) = 2.0982e − 006 y mediante la función “rcond” se obtiene:
>> rcond(H)
ans =
1.4407e-006
Ponemos de manifiesto a continuación la ventaja de la información complementaria de
MATLAB cuando resolvemos un S.E.L. Por ejemplo, para la resolución del sistema
x + 2y + 3z = 1
4x + 5y + 6z = 0
7x + 8y + 9z = 0
mediante MATLAB, se efectúan las siguientes instrucciones:
>>A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>>b=[1 0 0]’
b =
1
0
0
>>x=A\b
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 2.937385e-18
x=
1.0e+15 *
3.1522
-6.3044
3.1522
3.3. NORMAS Y NÚMERO DE CONDICIÓN 41
>>A*x
ans =
0.5000
-1.0000
-2.5000
>>det(A)
ans =
0
>>inv(A)
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 2.937385e-18
ans =
1.0e+16 *
0.3152 -0.6304 0.3152
-0.6304 1.2609 -0.6304
0.3152 -0.6304 0.3152
Como se observa MATLAB nos ha dado el mismo mensaje anterior y además ha “cal-
culado” la inversa de A. Evidentemente esta matriz no es la inversa de A, pues A ∗ ans no
da como resultado la matriz identidad:
>>A*ans
ans =
1.0e+17 *
-0.0901 -0.1801 -0.2702
-0.3603 -0.7206 -1.0809
-0.6305 -1.2610 -1.8915
>>rank(A)
ans =
2
>>rank([A b])
ans =
3
>> rank(H)
ans =
5
>> rank(H,.001)
ans =
3
Si hemos introducido un sólo argumento de entrada para “rank” el valor de tol viene dado
por defecto como tol=max(size(A))∗norm(A)∗eps.
Finalizamos esta sección proponiendo al lector que resuelva los siguientes sistemas de
ecuaciones, que se encuentran propuestos en el libro de G. Strang, Algebra Lineal Aplicada,
y que compare los resultados obtenidos:
(
x + y = 2
[A]
x + 1.0001y = 2
(
x + y = 2
[B]
x + 1.0001y = 2.0001
Capı́tulo 4
Autovalores y polinomios
Ası́, se obtiene una matriz diagonal D cuya diagonal contiene los autovalores de la matriz
V y una matriz X que verifica la condición: V X = XD. Por tanto, las columnas de X son
autovectores de V .
En el siguiente ejemplo comprobamos que las columnas de X no tienen por que ser
linealmente independientes (ténganse en cuenta los errores de redondeo).
43
44 CAPÍTULO 4. AUTOVALORES Y POLINOMIOS
0 1
>>rank(X)
ans =
1
La función “eig(A)” puede utilizar uno o dos argumentos de salida. En el caso de utilizar
dos argumentos se obtienen los autovectores y los autovalores como se ha descrito anterior-
mente. Cuando utilizamos un único argumento de salida obtenemos un vector columna que
contiene los autovalores (puede que repetidos) de la matriz A.
>>aut=eig(V)
aut =
5.7446
-5.7446
>>VV=[1 2;-2 1]
VV =
1 2
-2 1
>>autVV=eig(VV)
autVV =
1.0000 + 2.0000i
1.0000 - 2.0000i
>>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
Podemos comprobar que la raı́z cuadrada de los autovalores de At A son los valores sin-
gulares de A:
>>sqrt(eig(A’*A))
ans =
1.3846
3.7527
Véase que la función “sqrt” ha actuado sobre cada uno de los elementos del vector columna
formado por los autovalores de At A.
Naturalmente la descomposición en valores singulares también es posible para matrices
con elementos complejos:
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
Nótese que uno de los valores singulares de MN es nulo; esto sucede porque MN no es de
rango máximo.
Relacionada con el algoritmo de cálculo de los valores singulares de una matriz A se
encuentra la orden “pinv(A)’ que calcula la pseudoinversa (de Moore-Penrose) de A. Recor-
damos que la pseudoinversa de una matriz A de orden m × n (denotada por A+ ) puede ser
calculada, una vez obtenida la descomposición en valores singulares de A, como A+ = V S + U ∗
donde S + es la matriz diagonal de orden n × m cuyos elementos diagonales no nulos son los
inversos de los elementos no nulos de S. Recuérdese además, que A+ A = I y que la pseu-
doinversa de A coincide con la inversa de A si ésta es cuadrada y regular.
>>ps=pinv(A)
ps =
0.4444 -0.5556 -0.1111
0.1111 0.1111 0.2222
>>ps*A
ans =
1.0000 -0.0000
4.3. TRATAMIENTO DE POLINOMIOS 47
0.0000 1.0000
>>AA=[1 2;5 1];
>>inv(AA)
ans =
-0.1111 0.2222
0.5556 -0.1111
>>pinv(AA)
ans =
-0.1111 0.2222
0.5556 -0.1111
>>p=[2 0 -3 7]
p =
2 0 -3 7
y podemos observar que el determinante de M es, salvo signo, el término independiente del
polinomio caraterı́stico de M y que el coeficiente de λ2 , salvo signo, nos lo proporciona la
traza de M .
>>det(M)
ans =
-1004
>>trace(M)
ans =
5
El lector deberı́a pensar una estrategia que permita sumar o restar polinomios de grados
diferentes. La multiplicación y división de los polinomios p y q se llevan a cabo con las
funciones “conv(p,q)” y “[c,r]=deconv(p,q)”. Para la función “deconv” se entiende que en c
se guarda el cociente de la división de p entre q y en r el resto de la misma.
>>p=[1 -2 1],q=[1 -1 1]
p =
1 -2 1
q =
1 -1 1
>>conv(p,q)
ans =
1 -3 4 -3 1
x5 − 2x4 − x3 + 7x2 − 6x + 2
El cociente y el resto de la división se calculan mediante:
x2 − 2x + 1
>>p=[1 -2 -1 7 -6 2]
p =
1 -2 -1 7 -6 2
>>q=[1 -2 1]
q =
1 -2 1
>>[c,r]=deconv(p,q)
c =
1 0 -2 3
r =
0 0 0 0 2 -1
P (x) a1 an
= + ···+ + k(x)
Q(x) x − r1 x − rn
Es decir,
x2 −0.5 0.5
= + +1
x2 − 1 x+1 x−1
La función “residue” actúa en MATLAB como su propia inversa, pues si se utiliza con
tres argumentos de entrada y dos de salida, es decir, de la forma “[p,q]=residue(a,r,k)”,
nos proporciona la función racional que tiene como descomposición en fracciones simples los
vectores a, r y k.
>>[p,q]=residue(a,r,k)
p =
1.0000 0 0
q =
1 0 -1
>>p=[1 0 -1]
p =
1 0 -1
>>rp=roots(p)
rp =
-1
1
Si el polinomio posee raı́ces complejas MATLAB también nos las proporciona. Las raı́ces
de q(x) = x3 − 2x2 + x − 2 son:
4.3. TRATAMIENTO DE POLINOMIOS 51
>>q=[1 -2 1 -2]
q =
1 -2 1 -2
>>rq=roots(q)
rq =
2.0000
-0.0000 + 1.0000i
-0.0000 - 1.0000i
>>polyval(p,rp(1)),polyval(p,rp(2))
ans =
0
ans =
0
>>polyval(q,rq(1)),polyval(q,rq(2)),polyval(q,rq(3))
ans =
-6.6613e-15
ans =
0+ 2.2204e-16i
ans =
0- 2.2204e-16i
Puede también evaluarse el valor del polinomio en una serie de puntos, sin más que
introducir estos puntos en un vector x y teclear la orden anterior. Los valores de r(x) =
x2 − x + 1 para x = 1, x = sqrt(2) y x = −1/2 son
>>r=[1 -1 1]
r =
1 -1 1
>>x=[1 sqrt(2) -1/2]
x =
1.0000 1.4142 -0.5000
>>polyval(r,x)
ans =
1.0000 1.5858 1.7500
El algoritmo que MATLAB utiliza para calcular las raı́ces de un polinomio está basado
en la función “compan(p)” que determina la matriz compañera del polinomio p; esto es, la
52 CAPÍTULO 4. AUTOVALORES Y POLINOMIOS
matriz cuyo polinomio caracterı́stico es, salvo constante multiplicativa, el polinomio dado.
Por ejemplo, la matriz compañera del polinomio p(x) = 2x2 − 2x + 4 es:
>>p=[2 -2 4]
p =
2 -2 4
>>A=compan(p)
A =
1 -2
1 0
>>pA=poly(A)
pA =
1 -1 2
Una vez que MATLAB obtine la matriz compañera de un polinomio p, con ayuda de
la función “eig”, calcula los autovalores de la misma, que, coinciden, naturalmente, con las
raı́ces de p.
>>roots(p)
ans =
0.5000 + 1.3229i
0.5000 - 1.3229i
>>eig(A)
ans =
0.5000 + 1.3229i
0.5000 - 1.3229i
Se pide:
2. Con la recta obtenida, estimar el tiempo que tardarı́a en salir del laberinto una persona
que ha permanecido en la habitación 10 horas.
Puesto que nos piden una recta debemos encontrar el polinomio de grado uno que mejor
aproxime a los punto de la tabla anterior:
>>x=1:6
x =
1 2 3 4 5 6
>>y=[0.8 2.1 2.6 3 3.1 3.3]
y =
0.8000 2.1000 2.6000 3.0000 3.1000 3.3000
>>recta=polyfit(x,y,1)
recta =
0.4543 0.8933
>>rats(recta)
ans =
159/350 67/75
Luego la recta que mejor aproxima, en el sentido de los mı́nimos cuadrados, viene dada
por la ecuación y = 159/350x + 67/75 y el tiempo estimado para salir del laberinto después
de diez horas en la habitación se obtiene como sigue:
>>estimado=polyval(recta,10)
estimado =
5.4362
>>poliinterp=polyfit(x,y,5)
poliinterp =
0.0125 -0.2250 1.5542 -5.2250 9.0833 -4.4000
>>rats(poliinterp)
ans =
1/80 -9/40 373/240 -209/40 109/12 -22/5
54 CAPÍTULO 4. AUTOVALORES Y POLINOMIOS
5
Tiempo en el laberinto
0
1 2 3 4 5 6 7 8 9 10
Tiempo en la habitacion
>>estimado2=polyval(poliinterp,10)
estimado2 =
118.1000
>>p=[1 2 -1]
p =
1 2 -1
>>A=[1 2;-1 1]
A =
1 2
-1 1
3
Obsérvese la diferencia tan enorme entre las dos estimaciones.
4.3. TRATAMIENTO DE POLINOMIOS 55
>>polyvalm(p,A)
ans =
0 8
-4 0
>>pcA=poly(A)
pcA =
1.0000 -2.0000 3.0000
>>polyvalm(pcA,A)
ans =
1.0e-15 *
0.4441 0
0 0.4441
>>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
>>logariteA=logm(expoA)
logariteA =
1.0000 2.0000 - 0.0000i
-1.0000 - 0.0000i 1.0000 + 0.0000i
>>raizA*raizA
56 CAPÍTULO 4. AUTOVALORES Y POLINOMIOS
ans =
1.0000 + 0.0000i 2.0000 + 0.0000i
-1.0000 + 0.0000i 1.0000 - 0.0000i
No sólo las anteriores funciones pueden ser evaluadas matricialmente, sino que cualquier
función elemental puede ser evaluada en una matriz. Esto se consigue con la ayuda de la
función de MATLAB “funm(A,‘función’)” que determina el valor de “función” en la matriz
A. Por el ejemplo, sen(A) es:
>>sA=funm(A,’sin’)
sA =
1.8329 + 0.0000i 1.4786 - 0.0000i
-0.7393 - 0.0000i 1.8329 - 0.0000i
Capı́tulo 5
Posibilidades gráficas
57
58 CAPÍTULO 5. POSIBILIDADES GRÁFICAS
POLIGONAL
6
4
eje de ordenada
-1
-2
1 1.5 2 2.5 3 3.5 4 4.5 5
eje de abcsisa
PARABOLA
16
14
12
10
Figura 5.2
8
-2
-3 -2 -1 0 1 2 3 4
PARÁBOLA
3
2.5
1.5
0.5
-0.5
-1
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
>>plot(x,px),title(’PARABOLA’),grid
>>axis([-2 2 -1 3])
producen un cambio de escala en la figura 5.2 (ver figura 5.3). Para anular el efecto de esta
orden (i.e., el cambio de escala) y volver a la escala por defecto tecleamos “axis”.
MATLAB permite, mediante la orden “plot(x,y,’simb’)”, elegir el tipo de lı́nea y el color
al representar una curva. En este caso, simb se trata de una cadena de uno o varios caracteres
que determinan el tipo de lı́nea y/o el color elegidos.
También podemos dibujar simultáneamente varias curvas con una instrucción de la forma
plot(x1,y1,’simb1’,x2,y2,’simb2’,...,xN,yN,’simbN’)
que mostrará en pantalla todas las curvas (xI,yI) (con la opción ’simbI’) en único gráfico.
En la figura 5.4 se ilustra el uso conjunto de estas dos últimas posibilidades.
60 CAPÍTULO 5. POSIBILIDADES GRÁFICAS
2.5
1.5
0.5
-0.5
-1
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
>> 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’)
>> th=0:.08:100;
>> R=exp(0.1*th);
>> polar(th,R)
>> title(’ESPIRAL LOGARITMICA’)
Para obtener una representación sin el sistema de referencia procederemos como se indica
a continuación:
>> clf
>> axis off
5.1. GRÁFICOS EN EL PLANO 61
ESPIRAL LOGARITMICA
90
2.5e+004
120 60
2e+004
1.5e+004
150 30
1e+004
5000
180 0
210 330
240 300
270
>> hold on
>> polar(th,R)
>> title(’ESPIRAL LOGARITMICA’)
>> hold off
La orden “clf” limpia la pantalla gráfica. El comando “axis off” desactiva los ejes del
gráfico que nos disponemos a realizar. La orden “hold on” hace que se superpongan en dicha
ventana todos los gráficos que se dibujen a continuación. La orden “hol off” anula “hold
on”. La utlización de estas dos ordenes reviste interés, además de en este caso concreto, en
aquellos casos en los que interese visualizar simultáneamente distintas gráficas en una misma
figura.
ESPIRAL LOGARITMICA
EPICICLOIDE
6
-2
-4
-6
-6 -4 -2 0 2 4 6
60
50
40
30
20
10
0
-4 -3 -2 -1 0 1 2 3 4 5 6
>> stairs(x,y)
60
50
40
30
20
10
0
-2 -1 0 1 2 3 4
HELICE
35
30
25
20
15
10
5
0
1
0.5 1
0 0.5
0
-0.5 -0.5
-1 -1
EL SOMBRERO
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
10
5 Superficie 10
0 5
0
-5 -5
-10 -10
5.2.2 Superficies
Para representar una función Z = f (x, y) procedemos como sigue:
>> 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)
>>[x,y] = meshgrid(-2:.1:2);
>> z = x .* exp(-x.^2 - y.^2);
>> mesh(x,y,z)
>>title(’SUPERFICIE’)
>> contour3(x,y,z)
>> title(’Lineas de contorno’)
>> 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’)
1
1
0.5
0.5
0
0
-0.5
-10 10
-0.5 0 0
-10 0 -10
10 0 10 10 -10
1
1
0 0
-1
-1 -10 10
-10 10
0 0
0 0
10 -10 10 -10
Figura 5.12: Distintos tipos de vista
68 CAPÍTULO 5. POSIBILIDADES GRÁFICAS
SUPERFICIE
0.5
-0.5
2
1 2
0 1
0
-1 -1
-2 -2
2 −y 2
Figura 5.13: z = e−x
Lineas de contorno
0.4
0.2
-0.2
-0.4
2
1 2
0 1
0
-1 -1
-2 -2
Curvas de nivel
2
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Curvas de nivel
2
1.5
1 -0.1
0.3
0.5
-0.4
-0.3
0.4
0
-0.5 0.2
-0.2
-1 0.1
-1.5
0
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
0.5
-0.5
2
1 2
0 1
0
-1 -1
-2 -2
>> meshc(x,y,z)
>> title(’Superficie y curvas de nivel’)
Si queremos visualizar las curvas de nivel y los vectores gradiente utilizaremos las órdenes
“gradient” y “quiver”. Esta última orden visualiza un vector cuyas componentes vienen dadas
por “gradient”
En el siguiente ejemplo se dibujan las curvas de nivel identificándolas con la opción “man-
ual” de la orden “clabel”. Utilizando dicha opción nos situamos en la vantana gr’áfica y
pulsamos el ratón encima de la curva que deseemos, seguidamente aparecerá junto a ella el
número que le corresponda.
>>[x,y] = meshgrid(-2:.1:2);
>> z = x .* exp(-x.^2 - y.^2);
>> [px,py] = gradient(z,.1,.1);
>> cs=contour(x,y,z);clabel(cs,’manual’);
5.2. CURVAS EN EL ESPACIO Y SUPERFICIES 71
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
1.5
-0.1 0.1
1 0.2
0.3
0.5
-0.2
-0.4
0
0.4
-0.3
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Los ficheros de escritura o programas son ficheros del tipo “nombre.m” que contienen una
sucesión de instrucciones de MATLAB. Al teclear dentro de una sesión el nombre del fichero
se produce la ejecución secuencial de todas las instrucciones en él contenidas. Estos archivos
pueden ser utilizados de dos formas:
• Como programas.
73
74 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS
al teclear
>>matrices
obtenemos
B =
2 -3
0 4
La matriz A no aparece en pantalla debido al ; sin embargo, a partir de este momento, las
matrices A y B podrán ser utilizadas en la sesión como si hubieran sido definidas de manera
explı́cita. Naturalmente, esto resulta interesante, entre otras cosas, si vamos a trabajar con
una matriz suficientemente grande en distintas sesiones de MATLAB.
Al disponer MATLAB de instrucciones del tipo IF, WHILE y FOR (análogas a las que
podemos encontrar en lenguajes de programación como FORTRAN o PASCAL) si un M—
fichero “nombre.m” contiene una sucesión de instrucciones de este tipo que describen una
cierta tarea, al teclear dentro de una sesión el nombre del fichero, dichas instrucciones se
ejecutarán secuencialmente dando un resultado similar a la ejecución de un programa por un
intérprete.
Antes de continuar describiremos las instrucciones “if”, “while” y “for” anteriormente
mencionadas y algunas otras que resultan útiles en este contexto. Para ello comentaremos,
dentro de un ejemplo concreto, el uso y posibilidades de estas órdenes.
El fichero “bg.m” contiene:
gc=0;
c=0;
disp(’Deme el extremo inferior del intervalo’)
a=input(’a= ’);
disp(’Deme el extremo superior del intervalo’)
b=input(’b= ’);
if b<=a
error(’Intervalo degenerado’)
end
disp(’Introduzca el nombre del archivo donde se encuentra la funcion’)
g=input(’nombre de funcion= ’,’s’);
6.1. INSTRUCCIONES EN MATLAB: INPUT, IF, ERROR, WHILE, BREAK, PAUSE, FOR . . .
plot(gc)
grid
title(’Representacion grafica de la aproximacion’)
end
Las primeras lı́neas del programa “bg” son lı́neas de comentario. Si en una lı́nea aparece
el caracter “%”, todo lo que escribamos en esa lı́nea a continuación del tanto por ciento será
interpretado como un comentario y no se evaluará.
La lı́nea,
hace que el programa disponga en pantalla el texto escrito entre las comillas. (La función
“disp(matriz)” hace que la matriz1 aparezca en pantalla).
La orden:
a=input(’a= ’);
if condición1
instrucciones1
elseif condición2
instrucciones2
.
.
.
else instruccionesN end
y actúa de la siguiente forma:
Si “condición1” se satisface se ejecutarán solamente las “instrucciones1”, si por el contrario
se satisface “condición2” sólo las “instrucciones2”se ejecutarán, . . . . Si ninguna de estas
condiciones es satisfecha se ejecutará sólo el bloque “instruccionesN”. Las condiciones que
aparecen en un bloque IF son expresiones del tipo: “expresión1 S expresión2”, donde S puede
ser: == (igual), <, >, <=, >= y ∼ = (distinto), incluidos los operadores lógicos & (y), | (o),
∼ (No) y las funciones lógicas que se encuentran en los cuadros—resumen del último capı́tulo.
La orden
error(‘texto’)
a= 1
Deme el extremo superior del intervalo
b= -1
??? Error using ==> bg
Intervalo degenerado
Las instrucciones de tipo WHILE son fáciles de entender. La estructura general es:
while condición
instrucciones
end
78 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS
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
1) Si
2) No
if iop==1
plot(gc)
grid
title(’Representacion grafica de la aproximacion’)
end
for expresión
instrucciones
end
Por ejemplo, usando FOR podemos crear una matriz triangular inferior mediante dos
bucles anidados:
Por último, señalamos que los programas en MATLAB, como el programa “bg”, no
poseen variables internas al mismo. Esto es, cualquier variable definida en el programa pasa,
automáticamente, a formar parte de las variables del espacio de trabajo. Por consiguiente, si
en una sesión definimos la variable a como:
>>a=[1 2;2 4]
a =
1 2
2 4
>>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
ep= 0.00001
solucion =
1.0000
El numero de iteraciones es:
i =
18
1) Si
2) No
function [y1,...,yM]=fun(x1,...,xN)
Nótese que N es una variable interna de la función “house” que no pasará a formar de
nuestro espacio de trabajo. Véase
>>N
??? Undefined function or variable.
Symbol in question ==> N
82 CAPÍTULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. M—FICHEROS
Las primeras lı́neas de comentario definidas en el fichero “house.m” nos informan del
cometido de la función “house(x)”. Ası́, con ayuda de la orden “help” podemos obtener
información de la función “house”.
>>help house
La primera lı́nea de comentario se denomina lı́nea H1. La orden lookfor palabra realiza
una busqueda de palabra en la lı́nea H1 de todas las funciones contenidas en la ruta de acceso
de MATLAB. Para que lookfor realice una busqueda en el conjunto de las primeras lı́neas
de comentario basta teclear la orden lookfor palabra -all.
Para acabar este capı́tulo recordamos que algunas funciones de MATLAB pueden ser
ejecutadas con distintos argumentos de entrada y distintos argumentos de salida y que esta
caracterı́stica estaba ı́ntimamente ligada con las variables “nargin” (número de argumentos de
entrada) y “nargout” (número de argumentos de salida). Pues bien, como no podı́a ser menos,
cualquier función creada por el usuario puede poseer esta caracterı́stica si ası́ lo explicitamos
en la definición de nuestra función. Para ver esto nos creamos la función “numero” que nos
darán el número de argumentos de entrada y el número de argumentos de salida cuando
realizamos una llamada a la función “numero”.
El fichero “numero.m” contiene:
function [y1,y2,y3,y4,y5,y6,y7,y8,y9,y10]=numero(x1,x2,x3,x4,x5,...
x6,x7,x8,x9,x10)
%NUMERO: Numero de argumentos de entrada y salida
%Esta funcion nos proporciona el numero de argumentos de entrada
%y salida. Como maximo podemos dar diez argumentos de entrada y diez
%de salida.
y1=nargin;
y2=nargout;
>>[a,b,c,d]=numero(1,2,[1 2],sqrt(1),4)
a =
5
b =
4
c =
6.2. DEFINICIÓN DE FUNCIONES 83
[]
d =
[]
Observamos ası́ que cuando realizamos la llamada a una función MATLAB, automáticamente
se determinan el número de argumentos de entrada y el número de argumentos de salida de
la llamada efectuada.
Por ejemplo, podemos crearnos una función que con dos argumentos de entrada nos
proporcione la suma de ambos y que con tres argumentos de entrada nos de el producto de
esos tres números. Llamamos a esta función “sumpro” y está definida como:
function y=sumpro(x1,x2,x3)
%SUMPRO: Suma o producto
%La funcion sumpro nos proporciona la suma de dos numeros si
%introducimos dos argumentos de entrada y el produto de tres
%numeros, si son tres los argumentos de entrada.
na=nargin;
if na==1,
error(’No hay bastantes argumentos de entrada’)
elseif na==2
y=sum([x1 x2]);
else
y=prod([x1 x2 x3]);
end
>>sumpro(2)
??? Error using ==> sumpro
No hay bastantes argumentos de entrada
>>sumpro(1,2)
ans =
3
>>sumpro(1,2,5)
ans =
10
>>sumpro(1,2,3,4)
??? Error using ==> sumpro
Too many input arguments.
Capı́tulo 7
En esta sección comentaremos, de forma breve, como Matlab puede ser utilizado para re-
solver los problemas que con más frecuencia se pueden encontrar en el campo del Análisis
Numérico: sistemas de ecuaciones (no lineales), integración, optimización y ecuaciones difer-
enciales.
Sólo vamos a comentar las versiones básicas de estas órdenes, que poseen numerosas
variantes. Como siempre recomendamos una lectura a fondo del manual.
2. Sistemas:
Para resolver un sistema de ecuaciones (no lineal1 ), como por ejemplo, (ver figura 7.2)
x2 + y 2 − 1 = 0
x−y =0
1
La orden fsolve ha pasado a formar parte del la caja de herramientas de optimización.
84
7.2. INTEGRACIÓN NUMÉRICA 85
2. “quad8(‘g’,a,b)” (Newton—Cotes)
>>area=quad(’g’,-1,0)
area =
2.810248532388182e+000
>>area=quad8(’g’,-1,0)
area =
2.810268301723342e+000
86 CAPÍTULO 7. ASPECTOS DE ANÁLISIS NUMÉRICO
Resolucion y minimizacion
1
cero
0
-1
-2
-3
-4
-5
-6
-7 minimo
-8
0 0.5 1 1.5 2 2.5 3
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
-1 -0.5 0 0.5 1
Esto nos ofrece el punto del intervalo [1, 2.5] donde se alcanza el mı́nimo de g (véase la
figura 7.1). Para funciones de varias variables disponemos de la orden “fmins(‘f’,x0)” que
calcula el mı́nimo de la función f más cercano al punto x0 .(En la versión 4.2c ’fmins’se incluye
en el toolbox dde optimización). Por ejemplo, la función
−4x
z=
x2 + y 2 + 1
alcanza su valor mı́nimo en el punto (1, 0), donde vale −2 (ver figura 7.3). Esto puede
−4x
calcularse si definimos f (x, y) = 2 en el archivo maximini.m y teclemos las órdenes
x + y2 + 1
>>mini=fmins(’maximini’,[0,0.5]’)
mini =
0.9999
0.0001
>>maximini(mini)
ans =
-2.0000
El archivo maximini.m contiene
function z=maximini(p)
x=p(1);y=p(2);
z=zeros(1,1);
z=(-4*x)./(x.^2+y.^2+1);
1.5
0.5
-0.5
-1
-1.5
-2
-2 2
-1 1
0 0
1 -1
2 -2
function y=dife(t,x)
y=cos(t).*x;
y tecleamos:
>>t0=0;
>>tf=3;
>>x0=1;
>>[t,x]=ode23(’dife’,t0,tf,x0);
Ası́, x contiene los valores (aproximados) que toma la solución sobre los puntos del inter-
valo que se almacenan en el vector t.
>>disp(’ t x ’),disp([t,x])
t x
0 1.0000
0.0300 1.0304
0.1726 1.1874
0.3151 1.3632
0.4602 1.5590
0.6103 1.7736
0.7684 2.0033
0.9380 2.2394
1.1245 2.4641
7.4. RESOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS 89
2.8
2.6
2.4
2.2
2
x
1.8
1.6
1.4
1.2
1
0 0.5 1 1.5 2 2.5 3
t
1.3351 2.6433
1.5794 2.7169
1.8706 2.5977
2.1746 2.2751
2.3762 1.9969
2.5520 1.7415
2.7285 1.4919
2.8893 1.2817
3.0000 1.1499
En las figuras 7.4 y 7.5 pueden contemplarse la solución aproximada ofrecida por MAT-
LAB y la solución exacta, respectivamente. Nótese que la solución exacta es x(t) = esent .
2.8
2.6
2.4
2.2
2
x
1.8
1.6
1.4
1.2
1
0 0.5 1 1.5 2 2.5 3
t
Consejos prácticos
En este capı́tulo exponemos algunos de los comandos que resultan de ı́nteres cuando nos
disponemos a trabajar con MATLAB. Ponemos en evidencia que algunas de las funciones
que recogemos en este capı́tulo ya han sido tratadas en los anteriores, pero estamos conven-
cidos que resultará beneficioso darles un ligero repaso.
>>help bg
91
92 CAPÍTULO 8. CONSEJOS PRÁCTICOS
Estamos convencidos que un primer contacto con MATLAB debe ser la visualización de
todas y cada una de las demostraciones que el programa posee. En ellas pueden observarse
las posibilidades y usos de MATLAB en un tiempo relativamente corto. Las demostraciones
que MATLAB nos ofrece pueden contemplarse tecleando la orden “demo”. Una vez tecleada
esta orden aparecerá, dependiendo de la versión utilizada, un menú con distintas opciones;
recomendamos que se visualicen todas, la primera vez que utilizamos MATLAB.
En versiones más actuales la orden “intro” nos da un breve resumen de las capacidades
de MATLAB. También recomendamos se haga uso de esta orden, al menos la primera vez
que hacemos correr MATLAB.
1. Instrucciones destinadas a obtener información sobre las variables que estamos utilizan-
do en la sesión:
• “who” nos proporciona una todas las variables que tenemos en memoria. La
variante “whos” nos da información adicional sobre las mismas.
De la misma forma que podemos salvar variables en un archivo ASCII, también podemos
cargar, en una sesión MATLAB, variables almacenadas en un archivo ASCII. Esto
podemos conseguirlo1 tecleando “load nombre”; ası́ obtendremos una variable llamada
“nombre” con el contenido del archivo de la misma denominación.
>>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.
end
y = max(s)./min(s);
La opción “diary nombre.m” tecleada dentro de una sesión, hará que todo cuanto aparez-
ca en pantalla a partir de esta lı́nea sea almacenado en el archivo “nombre.m”, hasta que
anulemos este comando mediante la instrucción “diary off”.
Recordamos que para las funciones, las variables definidas en ella (i.e., internas) no pasan
a forma parte del espacio de trabajo y que lo contrario sucede para los M—Ficheros que se
ejecutan en forma de programas.
Por último, invitamos al lector a investigar la utilidad del comando “echo” y sacarle todo
el partido posible.
Capı́tulo 9
BÁSICO
help Ayuda
lookfor Busca funciones relacionadas con una palabra
who Muestra las variables del espacio de trabajo
whos Lo mismo que who, pero con más información
what Muestra archivos.m
which Muestra el directorio de un comando
Ctrl—C Interrupción
quit Salir de MATLAB
exit Salir de MATLAB
demo Demostración de MATLAB
intro Breve introducción
casesen Sensibilidad a las mayúsculas
95
96CAPÍTULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MÁS UTILIZADOS
VARIABLES PERMANENTES
eps Valor de precisión
ans Variable de respuesta cuando no hay asignación
pi π
i, j Unidad imaginaria
Inf Infinito
NaN No es un número
flops Número de operaciones
clock Fecha y hora actual
date Fecha actual
nargin Número de argumentos de entrada
nargout Número de argumentos de salida
cputime Tiempo de CPU
tic, . . . , toc Tiempo de cálculo
CARACTERES ESPECIALES
= Asignación
[, ] Creación de matrices
. Punto decimal. Operaciones elemento a elemento
... Continuación de lı́nea
; Terminación de filas. Suprime impresión de resultado
% Comentario
: Genera vectores
FUNCIONES ELEMENTALES
abs Valor absoluto o módulo angle Argumento
real Parte real imag Parte imaginaria
conj Conjugado exp Función exponencial de base e
log Logaritmo neperiano log10 Logaritmo en base 10
sin Seno cos Coseno
tan Tangente asin Arcoseno
acos Arcocoseno atan Arcotangente
atan2 Arcotangente de x/y sinh Seno hiperbólico
cosh Coseno hiperbólico tanh Tangente hiperbólica
asinh Argumento seno hiperbólico acosh Argumento coseno hiperbólico
atanh Argumento tangente hiperbólica round Redondeo al entero más cercano
fix Redondeo hacia cero floor Redondeo hacia −∞
ceil Redondeo hacia +∞ sign Signo
rem Resto de la división sqrt Raı́z cuadrada
MATRICES ESPECIALES
compan Matriz compañera
eye Matriz identidad
gallery Matrices “famosas”
magic Matriz mágica
hilb Matriz de Hilbert
invhilb Inversa de la matriz de Hilbert
ones Matriz de unos
rand Matriz aleatoria
zeros Matriz nula
MANIPULACIÓN DE MATRICES
rot90 Rotación de 90o
tril Triangular inferior
triu Triangular superior
reshape Reordenación
fliplr Inversión en el orden de las columnas
flipud Inversión en le orden de las filas
: Bloques de Matrices
diag Diagonal
98CAPÍTULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MÁS UTILIZADOS
FUNCIONES MATRICIALES
det Determinante
poly Polinomio caracterı́stico
trace Traza
eig Autovalores y autovectores
diag Diagonal
expm Exponencial matricial
logm Logaritmo matricial
sqrtm Raı́z cuadrada matricial
funm Evaluación de función matricial
polyvalm Evaluación matricial de un polinomio
TRATAMIENTO DE POLINOMIOS
roots Raı́ces de polinomios
polyval Valor númerico de polinomios
conv Multiplicación
deconv División
residue Descomposición en fracciones simples (complejas)
polyfit Ajuste de datos mediante polinomios
99
CADENAS DE CARACTERES
eval Evalua texto
num2str Convierte números en cadenas de caracteres
int2str Convierte enteros en cadenas de caracteres
sprintf Convierte números en cadenas de caracteres
hex2num Convierte cadenas hexadecimales en números
INSTRUCCIONES DE ARCHIVO
load Cargar variables de un archivo en el espacio de trabajo
save Guardar variables en un fichero
type Mostrar contenido de un archivo
cd Cambiar de directorio
delete Borrar un archivo
diary Archivar una sesión de trabajo
! Instrucción del sistema operativo
Ver también fread, fopen, . . .
100CAPÍTULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MÁS UTILIZADOS
GENERANDO GRÁFICOS
plot Gráfico bidimensional
subplot Divide la pantalla de gráficos
loglog Gráfico logaritmico
semilogx Gráfico semilogaritmico en el eje x
semilogy Gráfico semilogarı́tmico en el eje y
polar Representación en polares
meshgrid Dominio de definición de superficies
mesh Gráfico tridimensional
bar, stairs Diagramas de barras
title Tı́tulo
xlable Etiqueta en el eje x
ylabel Etiqueta en el eje y
grid Mallado
text, gtext Coloca texto en la pantalla gráfica
ginput Entrada de coordenadas desde el gráfico
axis Escalado de los ejes
view Punto de vista tridimensional
shg Muestra el contenido de la pantalla gráfica
clf Limpia la pantalla de gráficos
hold Mantiene el gráfico en pantalla
101
ANÁLISIS NUMÉRICO
fzero Resolución de ecuaciones
quad, quad8 Integración numérica
fmin Mı́nimos en una variable
ode23, ode45 Resolución de ecuaciones diferenciales
diff Derivadas Aproximadas
Relación de ejercicios
√
2 π −1 4 ³ ´
D = 32 7 0 9 E= 1 0 2 3 −1
8 −1 6 2
102
103
1
e) A = (aij ) ∈ M4 (R), siendo aij = i+j
1
f) A = (aij ) ∈ M4 (R), siendo aij = i2 +j
1 0 1
g) 0 2 0
−1 0 3
√
4. Sea x = 2 e y = 1.
x 2x 3
(a) Introduce la matriz A = x + y x − y x + πy
π2 2πx x2 + y2
(b) Cambia la entrada 2πx a 2πx + y.
(c) Escribe A(2, 3) = 3 ∗ y; y muestra A.
(d) Escribe A(1, 1) = 0; y muestra A.
(e) Escribe A = 0; y muestra A.
12. Construye las siguientes matrices utilizando ., +, −, \, ∗, ∧, :, zeros, eye, ones y diag.
(a) A = θ2,3
(b) B = I4
1 1
(c) C= 1 1
1 1
1 0 0 0 0
(d) D= 0 1 0 0 0
0 0 1 0 0
0 1 1 1 1
(e) E= 1 0 1 1 1
1 1 0 1 1
0 0 0 0 0
1 0 0 0 0
(f) F =
0 2 0 0 0
0 0 3 0 0
105
0 0 0 0
(g) G= 1 0 0 0
0 1 0 0
0 1 0
(h) H= 0 0 2
0 0 0
à !
3 3 3
(i) I=
3 3 3
4 5 6
(j) J = 8 10 12
12 15 18
1 1/2 1/3
(k) K = 1/2 1/4 1/6
1/3 1/6 1/9
(l) La matriz de orden 5 cuyas filas son todas iguales a (1 2 3 4 5)
(m) La matriz de orden 5 cuyas columnas son todas iguales a (1 2 3 4 5)t
(n) Genera los vectores x = (1, 2, 3, 4, 5) e y = (−5, −4, −3, −2, −1) y calcula la suma
de ambos.
18. Encontrar la recta que mejor aproxima en el sentido de los mı́nimos cuadrados a la
nube de puntos {(−3, 10), (−2, 15), (−1, 9), (0, 27), (1, 18), (2, 34), (3, 42)}.
19. Con la utilidad help lee la información sobre sum, cumsum, prod, cumprod y diff.
4 X
X k
(a) Dado a = (1, 2, 3, 4) utiliza cumsum y sum para calcular el valor de ai .
k=1 i=1
1 2 3 Y3 X 3
(b) Dada la matriz A = 4 5 6 usa sum y prod para calcular el valor aij .
7 8 9 j=1 i=1
3 Y
X 3
(c) Usa sum y prod para calcular el valor aij para la matriz de apartado b).
j=1 i=1
(d) Dada la matriz del apartado b) usa sum y cumprod para calcular el valor
Y3 X
3
aij .
j=1 i=1
107
23. Comprobar directamente que det(Bε ) = 2∀ε 6= 0 siendo Bε la matriz definida por
à !
107 + ε 107 − ε
Bε = ε 6= 0
1/ε 1/ε
. Varı́e ε desde 10−1 hasta 10−12 y calcule los determinantes de las matrices Bε que se
obtienen.
adj(A)
24. Para la matriz A del ejercico 16 calcule A−1 mediante inv : (A) y . Compare
det(A)
número de operaciones.
Tome x1 = 0.47 y x2 = −0.11 y compruebe que “casi resuelve el sitema”. ¿Está bien o
mal condicionado?
con ε 6= 0.
Dar a ε valores pequeños y calcular los autovalores, determinantes y rangos de las
matrices A y B. ¿Qué conclusiones se pueden decucir?
à !
−0.4 0.5
28. Sea A = . Utilice MATLAB para sumar varios términos de la serie
−0.18 0.2
de eA y comprobar que converge a expm : (A).
(a) expm(zeros(2)).
(b) expm(eye(2)).
(c) X = expm([0 1; −1 0]); X t X.
(d) A = rand(3); X = logm(A); expm(X).
(e) sqrtm([0 1;0 0]).
31. Con la utilidad help informate sobre el cometido de la función poly. Construye los
polinomios que tienen por raı́ces:
(a) 1, 2, 3.
(b) ei2πk/5 , k = 0, 1, 2, 3, 4, 5.
(c) −1 con multiplicidada 5.
36. Experimente la función sdv sobre vectores filas y vectores columnas. ¿Qué puede
deducir?
37. Encontrar la recta que mejor aproxima en el sentido de los mı́nimos cuadrados a la nube
de puntos {(−3, 10), (−2, 15), (−1, 9), (0, 27), (1, 18), (2, 34), (3, 42)},utilizando la orden
”polyfit(x,y,n)”.
38. Encuentre la recta que pasa por los puntos (0, 1) y (2, 3).
39. Determine la parábola que pasa por (−1, 2), (0, 1) y (2, 4).
110 CAPÍTULO 10. RELACIÓN DE EJERCICIOS
44. Escribe una función MATLAB que remplace por 0 las componentes de un vector real
que sean menores, en valor absoluto, que un número positivo dado.
47. Construye una función que calcule el k—ésimo coeficiente del producto de polinomios.
111
48. Con ayuda de la función poly y las fórmulas de Cardano construye una función que
nos proporcione la suma de los cuadrados de los autovalores de una matriz.
50. Escribir una función que actúe sobre dos argumentos: una matriz A y un númrero
natural i; proporcionando como resultado la matriz que se obtiene al suprimir la i—
ésima fila de la matriz A.
52. Describir la función que nos proporciona el menor complementario del elemento aij de
la matriz A.
54. En un archivo .m describir la función que nos proporciona la adjunta (ya traspuesta)
de una matriz.
55. Con ayuda de la función anterior describir la función que determina la inversa de A
mediante A−1 = adj(A)
det(A) . Comparar el número de operaciones y el tiempo de cálculo
entre “nuestra función inversa” y la función inv de MATLAB.
56. Describir una función en MATLAB que nos proporcione la suma de dos polinomios
de cualquier grado.
57. Con ayuda de las funciones diag y triu describir la función que con una matriz A
como argumento de entrada nos proporcione la descomposición de A como suma de
una matriz diagonal, una triangular superior y otra inferior.
58. Diseñar una función que resuelva un sistema cuadrado por la regla de ,Cramer. Com-
parar el tiempo de cálculo y el número de operaciones con la resolución del sistema
mediante inv(A)*b y A\b.
59. Realizar una estrategia que calcule la descomposición LU sin pivoteo parcial, para una
matriz no necesariamente cuadrada.
60. Escribir una función con tres argumentos (una matriz A y dos números enteros positivos
i, j) que nos propocione la matriz que se obtiene intercambiando las filas i y j de la
matriz de entrada A.
112 CAPÍTULO 10. RELACIÓN DE EJERCICIOS
62. Contruir una función que nos proporcione la matriz resultante de sumar a la fila i—ésima
de A la j—ésima fila multiplicada por λ. (Naturalmente i 6= j).
64. Describir una función que tenga como argumentos de entrada una matriz A ∈ Mm×n
y un vector (columna) b ∈ Rm , genere 100 vectores (colunma) aleatorios x ∈ Rn y nos
devuelva el mı́nimo de kAx − bk cuando x recorre los anteriores vectores aleatorios.
65. Escribir una función MATLAB que aceptando, como argumento, una matriz cuadrada
A nos proporcione el valor máximo de kAuk cuando u recorre 100 vectores alearorios
unitarios.
66. Editar en un archivo de extensión .m una función que nos proporciona la recta que
mejor aproxima (por mı́nimos cuadrados) a una nube de puntos y que represente en un
mismo gráfico la recta encontrada y los puntos dados.
67. Escribir una función que nos de como resultado 1 ó 0, dependiendo si la matriz de
entrada es hermı́tica o no.
68. Hacer lo mismo que en el ejercicio anterior, pero para detectar matrices hermı́ticas
definidas positivas.
69. Generar un programa que nos pida un número natural positivo n y nos proprocione el
n—ésimo número de Fibonacci.
70. Diseñar una función que nos resulva un S.E.L. cuadrado compatible utilizando el método
de Gauss con estrategia de pivote total.
71. Describir una función MATLAB que nos estudie la compatibilidad de un sitema de
ecuaciones lineales y lo resuelva cuando sea compatible (determinado o indeterminado).
Aplicar esa función a
à !
1 1−ε
A= ε
−1+ε2
ε
−1+ε+ε2 con ε 6= 0 y b = (1, −1)t
ε ε
114