Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ISBN 84-8264-257-X
Deposito Legal SE-233-98
Febrero de 1998
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
4 Autovalores y polinomios 43
4.1 Autovalores y autovectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Valores singulares y pseudoinversa . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3 Tratamiento de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3.1 Polinomio caracterstico de una matriz cuadrada . . . . . . . . . . . . 47
4.3.2 Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3.3 Races de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3.4 Aproximacion por polinomios en el sentido de los mnimos cuadrados . 52
1
2 INDICE GENERAL
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
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
Elementos basicos
En esta primera seccion explicaremos aquello que es necesario conocer para comenzar a
utilizar MATLAB. En particular describiremos:
4. Utilizacion de la ayuda.
5. Funciones de MATLAB.
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:
3
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
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
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 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
5
resulta
>>x=
>>x(5)= abs(x(1))
produce
>>x=
>>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
>>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 mas adelante con mucho
mas detalle.
variable=expresion
o simplemente
expresion
>>sqrt(2)/15
se obtiene
ans =
0.0943
Si una expresion es bastante complicada (y larga) y no es suficiente una lnea para es-
cribirla completamente, podemos anadir al final tres puntos ( . . . ) seguidos de un retorno de
carro para indicar que la asignacion continue en la lnea siguiente. Por ejemplo,
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.
7
Podemos dar nombres a variables y funciones que empezaran siempre por letras y que
pueden estar seguidas de otras letras o dgitos. MATLAB solo reconoce los 19 primeros
caracteres de un nombre.
MATLAB es muy sensible: distingue entre letras 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.
En los ejemplos previos hemos creado variables que han sido almacenadas en el espacio de
trabajo de MATLAB. Podemos listar estas variables tecleando who o whos dependiendo
de la informacion que necesitemos de las variables almacenadas.
>>who
Your variables are:
A ans r s x
Esto muestra que los ejemplos anteriores han generado cinco variables, incluyendo la
variable ans.
VARIABLES PERMANENTES
eps = 252
que es aproximadamente 2.22 1016 . Podemos inicializar eps a cualquier otro valor
incluido el cero.
Relacionadas con estas variables nos encontramos con las funciones pi, Inf y NaN que
generan valores especiales.
Por ejemplo, la 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
1
La orden clear A B C limpia del espacio de trabajo estas tres variables.
8 CAPITULO 1. ELEMENTOS BASICOS
>>s=1/0
LA UTILIDAD HELP
La utilidad help proporciona informacion instantanea de la mayora de los topicos de
MATLAB. El comando help sin argumentos muestra, dependiendo de la version 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 mas relevantes en Analisis Numerico 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 informacion de la factorizacion LU de una matriz.
>>help lu
>>lookfor inverse
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
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).
MATLAB utiliza la notacion decimal, pudiendo incluir factores con potencias de diez o
unidades imaginarias. Algunos ejemplos de numeros legales son:
+ Suma
Resta
Multiplicacion
/ Division derecha
\ Division izquierda
Potencia
Las operaciones con matrices hacen conveniente tener dos smbolos para la division. Esto
se analizara con mas detalle cuando abordemos el estudio de las operaciones y funciones con
matrices. Pero, adelantamos que por ejemplo, las expresiones escalares 1/4 y 4\1 tienen el
mismo valor numerico, es decir 0.25.
>>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 mas actuales de MATLAB 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
??? 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
14 CAPITULO 1. ELEMENTOS BASICOS
>>1.23 e-4
??? 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
>>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 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 das],respuesta=[Buenos das]
saludo =
Hola, Buenos das
respuesta =
Buenos das
FUNCIONES
1. Funciones elementales
2. Funciones especiales
5. Descomposicion de matrices
6. Analisis de datos
7. Tratamiento de polinomios
16 CAPITULO 1. ELEMENTOS BASICOS
8. Ecuaciones diferenciales
Una breve descripcion de casi todas las funciones de estos grupos se puede encontrar en
los cuadros resumenes del ultimo captulo o, con mas profundidad, en la gua de usuarios de
MATLAB.
Destacamos que la practica totalidad de las funciones elementales de MATLAB 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, . . .
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, por MATLAB, como una matriz racional. Por consiguiente, esto resulta util
1.1. FORMATOS DE SALIDA 17
si tenemos la certeza de estar siempre trabajando con 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
>>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 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 lneas 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.
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], 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.
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
>> 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
>> S=T+C
S =
6.0000 13.0000 - 2.0000i
13.0000 + 2.0000i 0
>> E=[6 3 2;-1 3 -1;5 3 8]
E =
6 3 2
-1 3 -1
5 3 8
>> P=E*E
P =
49 1 55
1 11 -4
55 -4 98
>>NI=[0 1 -2;0 0 15;0 0 0]
NI =
0 1 -2
0 0 15
0 0 0
>>NI^3
ans =
0 0 0
0 0 0
0 0 0
Para calcular el determinante de una matriz cuadrada usaremos la funcion det. Por
ejemplo, para la matriz de Hilbert de orden 5 el determinante es:
>>format rat
>>H=hilb(5)
22 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 =
>>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 ultimo, indicar que la orden nnz determina el numero 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 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
de MATLAB.
En relacion con las operaciones elemento a elemento podemos destacar la operacion
n +matriz (o matriz+no ) que, al contrario de las anteriores no necesita el punto (.), y cuyo
o
>>8+v
ans =
9 10 11
Captulo 2
25
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
>>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:
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 traves de la(s)
diagonal(es) de A.
Para obtener la diagonal de una matriz A, (que puede no ser cuadrada) basta teclear
>> D=diag(A)
D =
3
0
8
Si v es un vector diag(v) nos da una matriz diagonal (cuadrada) cuya diagonal es v.
>> diag([5 7 -3])
ans =
5 0 0
0 7 0
0 0 -3
La orden diag(A) posee como variante la orden diag(A,k) que muestra la kesima
superdiagonal de A, si k es positivo, y la kesima subdiagonal, si k es negativo. (Observese
de nuevo la posibilidad de dar distinto numero de argumentos de entrada a una funcion
MATLAB).
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
>> 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 descomposicion resulta util en la resolucion de S.E.L. mediantes metodos
iterativos).
Captulo 3
x + 2y = 3
3x 4y = 1
29
30 CAPITULO 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 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. Sera 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.
32 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES
>>tic
>>expresiones
>>toc
La funcion cputime nos propociona el tiempo en segundos usado por MATLAB desde
el instante en que entramos en el programa. De esta forma podemos calcular el tiempo de
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, da, hora, minutos y segundos que marca el reloj de nuestro orde-
nador. La orden etime(t2,t1) nos proporciona el tiempo, en segundos, que han transcurrido
entre dos vectores de tiempo t1 y t2.
Creamos una matriz y un vector (de grandes 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);
>>t1=clock;x=A\b;etime(clock,t1)
ans =
0.5167
>>t1=clock;x=inv(A)*b;etime(clock,t1)
ans =
1.0333
Se comprueba que la resolucion del sistema mediante la orden inv(A)b necesita mayor
tiempo de calculo que la division izquierda (de hecho, casi el doble de tiempo).
2
Hacemos esto, pues la diferencia entre los tiempos de calculo de los dos metodos para S.E.L. pequenos es
casi inapreciable.
3.2. DESCOMPOSICIONES 33
3.2 Descomposiciones
3.2.1 Factorizacion LU.
Dada una matriz A [L,U]=lu(A) realiza la descomposicion LU (LR) de la matriz cuadrada
A. Esta descomposicion siempre se realiza siguiendo el metodo de Gauss con estrategia de
pivote parcial, por lo cual, aunque U es triangular superior, L en la mayora de los casos no
es triangular inferior.
>> [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 funcion lu posee una caracterstica particular: la funcion puede ser llama-
da con distinto numero de argumentos de salida segun nuestra finalidad. Esta caraterstica
no es privilegio exclusivo de la funcion lu, sino muchas otras funciones de MATLAB,
como veremos mas adelante, tambien presentan esta particularidad.
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:
>>[R,p]=chol(T)
R=
1.4142 -0.7071
0 1.2247
p=
3
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) Qt Q = I.
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
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
>>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 CAPITULO 3. SISTEMAS DE ECUACIONES LINEALES Y DESCOMPOSICIONES
Notese que con ayuda de null y \ se pueden resolver sistemas de ecuaciones compatibles
indeterminados. Por ejemplo, el sistema compatible indeterminado
x + 2y = 3
2x + 4y = 6
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 mayora de los casos se trabaja con la norma eucldea (i.e., en norma
2), por defecto norm(A) nos da el mismo valor que norm(A,2). (De nuevo la funcion
norm puede tener distinto 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, +].
>> 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
3.3. NORMAS Y NUMERO DE CONDICION 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 ademas 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 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:
(
x + y = 2
[A]
x + 1.0001y = 2
(
x + y = 2
[B]
x + 1.0001y = 2.0001
Captulo 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 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).
43
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
>>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 raz cuadrada de los autovalores de At A 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 At A.
Naturalmente la descomposicion en valores singulares tambien 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
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 ser
calculada, 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
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
pC () = 3 52 84 + 1004
y podemos observar que el determinante de M es, salvo signo, el termino independiente del
polinomio caraterstico 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 debera 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
x5 2x4 x3 + 7x2 6x + 2
El cociente y el resto de la division 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 x1
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
>>p=[1 0 -1]
p =
1 0 -1
>>rp=roots(p)
rp =
-1
1
Si el polinomio posee races complejas MATLAB tambien nos las proporciona. Las races
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 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 que MATLAB utiliza para calcular las races de un polinomio esta basado
en la funcion compan(p) que determina la matriz companera del polinomio p; esto es, la
52 CAPITULO 4. AUTOVALORES Y POLINOMIOS
matriz cuyo polinomio caracterstico 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
>>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
races de p.
>>roots(p)
ans =
0.5000 + 1.3229i
0.5000 - 1.3229i
>>eig(A)
ans =
0.5000 + 1.3229i
0.5000 - 1.3229i
Se pide:
2. Con la recta obtenida, estimar el tiempo que tardara en salir del laberinto una persona
que ha permanecido en la habitacion 10 horas.
Puesto que nos piden una recta debemos encontrar el polinomio de grado uno que mejor
aproxime a los punto de la tabla anterior:
>>x=1:6
x =
1 2 3 4 5 6
>>y=[0.8 2.1 2.6 3 3.1 3.3]
y =
0.8000 2.1000 2.6000 3.0000 3.1000 3.3000
>>recta=polyfit(x,y,1)
recta =
0.4543 0.8933
>>rats(recta)
ans =
159/350 67/75
Luego la recta que mejor aproxima, en el sentido de los mnimos cuadrados, viene dada
por la 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
>>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 CAPITULO 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
Observese 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 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 de MATLAB 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
Captulo 5
Posibilidades graficas
57
58 CAPITULO 5. POSIBILIDADES GRAFICAS
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
PARBOLA
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 lnea y el color
al representar una curva. En este caso, simb se trata de una cadena de uno o varios caracteres
que determinan el tipo de lnea y/o el color elegidos.
Tambien podemos dibujar simultaneamente varias curvas con una instruccion de la forma
plot(x1,y1,simb1,x2,y2,simb2,...,xN,yN,simbN)
que mostrara en pantalla todas las curvas (xI,yI) (con la opcion simbI) en unico grafico.
En la figura 5.4 se ilustra el uso conjunto de estas dos ultimas posibilidades.
60 CAPITULO 5. POSIBILIDADES GRAFICAS
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 representacion sin el sistema de referencia procederemos como se indica
a continuacion:
>> clf
>> axis off
5.1. GRAFICOS 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 grafica. El comando axis o 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 o 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.
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 funcion 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 deberamos 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 CAPITULO 5. POSIBILIDADES GRAFICAS
SUPERFICIE
0.5
-0.5
2
1 2
0 1
0
-1 -1
-2 -2
2 y 2
Figura 5.13: z = ex
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 ordenes
gradient y quiver. Esta ultima orden visualiza un vector cuyas componentes vienen dadas
por gradient
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 grafica 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);
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
sucesion de instrucciones de MATLAB. 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 programas.
73
74 CAPITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS
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
explcita. Naturalmente, esto resulta interesante, entre otras cosas, si vamos a trabajar con
una matriz suficientemente grande en distintas sesiones de MATLAB.
Al disponer MATLAB de instrucciones del tipo IF, WHILE y FOR (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:
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 lneas del programa bg son lneas de comentario. Si en una lnea aparece
el caracter %, todo lo que escribamos en esa lnea a continuacion del tanto por ciento sera
interpretado como un comentario y no se evaluara.
La lnea,
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= );
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 instrucciones2se 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 cuadrosresumen del ultimo captulo.
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 faciles de entender. La estructura general es:
while condicion
instrucciones
end
78 CAPITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS
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 expresion
instrucciones
end
Por ejemplo, usando FOR podemos crear una matriz triangular inferior mediante dos
bucles anidados:
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
>>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)
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
82 CAPITULO 6. FUNCIONES Y PROGRAMAS EN MATLAB. MFICHEROS
Las primeras lneas de comentario definidas en el fichero house.m nos informan del
cometido de la funcion house(x). As, con ayuda de la orden help podemos obtener
informacion de la funcion house.
>>help house
La primera lnea de comentario se denomina lnea H1. La orden lookfor palabra realiza
una busqueda de palabra en la lnea H1 de todas las funciones contenidas en la ruta de acceso
de MATLAB. Para que lookfor realice una busqueda en el conjunto de las primeras lneas
de comentario basta teclear la orden lookfor palabra -all.
Para acabar este captulo recordamos que algunas funciones de MATLAB pueden ser
ejecutadas con distintos argumentos de entrada y distintos argumentos de salida y que esta
caracterstica estaba ntimamente ligada con las variables nargin (numero de argumentos de
entrada) y nargout (numero de argumentos de salida). Pues bien, como no poda ser menos,
cualquier funcion creada por el usuario puede poseer esta caracterstica 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;
>>[a,b,c,d]=numero(1,2,[1 2],sqrt(1),4)
a =
5
b =
4
c =
6.2. DEFINICION DE FUNCIONES 83
[]
d =
[]
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.
Captulo 7
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.
2. Sistemas:
Para resolver un sistema de ecuaciones (no lineal1 ), como por ejemplo, (ver figura 7.2)
x2 + y 2 1 = 0
xy =0
1
La orden fsolve ha pasado a formar parte del la caja de herramientas de optimizacion.
84
7.2. INTEGRACION NUMERICA 85
2. quad8(g,a,b) (NewtonCotes)
>>area=quad(g,-1,0)
area =
2.810248532388182e+000
>>area=quad8(g,-1,0)
area =
2.810268301723342e+000
86 CAPITULO 7. ASPECTOS DE ANALISIS NUMERICO
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 mnimo de g (vease la
figura 7.1). Para funciones de varias variables disponemos de la orden fmins(f,x0) que
calcula el mnimo de la funcion f mas cercano al punto x0 .(En la version 4.2c fminsse incluye
en el toolbox dde optimizacion). Por ejemplo, la funcion
4x
z=
x2 + y 2 + 1
alcanza su valor mnimo 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 ordenes
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 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
7.4. RESOLUCION 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 solucion aproximada ofrecida por MAT-
LAB y la solucion exacta, respectivamente. Notese que la solucion 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 practicos
En este captulo exponemos algunos de los comandos que resultan de nteres cuando nos
disponemos a trabajar con MATLAB. Ponemos en evidencia que algunas de las funciones
que recogemos en este captulo ya han sido tratadas en los anteriores, pero estamos conven-
cidos que resultara beneficioso darles un ligero repaso.
>>help bg
91
92 CAPITULO 8. CONSEJOS PRACTICOS
Estamos convencidos que un primer contacto con MATLAB debe ser la visualizacion 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 aparecera, dependiendo de la version utilizada, un menu con distintas opciones;
recomendamos que se visualicen todas, la primera vez que utilizamos MATLAB.
En versiones mas actuales la orden intro nos da un breve resumen de las capacidades
de MATLAB. Tambien recomendamos se haga uso de esta orden, al menos la primera vez
que hacemos correr MATLAB.
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.
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.
>>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 opcion diary nombre.m tecleada dentro de una sesion, hara que todo cuanto aparez-
ca en pantalla a partir de esta lnea sea almacenado en el archivo nombre.m, hasta que
anulemos este comando mediante la instruccion diary o.
Recordamos que para las funciones, las variables definidas en ella (i.e., internas) no pasan
a forma parte del espacio de trabajo y que lo contrario sucede para los MFicheros que se
ejecutan en forma de programas.
Por ultimo, invitamos al lector a investigar la utilidad del comando echo y sacarle todo
el partido posible.
Captulo 9
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
CtrlC Interrupcion
quit Salir de MATLAB
exit Salir de MATLAB
demo Demostracion de MATLAB
intro Breve introduccion
casesen Sensibilidad a las mayusculas
95
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 lnea
; Terminacion de filas. Suprime impresion de resultado
% Comentario
: Genera vectores
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 Raz 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
98CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS UTILIZADOS
FUNCIONES MATRICIALES
det Determinante
poly Polinomio caracterstico
trace Traza
eig Autovalores y autovectores
diag Diagonal
expm Exponencial matricial
logm Logaritmo matricial
sqrtm Raz cuadrada matricial
funm Evaluacion de funcion matricial
polyvalm Evaluacion matricial de un polinomio
TRATAMIENTO DE POLINOMIOS
roots Races de polinomios
polyval Valor numerico de polinomios
conv Multiplicacion
deconv Division
residue Descomposicion en fracciones simples (complejas)
polyfit Ajuste de datos mediante polinomios
99
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, . . .
100CAPITULO 9. RESUMEN DE LOS COMANDOS Y FUNCIONES MAS UTILIZADOS
GENERANDO GRAFICOS
plot Grafico bidimensional
subplot Divide la pantalla de graficos
loglog Grafico logaritmico
semilogx Grafico semilogaritmico en el eje x
semilogy Grafico semilogartmico en el eje y
polar Representacion en polares
meshgrid Dominio de definicion de superficies
mesh Grafico tridimensional
bar, stairs Diagramas de barras
title Ttulo
xlable Etiqueta en el eje x
ylabel Etiqueta en el eje y
grid Mallado
text, gtext Coloca texto en la pantalla 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
101
ANALISIS NUMERICO
fzero Resolucion de ecuaciones
quad, quad8 Integracion numerica
fmin Mnimos en una variable
ode23, ode45 Resolucion de ecuaciones diferenciales
di Derivadas Aproximadas
Relacion 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 2x x2 + y2
(b) Cambia la entrada 2x a 2x + y.
(c) Escribe A(2, 3) = 3 y; y muestra A.
(d) Escribe A(1, 1) = 0; y muestra A.
(e) Escribe A = 0; y muestra A.
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 mnimos cuadrados a la
nube de puntos {(3, 10), (2, 15), (1, 9), (0, 27), (1, 18), (2, 34), (3, 42)}.
19. Con la utilidad help lee la informacion sobre sum, cumsum, prod, cumprod y di.
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
. Vare desde 101 hasta 1012 y calcule los determinantes de las matrices B que se
obtienen.
adj(A)
24. Para la matriz A del ejercico 16 calcule A1 mediante inv : (A) y . Compare
det(A)
numero de operaciones.
Tome x1 = 0.47 y x2 = 0.11 y compruebe que casi resuelve el sitema. Esta bien o
mal condicionado?
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?
!
0.4 0.5
28. Sea A = . Utilice MATLAB para sumar varios terminos de la serie
0.18 0.2
de eA y comprobar que converge a expm : (A).
(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 funcion poly. Construye los
polinomios que tienen por races:
(a) 1, 2, 3.
(b) ei2k/5 , k = 0, 1, 2, 3, 4, 5.
(c) 1 con multiplicidada 5.
36. Experimente la funcion sdv sobre vectores filas y vectores columnas. Que puede
deducir?
37. Encontrar la recta que mejor aproxima en el sentido de los mnimos cuadrados a la nube
de puntos {(3, 10), (2, 15), (1, 9), (0, 27), (1, 18), (2, 34), (3, 42)},utilizando la orden
polyfit(x,y,n).
38. Encuentre la recta que pasa por los puntos (0, 1) y (2, 3).
39. Determine la parabola que pasa por (1, 2), (0, 1) y (2, 4).
110 CAPITULO 10. RELACION DE EJERCICIOS
44. Escribe una funcion MATLAB que remplace por 0 las componentes de un vector real
que sean menores, en valor absoluto, que un numero positivo dado.
47. Construye una funcion que calcule el kesimo coeficiente del producto de polinomios.
111
48. Con ayuda de la funcion poly y las formulas de Cardano construye una funcion que
nos proporcione la suma de los cuadrados de los autovalores de una matriz.
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.
52. Describir la funcion que nos proporciona el menor complementario del elemento aij de
la matriz A.
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 A1 = 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.
112 CAPITULO 10. RELACION DE EJERCICIOS
62. Contruir una funcion que nos proporcione la matriz resultante de sumar a la fila iesima
de A la jesima fila multiplicada por . (Naturalmente i 6= j).
64. Describir una funcion que tenga como argumentos de entrada una matriz A Mmn
y un vector (columna) b Rm , genere 100 vectores (colunma) aleatorios x Rn y nos
devuelva el mnimo de kAx bk cuando x recorre los anteriores vectores aleatorios.
65. Escribir una funcion MATLAB que aceptando, como argumento, una matriz cuadrada
A nos proporcione el valor maximo de kAuk cuando u recorre 100 vectores alearorios
unitarios.
66. Editar en un archivo de extension .m una funcion que nos proporciona la recta que
mejor aproxima (por mnimos cuadrados) a una nube de puntos y que represente en un
mismo 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 hermtica o no.
68. Hacer lo mismo que en el ejercicio anterior, pero para detectar matrices hermticas
definidas positivas.
69. Generar un programa que nos pida un numero natural positivo n y nos proprocione el
nesimo 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
!
1 1
A=
1+2
1++2 con 6= 0 y b = (1, 1)t
114