Académique Documents
Professionnel Documents
Culture Documents
#2 6
PROYECTO #2 Cap
Con diag podemos tambien construir a partir de un vector una matriz diagonal
>> diag([1 2 ]) % es lo mismo que diag([1 2],0)
ans =
1 0
0 2
>> diag([1 2 ],1)
ans =
0 1 0
0 0 2
0 0 0
>> diag([1 2 ],-1)
ans =
0 0 0
1 0 0
0 2 0
Observese que sucede cuando se aplica dos veces el comando diag.
>> a=[1 2 3; 4 5 6; 7 8 9];
>> diag(diag(a))
ans =
1 0 0
0 5 0
0 0 9
Trasposicion de matrices
Entre todas las operaciones que cambian la estructura de matriz, podemos armar que
la mas com un es la transposicion. Esta operacion se suele denotar (matematicamente) con
un apostrofe
2
. Consiste en intercambiar las y columnas de una matriz, de forma que
las las de a pasan a ser las columnas de a. Este mismo smbolo es utilizado por Matlab:
2
Otras notaciones son
i=1
u
i
v
i
.
As, se puede observar la diferencia entre
>> u=[1+i 2+2i]; v=[2 1];
>> dot(u,v)
ans =
4.0000 - 4.0000i
>> dot(v,u)
ans =
4.0000 + 4.0000i
6
Esto es, el n umero maximo de las linealmente independientes. Una matriz tiene, en general, ran-
go maximo por los errores de precision de la maquina. Este comando hace una estimacion del rango,
eliminando este factor.
#2 12
PROYECTO #2 Cap
8
La forma de generar codigo eciente no es tan simple como pudiera parecer. Por ejemplo, si se aplica
la funcion dot a dos vectores sparse es preciso saber antes que entradas hay que multiplicar. De otra forma
podramos estar dedicando un alto porcentaje de nuestro esfuerzo en simplemente calcular productos por
cero. Afortunadamente, Matlab hace ese trabajo por nosotros.
#2 15
2.3 Matrices sparse PROYECTO #2
#2 16
Captulo 3
Programacion de funciones
Veremos a continuacion como se pueden programar funciones con el n umero de argu-
mentos de entrada como de salida sean variables. Esta caracterstica dota de una mayor
exibilidad a la programacion en Matlab.
Los comandos esenciales que precisamos son
varargin nargin varargout nargout
La instrucciones nargin y nargout informan respectivamente sobre el n umero de variables
de entrada y el n umero de variables de salida (variable in put argument) y variable out
put argument).
La funcion puede aceptar una serie de argumentos obligatorios, al estilo de las funcio-
nes que programamos en el proyecto anterior, y un conjunto de argumentos opcionales,
que pueden ser o no especicados por el usuario. Para acceder a estos ultimos se utili-
zan respectivamente varargin (variable input argument) y varargout variable output
argument) mediante llaves { }.
Listamos a continuacion un ejemplo de utilizacion conjunta de estas nuevas ordenes.
En la cabecera se informa
1
que hace la funcion, dependiendo de los argumentos de entrada
y salida.
01 % MILU
02 %
03 % [L,U] = MILU(A) Devuelve U triang superior, L permutacion de
04 % una triang inferior con 1s en la diagonal tal
05 % que A=LU
06 % [L,U,X] = MILU(A,B) Devuelve U triang superior, L permutacion de
07 % una triang.inferior con 1s en la diagonal tal
08 % que A=LU y la solucion del sistema AX=B
09
10 function varargout=milu(a,varargin)
11
1
Es importante que cualquier funcion en Matlab, por muy trivial que sea, cuente con una ayuda breve
y concisa sobre su nalidad e incluso detalles sobre su implementacion. Es util no solo para el usuario
sino de cara a posibles modicaciones que hagamos sobre el codigo mas adelante. La capacidad de olvido
de uno mismo no debe nunca ser minimizada
#2 17
PROYECTO #2
12 [l,u]=lu(a); % descomposicion LU
13
14 if nargin==1 & nargout==2
15 varargout{1}=l;
16 varargout{2}=u;
17 elseif nargin==2 & nargout==3
18 b=varargin{1}; % leemos el primer argumento opcional...
19 b=b(:); % y lo transformamos en un vector columna
20 varargout{1}=l; varargout{2}=u;
21 varargout{3}=u\(l\b); % solucion del sistema
22 end
23 end
Como puede comprobarse, la funcion precisa de un argumento obligatorio, la matriz a
y devuelve dos o tres argumentos seg un se requiera. Observese los resultados que se han
obtenido
2
.
>> a=[1 3; 2 4];
>> [l,u]=milu(a)
l =
0.5000 1.0000
1.0000 0
u =
2 4
0 1
>> [l,u,x]=milu(a,[1 2])
l =
0.5000 1.0000
1.0000 0
u =
2 4
0 1
x =
2
Observa como la lnea 19 permite introducir un vector la como termino independiente. El programa
lo pasa a columna automaticamente.
#2 18
PROYECTO #2 Cap
_
x x x x x x
x x
x x
x x
x x
x x
_
_
x x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
_
_
y la matriz es ahora llena. Sin llegar a esos extremos, si es habitual que las necesidades
de memoria se multipliquen al aplicar la eliminacion gaussiana. En la descomposicion LU
esto se reeja en un incremento en el n umero de entradas no nulas de la matriz con los
problemas que ello lleva consigo (mayores requerimientos de memoria, mayor n umero de
operaciones,...).
Figura 4.1: Efecto relleno.
#2 24
PROYECTO #2 Cap
R
(es decir, en la notacion de estos apuntes
4
, L = R
L.
Queda mas alla de los contenidos de este curso explicar como funcionan los algorit-
mos implementados symrcm y symmmd. Se puede se nalar no obstante que ambos se
basan en identicar la estructura de una matriz con la de un grafo no dirigido, donde
dos nodos i y j estan conectados si y solo si a(i,j)=0. El proceso de eliminacion
gaussiana se ve como la eliminacion sistematica de nodos y la creacion de nuevos
enlaces entre los nodos restantes. Concretamente, si hacemos ceros con la la i en
la la j, aparecen nuevos enlaces entre los nodos que estaban unidos con el nodo
i con los que estaban unidos con j. El problema se reescribe ahora en termino de
renumerar los nodos de una forma tal que se minimice el n umero de nuevos ejes
creados (gura 4.3).
Los gracos de la gura 4.2 han sido creados a traves del siguiente chero script.
% Calculamos la matriz de elementos finitos para
% un problema sobre un dominio en forma de L
4
Recuerda que el operador trasposicion
es en Matlab
#2 27
4.1 Metodo de Gauss con matrices sparse PROYECTO #2
[p,e,t]=initmesh(lshapeg,Hmax,0.2); % malla inicial
[p,e,t]=refinemesh(lshapeg,p,e,t); % refinamiento
[a,b]=assempde(lshapeb,p,e,t,1,0,1);
% a es la matriz (sparse) y b el termino independiente
% Primera fila de dibujos
[l,u]=lu(a,0); % no pivotaje
figure(1)
subplot(331)
spy(a); title(matriz original)
subplot(332)
spy(l); title(matriz L)
subplot(333)
spy(u); title(matriz U)
% Segunda fila de dibujos
p=symrcm(a); % reordenamiento filas y columnas
[l,u]=lu(a(p,p),0);
figure(1)
subplot(334)
spy(a(p,p)); title(matriz permutada con symrcm)
subplot(335)
spy(l); title(matriz L)
subplot(336)
spy(u); title(matriz U)
% Tercera fila de dibujos
p=symmmd(a); % reordenamiento filas y columnas
[l,u]=lu(a(p,p),0);
figure(1)
subplot(337)
spy(a(p,p)); title(matriz permutada con symmmd)
subplot(338)
spy(l); title(matriz L)
subplot(339)
spy(u); title(matriz U)
#2 28
PROYECTO #2 Cap
_
1 1
1
1
1 1
1
1 1
_
_
donde
g
ij
= 1, Si llegamos a i desde j.
De forma natural esta matriz es sparse, puesto que con n paginas uno puede esperar que
el n umero de enlaces sea del orden de O(n) (esto es, proporcional al n umero de paginas).
Sea
c
j
=
n
i=1
g
ij
(n umero de enlaces que salen de j)
Entonces la probabilidad de llegar a i si estamos en j es
p
g
ij
c
j
..
Siguiendo un enlace desde j
+
1 p
n
. .
Tecleando la direccion
Esta informacion se puede recoger en la matriz A n n
a
ij
= p
g
ij
c
j
+
1 p
n
.
Esta matriz no es sparse, pero se puede escribir
pG +
1 p
n
e
n
e
n
#2 30
PROYECTO #2 Cap
.
De esta forma se puede almacenar la matriz A sin necesidad de requerir grandes cantidades
de memoria. Es mas, el producto por cualquier vector se puede calcular con
Ax = pGx +
1 p
n
e
n
e
n
x = (1 p)Gx +
p
n
e
n
x
. .
Prod. escalar
e
n
.
Si denotamos por x
(0)
j
la probabilidad de estar en la pagina web j en un instante inicial,
entonces la probabilidad de llegar a la pagina web i en el paso primero es
n
j=1
a
ij
x
(0)
j
=: x
(1)
i
y por tanto
_
_
x
(1)
1
x
(1)
2
x
(1)
n
_
_
=
_
_
a
11
a
12
a
1n
a
21
a
22
a
2n
. . . . . . . . . . . . . . . . . .
a
n1
a
n2
a
nn
_
_
_
_
x
(0)
1
x
(0)
2
x
(0)
n
_
_
= Ax
0
.
De esta forma, denotando
x
m
= (x
(m)
1
, x
(m)
2
, . . . , x
(m)
n
)
e
n
=
n
i=1
x
i
= 1.
Ademas, comenzando con un x
0
con sus componentes positivas y que sumen uno,
x = lm
m
x
m
.
El resultado es, en palabras llanas, que la probabilidad que estemos en una pagina
web (esto es, x), despues de navegar una cantidad suciente de timpo
7
es independiente
de como hemos empezado (es decir, de x
0
).
Aqu vemos una forma completamente inocente de programar este calculo
7
Ciertamente, podramos tener que dedicar muchas horas...
#2 31
4.2 Matrices sparse y Google PROYECTO #2
% PAGERANK(G)
%
% PAGERANK(G) Calcula el indice de impacto de una WEB dada
% por el grafo G
% El grafo tiene que ser conexo... es decir, no puede haber nodos
% separados el resto
function y=pagerank(g)
p=0.85; %
eps=0.0001; % criterio de parada
nmax=1000; % numero maximo de iteraciones
n=length(g);
x=1/n*ones(n,1);
for j=1:nmax
y=producto(g,x,p);
if norm(x-y)<eps
disp(convergencia)
return
end
x=y;
x=x/sum(x);
end
disp(Convergencia no alcanzada)
return
% funcion auxiliar
% calcula el producto a*x
% notese que la matriz no llega a construirse
%
function y= producto(g,x,p)
c=sum(g); c=c(:);
x=x(:);
n=length(x);
en=ones(n,1);
y=p*g*(x./c)+(1-p)/n*en*(en*x);
return
Desde un punto de vista matematico se trata de calcular el vector propio asociado al
valor propio 1
8
que cumple que
i
x
i
= 1.
Existen medios mas ecientes para el calculo de este vector. El metodo aqu utilizado
es el metodo de potencias. Otra posibilidad es el metodo de potencias desplazado que
8
Notese que la matriz A cumple que todas sus entradas son positivas y que la suma de los elementos
de cada la es 1. Una matriz de esta forma se denomina matriz de Markov, y se sabe por teora que 1 es
valor propio y que el vector propio tiene todas sus entradas positivas.
#2 32
PROYECTO #2 Cap
_
0.2147
0.2075
0.2014
0.1427
0.0820
0.1518
_
_
Luego por orden de preferencia nos encontramos los nodos
1, 2, 3, 4, 6, 5
A pesar de que el nodo 2 solo se enlaza a traves de 1, la importancia del nodo 1
inuye en la buena puntuacion del nodo 2.
En problemas reales, las matrices son enormes
9
. Los grafos en general son no conexos
y hay que adaptar los algoritmos anteriores. Antes, hay un ltrado de acuerdo a las
palabras claves con las que se hace la b usqueda, que reducen el tama no. De todas
formas, la estrategia es esencialmente la que hemos expuesto.
Es posible hacer subir la evaluacion de una pagina mediante la creacion de paginas
webs que se enlacen entre ellas y especialmente sobre una. Este tipo de tecnicas,
denominada google bombing (literalmente bombardeo a google) ha sido utili-
zadas reiteradas veces por objetivos de diversa naturaleza, economicos, polticos, de
protesta.... Los algoritmos del buscador tratan de detectar este tipo de trampas y
reconstruir la evaluacion para que sea mas imparcial.
Google fue fundado por Sergey Brin (23 a nos entonces) y Larry Page (24), en 1995,
el primero ingeniero electrico y el segundo licenciado en matematicas. El nombre
proviene del n umero 10
100
que, aunque no ocialmente, se llama Googol
10
El ambiente desenfadado y el origen matematico del buscador tuvo un curioso re-
ejo en la primera oferta p ublica de acciones que tuvo lugar a principios del 2004.
Brin y Page sacaron al mercado una participacion de la compa na cuyo valor era
2.718.281.828 $, el n umero e con 10 cifras decimales
11
.
9
A 25 de Octubre de 2004, google haba catalogado 4.285.199.774 paginas
10
As lo denomino el matematico Edward Kasner. En ingles existe la palabra goggle que son unas gafas
de natacion (?).
11
Muy pocos se dieron cuenta de esta broma. Se hizo de nuevo palpable la escasa cultura cientca
en general y matematica en particular del mundo periodstico (como alegan algunos de ellos, son de
letras, como si el hecho de tener una formacion en ciencias exhimiera a uno de saber leer y escribir).
#2 33
4.2 Matrices sparse y Google PROYECTO #2
#2 34
Captulo 5
Metodos iterativos
5.1. Introduccion
Cuando una matriz es de tama no moderado
1
, casi nadie duda en utilizar el metodo de
Gauss en alguna de sus m ultiples variantes (incluida las descomposiciones matriciales).
Los metodos iterativos sin embargo se vuelven imprescindibles en problemas con ma-
trices grandes y sparse donde el metodo de Gauss presenta las dicultades que ya hemos
se nalado.
Esencialmente, un metodo iterativo toma un sistema lineal
Ax = b
y construye una sucesion de vectores de forma que
x
m
x.
La forma de construir esta sucesion depende, obviamente, de la matriz A y del termino
independiente.
Existen multitud de esquemas diferentes pero todos comparten las siguientes desven-
tajas:
No siempre convergen, dependen de propiedades de la matriz (y no del termino
independiente!).
Los resultados teoricos sobre convergencia son a menudo pobres. Esto es, en general
existe convergencia en situaciones mucho mas generales de lo que la teora predice.
La velocidad de convergencia puede ser extremadamente lenta.
Sin embargo, como aspectos muy positivos conviene citar
Son metodos no destructivos. No modican la matriz del sistema y, en general,
precisan solo multiplicar por la matriz del sistema, o por parte de ella.
Son mas estables frente a los errores de redondeo.
Se dispone en cada paso de una aproximacion de la solucion.
1
es difcil denir que se entiende por tama no moderado. Ciertamente, tama nos enormes en la decada
de los a nos 70 son ahora perfectamente manejables en un peque no PC.
#2 35
5.2 Detalles sobre su implementacion PROYECTO #2
5.2. Detalles sobre su implementacion
A la hora de implementar un metodo iterativo hay que tener en cuenta una serie de
detalles.
En primer lugar, como metodo iterativo que es no podemos esperar calcular exac-
tamente la solucion, sino calcular esta con una tolerancia (aproximacion) prejada. Por
tanto debemos jar un criterio de parada que termine el metodo cuando la solucion se
considere sucientemente buena
2
.
Obviamente, no se puede calcular el error dado que no se dispone de la solucion exacta
3
.
Un buen criterio es medir la diferencia entre dos iteraciones consecutivas
x
m+1
x
m
en alguna norma que queda a eleccion del programador o del usuario. Si la diferencia es
peque na, se considera que estamos cerca de la solucion y se naliza el metodo.
De nuevo nos encontramos con el problema de denir peque no. Por ejemplo, una
diferencia de 1.4 entre dos iteraciones puede ser grande si la solucion tiene un tama no
x 10
1
o peque na si x 10
10
.
Por ello se puede hacer un promedio entre el error absoluto y el relativo. Concreta-
mente, si x y y son dos iteraciones consecutivas, se puede hacer
01 aux=norm(x-y); % norma 2 entre x e y
02 if (aux<eps1+eps2*aux)
03 disp(Convergencia alcanzada...
04 ..........
05 end
En la lnea 02 tenemos en cuenta tanto el error absoluto (eps1) como el error relativo
(eps2). Estos valores son parametros que jan el criterio de parada y pueden ser dados
por el usuario.
Otros criterios se basan en calcular b Ax, el residuo de x, y calcular el tama no. En
este caso tenemos dos componentes, una error absoluto y un error relativo, relacionado
con el tama no del termino independiente b:
01 aux=norm(b-a*x); % norma 2 entre x e y
02 if (aux<eps1+eps2*norm(b))
03 disp(Convergencia alcanzada...
04 ..........
05 end
Por otro lado, y desde un punto de vista computacional, debemos evitar que el metodo
entre en un bucle innito. Es decir, jar un n umero maximo de iteraciones de forma que
si esta se supera, se termine el metodo con un mensaje de error
4
.
2
Esto no es grave. Los sistemas de ecuaciones lineales suelen venir de metodos que calculan soluciones
aproximadas de problemas fsicos e ingenieriles. No tiene pues sentido obcecarse en calcular la solucion
exacta de un problema aproximado
3
Si se dispone de la solucion exacta, para que aplicar un metodo iterativo?
4
Existe otro problema: que la solucion crezca de forma que supere la cantidad maxima representable
en coma otante overow. Matlab devolvera inf o -inf.
#2 36
Captulo 6
Metodos iterativos clasicos
6.1. Conocimientos previos
A la hora de estudiar convergencia, precisamos medir esta. Ello nos obliga a consi-
derar normas con las que recabar informacion sobre el tama no de un vector.
Entre las normas habituales, tenemos para
x := (x
1
, x
2
, . . . , x
n
)
R
n
las siguientes normas
x
1
:= |x
1
| +|x
2
| + . . . +|x
n
|
x
2
:=
_
x
2
1
+ x
2
2
+ . . . + x
2
n
x
:= max
i=1,...,n
|x
i
|
Todas ellas estan implementadas en Matlab, como ya se vio en la pag. 11. Las normas
vectoriales denen a su vez una norma sobre las matrices
A = sup
xR
n
Ax
x
denominada norma inducida
1
. Es facil ver que
A
1
= max
j=1,...,n
n
i=1
|a
ij
|, A
= max
i=1,...,n
n
j=1
|a
ij
|.
La norma
2
tiene una expresion mas complicada que hace difcil su calculo real. En
concreto
A
2
=
_
(A
A)
donde (B), denominado radio espectral, denota el mayor de los valores absolutos de
los valores propios de B
2
. En cualquier caso, la orden norm cuando se aplica a matrices
devuelve las correspondientes normas matriciales.
1
la norma matricial mide cuanto cambia el tama no de un vector al multiplicarlo por la matriz
2
Si A es simetrica se verica facilmente que A
2
= (A)
#2 37
6.2 Denici on y condiciones de convergencia PROYECTO #2
La norma matricial y vectorial se relacionan con
Ax
. .
norma vectorial
A
..
norma matricial
x
..
norma vectorial
6.2. Denicion y condiciones de convergencia
Los metodos iterativos lineales (o basados en iteraciones anes) consiste en considerar
una particion de A tal que
A = M N
con M invertible. As, si x es solucion de Ax = b,
Mx = Nx +b.
El metodo iterativo es
Tomar x
0
una aproximacion de la solucion. Si no se conoce se puede tomar por
ejemplo el vector nulo.
Construir
Mx
m+1
= Nx
m
+b (6.1)
Es facil ver que si (6.1) converge a alg un x, entonces el vector es la solucion del sistema.
A un es mas restando dos iteraciones sucesivas es inmediato comprobar que
x
m+k+1
x
m+k
= (M
1
N)(x
m+k
x
m+k1
) = . . . = (M
1
N)
k
(x
m+1
x
m
).
Denotando por B = M
1
N se tiene el siguiente resultado
Teorema. El metodo iterativo converge si y solo si existe k tal que B
k
< 1.
Un detalle al que a veces se presta poca atencion es que la convergencia del metodo
ocurre sea cual sea x
0
, es decir, independientemente de como se arranque el metodo y
del termino independiente. Obviamente, si se tiene una estimacion buena de la solucion
el metodo convergera en menos iteraciones, pero no es una condicion para asegurar la
convergencia
3
.
No es difcil ver que
(B) B.
para cualquier norma inducida, y por tanto
((B
k
))
1/k
(B
k
)
1/k
k N.
Es mas, se puede probar
lm
k
B
k
1/k
= (B)
3
Esta propiedad se pierde en general cuando se resuelve ecuaciones y sistemas no lineales. En este
caso, los metodos numericos convergen solo si se arranca sucientemente cerca de la solucion.
#2 38
PROYECTO #2 Cap
para todo m m
0
y C una constante independiente de m. La estimacion anterior justica
que a (B) se le llame en la literatura velocidad asintotica de convergencia, puesto
que mide la reduccion del error en cada iteracion.
Nota nal
Notese que si M = A, N = 0 y por tanto B = 0 y trivialmente
(B) = 0.
Es decir, hay convergencia en una unica iteracion
4
.
En general, uno asegura la convergencia cuando M recoge la informacion mas impor-
tante de A, de forma que N = M A tenga un tama no peque no. Por otro lado, se debe
tener en cuenta la denicion del metodo (6.1) y que por tanto en cada iteracion hay que
resolver un sistema de ecuaciones.
6.3. Metodos de Jacobi, Gauss-Seidel y Relajacion
Sea el sistema Ax = b donde
A =
_
_
a
11
a
12
. . . a
1n
a
21
a
22
. . . a
2n
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
a
n2
. . . a
nn
_
_
La familia de metodos que vamos a exponer comienzan trabajando sobre la siguiente
particion de A
D =
_
_
a
11
a
22
.
.
.
a
nn
_
_
4
La iteracion es ahora resolver directamente el sistema de ecuaciones.
#2 39
6.3 Metodos de Jacobi, Gauss-Seidel y Relajacion PROYECTO #2
L =
_
_
0 0 0
a
21
0 0
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
a
n2
0
_
_
U =
_
_
0 a
12
a
1n
0 0 a
2n
.
.
.
.
.
.
.
.
.
.
.
.
0 0 0
_
_
,
de forma que
A = D L U.
6.3.1. Metodo de Jacobi
Consiste en tomar en la denicion del metodo iterativo M = D y N = L+U, es decir
Dx
m+1
= (L + U)x
m
+b.
Para calcular x
m+1
hay que resolver por tanto un sistema diagonal cuyo coste es despre-
ciable. Visto componente a componente, tenemos que si
x
m+1
= (x
(m+1)
1
, x
(m+1)
2
, . . . , x
(m+1)
n
)
R
n
entonces
x
(m+1)
i
=
1
a
ii
_
b
i
j=i
a
ij
x
(m)
j
_
, i = 1, . . . , n.
Una matriz es diagonal dominante por las si
|a
ii
| >
j=i
|a
ij
|, i
y por columnas si
|a
jj
| >
i=j
|a
ij
|, j.
Como resultado parcial de convergencia tenemos el siguiente resultado.
Teorema El metodo de Jacobi converge si la matriz es diagonal dominante por las o
columnas.
Nota La situacion anterior es una constante en los metodos iterativos. En general se
enuncian condiciones sucientes para asegurar la convergencia, pero pocos resultados dan
condiciones necesarias, y a un estos suelen dar hipotesis complicadas de comprobar.
Ejercicio 5 (matematico) Probar el teorema anterior.
(Ayuda. Construir la matriz B = D
1
(L+U). Probar que B
5
Deberas probar con matrices grandes. La orden rand te puede valer para ese n. Una forma de
asegurarte la convergencia es generar matrices diagonal dominantes. Como se puede hacer esto?
#2 43
6.3 Metodos de Jacobi, Gauss-Seidel y Relajacion PROYECTO #2
6.3.2. Metodo de Gauss-Seidel
El metodo de Gauss-Seidel
6
consiste en tomar M = D L y N = U, es decir
(D L)x
m+1
= Ux
m
+b. (6.2)
Para calcular x
m+1
hay que resolver un sistema, en este caso triangular. Repasando con
cuidado las operaciones, observamos que
x
(m+1)
i
=
1
a
ii
_
b
i
n1
j=1
a
ij
x
(m+1)
j
n
j=i+1
a
ij
x
(m)
j
_
, i = 1, . . . , n.
y escrito en forma algortmica,
Gauss-Seidel
01 for m=1:mmax
02 error=0; y=x
03 for i=1:n
04 x
i
= b
i
05 for j = 1 to i 1 do
06 x
i
= x
i
a
ij
x
j
07 end
08 for j = i + 1 to n do
09 x
i
= x
i
a
ij
y
j
10 end
11 x
i
= x
i
/a
i,i
.
12 error=error+|y
i
x
i
|
13 end
14 if error<eps2+eps1*norm(x)
15 return
16 end
17 end
18 disp(numero maximo de iteraciones alcanzado)
19 end if
As pues, la unica diferencia con el metodo de Jacobi es que Gauss-Seidel procede a
utilizar la nueva componente calculada x
i
en cuanto es posible (lneas 06-08) mientras
que Jacobi solo las utiliza en la nueva iteracion.
Esta propiedad crea la sensacion de que Gauss-Seidel es superior a Jacobi. No hay
razones matematicas que permitan apoyar esta impresion. De hecho existen matrices para
las que Jacobi converge y Gauss-Seidel diverge, aunque a fuerza de ser sincero hace falta
6
El nombre de este algorimo es muy curioso. Gauss no dise no este algoritmo y Seidel, que lo estudio a a
nales del siglo XIX, desaconsejaba su uso. Gauss desarrollo un metodo muy similar a este cuando trataba
de resolver un problema de geodesia que llevaba a un sistema lineal que no era compatible determinado.
El esquema que propona Gauss es lo que hoy conocemos como metodo de Gauss-Seidel.
#2 44
PROYECTO #2 Cap
Existe una teora que cubre el metodo de Gauss-Seidel y el metodo de Jacobi que
para un tipo particular de matrices que incluye como caso particular a las tridiagonales
y tridiagonales por bloques. Es decir matrices de la forma
_
_
A
1
B
1
C
2
A
2
B
2
.
.
.
.
.
.
.
.
.
C
n
A
n
_
_
donde A
i
, B
i
y C
i
son submatrices. La teora dice que el metodo de Jacobi converge si
y solo si Gauss-Seidel converge y este caso el metodo de Gauss-Seidel converge a doble
velocidad que el primero.
Ejercicio 9 Programa el metodo de Gauss-Seidel modicando de forma apropiada la
funcion del ejercicio 6.
#2 45
6.3 Metodos de Jacobi, Gauss-Seidel y Relajacion PROYECTO #2
Ejercicio 11 El metodo de Gauss-Seidel tiene un curiosa asimetra. Si observamos, la
primera componente de cada x
m
, comprobamos que esta se calcula utilizando los valores
de la anterior iteracion x
m1
, mientras que la ultima utiliza todas las componentes de
la nueva iteracion x
m
. Se puede planter el metodo de Gauss-Seidel inverso que es el que
resulta de intercambiar los papeles de L y U en (6.2). Ahora la situacion es justamente
la inversa. Mejora la velocidad de convergencia del metodo?
i1
j=1
a
ij
x
(m+1)
j
n
j=i+1
a
ij
x
(m)
j
_
, i = 1, . . . , n
Si = 1 recuperamos el metodo de Gauss-Seidel. La idea es que una eleccion adecuada
del nuevo parametro permite acelerar el metodo.
No es facil encontrar el valor optimo de , aunque la teora dice que necesariamente
(0, 2) pues en caso contrario el metodo diverge.
Si la matriz es simetrica denida positiva o tridiagonal por bloques el metodo de
relajacion converge. Tambien converge si es diagonal dominante (por las o columnas),
pero, salvo para matrices tridiagonales por bloques, poco se puede decir acerca de la
eleccion optima del parametro
7
.
Desde un punto de vista practico, se suele determinar este parametro mediante ensayo
error. De forma algo sorprendente, es muy habitual que > 1 en problemas practicos
de ah el nombre que se le da a veces de sobrerelajacion (overrelaxed).
Por ultimo, aunque no sea inmediato, se puede comprobar que este metodo encaja en
el marco anterior, sin mas que tomar
M =
1
D L, N =
1
D + U
7
Y a un en este caso, la determinacion exacta del parametro optimo exige resolver un problema bastante
complicado.
#2 46
PROYECTO #2 Cap
Nota nal
Los metodos clasicos son poco utilizados en la practica y han sido reemplazados por
metodos mas potentes como los metodos de tipo Krylov de los que probablemente el
metodo del Gradiente Conjugado es el representante mas famoso.
Sin embargo, son utilizados como precondicionadores de estos metodos, es decir, como
un preproceso que acelera la convergencia.
#2 47
6.3 Metodos de Jacobi, Gauss-Seidel y Relajacion PROYECTO #2
#2 48
Captulo 7
Metodos de tipo gradiente
7.1. Introduccion
Notacion Recordemos que todos los vectores se consideran como vectores columnas.
As,
x
Ay = [x
1
x
2
x
n
]
_
_
a
11
a
12
a
1n
a
21
a
22
a
2n
. . . . . . . . . . . . . . . . . .
a
n1
a
n2
a
nn
_
_
_
_
y
1
y
2
.
.
.
y
n
_
_
En particular
x
y
es simplemente el producto escalar de los dos vectores x e y.
Consideremos un sistema lineal Ax = b donde A es simetrica y denida positiva,
esto es
A
= A, x
Ax > 0 si x = 0.
En particular, la matriz dene su propia norma, simplemente
x
A
:=
Ax,
conocida como norma de energa de A. Todas normas son equivalentes en R
n
, pero para
esta norma se tiene ademas
n
x
2
x
A
1
x
2
donde
1
2
....
n
> 0 son los valores propios
1
de A. La cantidad
(A) =
1
n
,
que sera relevante en lo que sigue, es conocida como condicionamiento de la matriz
2
.
1
Todos reales por ser A simetrica y todos no negativos por ser denida positiva
2
La nocion de condicionamiento se puede extender para matrices arbitrarias reemplazando los valores
propios por los denominados valores singulares, o mas en general, deniendolo como el producto de la
norma de A por la norma de su inversa.
#2 49
7.2 Metodos de descenso. Aspectos generales PROYECTO #2
Construimos la funcion
F(x) =
1
2
x
Ax x
b
conocido como funcional de energa. Si buscamos el mnimo de F, tenemos que, tras unos
simples calculos,
F = Ax b.
Por tanto,
Los problemas resolver Ax = b y encontrar el mnimo de F son
equivalentes
7.2. Metodos de descenso. Aspectos generales
La idea de estos metodos es sencilla. Consiste en dada una aproximacion x
m
de x,
Calcular una direccion de descenso d
m
Descender una cantidad
m
, tomando como nueva aproximacion
x
m+1
= x
m
+
m
d
m
.
Se procede as hasta que hay convergencia. Dos aspectos determinan el metodo: que di-
reccion se toma y cuanto se desciende.
En el metodo del gradiente, como el metodo de gradiente conjugado, se toma
m
de
forma que
F(x
m+1
) = mn
tR
F(x
m
+ td
m
)
es decir, se trata de minimizar, una vez escogida la direccion de descenso, en todo los
pasos el funcional de energa. Deniendo
g(t) = F(x
m
+ td
m
)
podemos comprobar que
g
(t) = d
m
Ad
m
d
m
(b Ax
m
)
. .
r
m
y por tanto el mnimo se alcanza cuando
m
:=
r
m
d
m
d
m
Ad
m
(7.1)
La cantidad r
m
= bAx
m
es obviamente el residuo de x
m
, que nos ha surgido ya antes.
As, los metodos de descenso toman en su aspecto mas general la forma
x
m+1
= x
m
+
m
d
m
, con d
m
tomada de alg un modo y
m
:=
r
m
d
m
d
m
Ad
m
#2 50
PROYECTO #2 Cap
m
r
m
r
m
Ar
m
(7.2)
Dado que A es denida positiva, r
m
Ar
m
> 0 salvo cuando el residuo es nulo. Pero,
obviamente, r
m
= 0 si y solo si x
m
= x y por tanto ha habido convergencia. De esta
forma evitamos dividir por cero cuando calculamos
m
.
Esta eleccion de la direccion de descenso es a priori razonable dado que la direccion
de maximo descenso en x
m
es
F(x
m
) = b Ax
m
= r
m
.
El algoritmo es, a grandes rasgos, el siguiente
Metodo del gradiente
01 x; r = b Ax; r = r
r
02 for m=1:mmax
03 p = Ar
04 =
r
r
p
05 x = x + r
06 r = r p
07 r = r
r
07 if
r eps1 + eps2b
08 return
09 end
10 end
11 disp(Numero maximo de iteraciones alcanzadas)
En el paso 06 estamos calculando el residuo de la solucion, y en r guardamos su norma
al cuadrado. Utilizamos para ello la siguiente relacion
r
k+1
= b Ax
k+1
= b Ax
k
+
k
Ar
k
= r
k
k
Ar
k
.
El criterio de parada se toma ahora a partir del residuo. De nuevo hay dos componentes,
un termino que controla el tama no absoluto (eps1) y otro que tiene en cuenta el tama no
relativo del residuo (eps1b). La norma que utilizamos es la eucldea, que es connatural
al metodo.
Ejercicio 14 Programa el metodo del gradiente
#2 51
7.3 Metodo del gradiente PROYECTO #2
A(x
m+1
x) =
1
2
x
m+1
x
. .
e
m+1
2
A
donde e
m+1
es el error entre la solucion exacta y la numerica. Por tanto, como F(x
m+1
)
F(x
m
),
e
m+1
A
e
m
A
luego hay un reduccion del error en la norma de energa (esto en ning un caso implica que
el residuo se reduzca, como bien podemos comprobar en la gura 7.1). A un es mas, la
eleccion hecha de
m
,
e
m+1
A
mn
R
x x
m
r
m
A
= mn
R
e
m
Ae
m
A
=
_
mn
R
I A
A
_
e
m
A
.
Proposicion Se tiene
mn
R
I A
A
= mn
R
I A
2
=
1
1
+
n
< 1
donde
1
y
n
son el mayor y menor valor propio de A.
Una forma muy comoda de escribir la convergencia es en termino del condicionamiento
de la matriz
(A) =
1
n
con lo que queda
e
m+1
A
(A) 1
(A) + 1
e
m
A
.
Es inmediato observar que
Hay convergencia para toda A simetrica denida positiva.
Si (A) >> 1, la convergencia puede ser muy lenta.
El metodo del gradiente genera unos residuos que suelen exhibir un comportamiento
muy oscilante.
Ejercicio 15 (puramente matematico) Sabiendo que dada A simetrica denida posi-
tiva existe B simetrica denida positiva tal que BB
= B
2
= A probar la identidad
I A
A
= I A
2
utilizada en la proposicion anterior.
(Ayuda: Observese que x
A
= Bx
2
. Utilizar ahora que
I A
A
= sup
xR
n
(I A)x
A
x
A
= sup
xR
n
B(I A)B
1
(Bx)
2
Bx
2
= sup
xR
n
B(I A)B
1
x
2
x
2
y completar la demostracion)
#2 54
PROYECTO #2 Cap
1
+
n
.
(Ayuda: Toma varios valores de c en la denicion de la funcion g
c
() y dibuja la gracas
resultantes. Obtendras algo similar a esto
0 1 2 3 4 5
0
0.5
1
Cuales son las gracas de los valores extremos? Cuanto vale el corte?)
m+1
r
m
= r
m
r
m
m
d
m
Ar
m
= 0
por lo que r
m+1
r
m
.
#2 55
7.4 El gradiente conjugado PROYECTO #2
En particular, la correccion que hace el metodo del gradiente en el paso m+1 genera
un residuo que es siempre perpendicular al que dena el paso anterior.
Sin embargo, en general ya no es cierto que
r
m+1
r
m1
y por tanto se pierde esta propiedad de ortogonalidad. Una idea que podemos considerar
es tomar la direccion de descenso d
m
de forma que el residuo r
m+1
sea perpendicular a
r
m
y r
m1
. Es facil ver que
r
m+1
= r
m
m
Ad
m
de manera que
r
m1
r
m+1
= 0 r
m1
Ad
m
= 0.
Ello nos lleva a considerar direcciones de descenso d
m
ligeramente diferentes,
d
m
= r
m
+
m
d
m1
.
Es decir, tomamos una perturbacion de la direccion natural r
m
donde
m
se toma para
que r
m
Ad
m
= 0. Despejando, obtenemos
m
=
r
m
r
m
r
m1
Ad
m1
.
Esta eleccion dene el metodo del Gradiente conjugado y provoca literalmente un
torrente de nuevas propiedades. Entre las mas importantes se pueden citar
i) Los residuos son todos ortogonales. Es decir
r
j
r
k
si j = k
ii) Las direcciones de descenso {d
j
}
j
son Aortogonales, es decir
d
j
Ad
k
= 0 si j = k.
La primera propiedad dice que no solo r
m+1
es perpendicular al residuo de las dos
iteraciones anteriores, sino que es ortogonal a todos los residuos calculados. Implica por
tanto la convergencia en n pasos del gradiente conjugado puesto que, como no puede
haber n + 1 vectores ortogonales en R
n
, al menos r
n+1
= 0. Ademas, la propiedad ii) se
puede utiliza para demostrar
r
m1
Ad
m1
= r
m1
r
m
y por tanto que
m
se puede escribir
m
=
r
m1
r
m1
r
m
r
m
=
r
m1
2
2
r
m
2
2
,
mas comoda de manejar. Notese que r
m1
es el residuo en el paso anterior y por tanto no
es preciso calcularlo de nuevo.
El algoritmo es
#2 56
PROYECTO #2 Cap
p
05 x = x + d
06 r = r p
07 r
m+1
= r
r
08 if
r
m+1
eps1 + eps2b
09 return
10 end
11 =
r
m+1
r
m
12 d = r + d
13 end
14 disp(numero maximo de iteraciones alcanzada)
Como puedes ver, las modicaciones sobre el metodo del gradiente son mnimas. En
cada paso, es necesario calcular un producto matriz-vector (lnea 03) y dos productos
escalares (04 y 07) ademas de guardar la norma del residuo de la iteracion anterior. Pode-
mos optar por guardar los residuos de todas las iteraciones para disponer de informacion
de como ha sido la convergencia del metodo.
Ejercicio 17 Modicar el programa gradiente para implementar en una funcion de
nombre gradconjugado el metodo del gradiente conjugado.
A
2
_
_
(A) 1
_
(A) + 1
_
m
e
0
A
.
donde de nuevo e
m
:= x
m
x el error en el paso mesimo y e
0
el error inicial.
El resultado anterior es algo incompleto pero sirve para hacer patente la sensibilidad
del metodo ante el condicionamiento de una matriz que, aunque menor que en el caso del
metodo del gradiente (por la raz cuadrada), sigue siendo importante. Si la matriz tie-
ne un condicionamiento moderado, el metodo del gradiente conjugado dara una solucion
aceptable en unas pocas iteraciones. Sin embargo, esto no suele ser un caso habitual. Las
matrices que surgen en la resolucion de ecuaciones en derivadas parciales, por ejemplo
elementos o vol umenes nitos, suelen ser, demas de matrices sparse, muy mal condiciona-
das por lo que el metodo del gradiente conjugado da unos muy pobres resultados. Es mas,
puede requerir, y requiere en general, de mas de n iteraciones fruto de la contaminacion
por los errores de redondeo.
Estas razones hicieron que el gradiente conjugado se tomara como un metodo mas,
sin concederle especial relevancia y confundiendose con la multitud de metodos para la
resolucion de sistemas de ecuaciones lineales que surgan a su alrededor. Esta situacion se
prolongo durante casi 20 a nos hasta que las ideas del precondicionamiento cambiaron
3
Es posible que la posibilidad de expresar algunos de los parametros (ej. ) de forma distinta con-
tribuyera a esta confusion. No es de todas formas un caso aislado en las ciencias en general y en las
matematicas en particular. En ocasiones parece como si las ideas estuviesen otando en el ambiente a la
espera de que alguien diera el paso nal de plasmarlas.
#2 58
PROYECTO #2 Cap
AL
1
. .
B
y = L
b
. .
c
, x = L
1
y
y aplicar el metodo del gradiente al sistema By = c. A la matriz L se le conoce como
precondicionador del sistema
6
En general, la matriz B no se construye, porque el producto por el precondicionador
hace que se pierdan algunas de las buenas propiedades de la matriz original
7
. Es mas, uno
conoce L y no su inversa, y el hecho de calcular L
1
suele ser un problema tan complejo
como resolver el sistema original.
Ahora bien, y he aqu la ventaja del metodo, solo necesitamos calcular productos
por B. Obviamente, cualquier producto por la inversa de L, p = L
1
r, se hace resolviendo
el correspondiente sistema de ecuaciones
Lp = r.
Las buenas noticias son que es posible construir matrices L de forma que la resolucion de
los sistemas anteriores sea facil de hacer (por ejemplo, L puede ser triangular y sparse y
con un n umero de entradas comparable a la de A) y que la matriz producto B = L
AL
1
tenga un condicionamiento mucho menor, esto es, (B) << (A).
El metodo del gradiente conjugado rara vez se programa sin precondicionar. De hecho,
el comando de Matlab con el gradiente conjugado implementado es pcg de preconditioned
conjugate gradient.
Un buen precondicionador es la descomposicion de Choleski incompleta
8
. En Matlab
se encuentra implementada en el comando cholinc. Va mas alla de los contenidos de este
curso describir detalladamente en que consiste y por que funciona, pero no esta de mas
saber de su existencia.
En ultima medida, el exito del gradiente conjugado origino el nacimiento de una
familia entera de metodos, los conocidos como metodos de Krylov, que trataban de
extender las buenas propiedades del metodo a matrices mas generales. Por ejemplo, BiCG,
BiCGSTAB, CGS QMR, GMRES, MINRES, ... algunos de estos metodos suponen s olo
que la matriz es simetrica, otros son validos para matrices arbitrarias. De nuevo hay
que insistir en que los metodos mejores son mas exigentes con las condiciones que deben
cumplir la matriz. As cuando se persigue la generalidad se pierde potencia en el metodo.
4
La American Mathematic Society lo sit uo entre los diez algoritmos mas relevantes del siglo XX, junto
con, por ejemplo, la Transformada Rapida de Fourier (FFT).
5
Utilizamos la notacion L
= (L
1
)
y derecha L
I
n
y su condicionamiento es muy reducido.
#2 59
7.4 El gradiente conjugado PROYECTO #2
Ejercicio 18 En este ejercicio se trata de observar el efecto del precondicionamiento en
la convergencia del gradiente conjugado y con ello convencer de la necesidad de utilizarlo
en la resolucion de (muy) grandes sistemas de ecuaciones. Las siguientes instrucciones
9
>> [p,e,t]=initmesh(lshapeg,Hmax,0.05);
>> [a,b]=assempde(lshapeb,p,e,t,1,0,1);
devuelven una matriz sparse simetrica denida en a proveniente de resolver la ecuacion
de Poisson (una ecuacion en derivadas parciales) por el metodo de elementos nitos en un
dominio en forma de L. La matriz tiene aproximadamente 2100 las con 14500 elementos
no nulos
10
.
Con el comando spy se puede ver la forma de a, su tama no y el n umero de entradas
no nulas. Aplica el comando pcg que contiene implementado el gradiente conjugado. Por
ejemplo, con
>>[x,flag, relres,iter,resvec] = pcg(a,b,1e-7,100);
aplicas el metodo con una tolerancia relativa de 10
5
y un n umero maximo de 100 itera-
ciones. En relres se recoge el residuo relativo de la solucion calculada (b Ax/b),
en resvec un historial del residuo en cada paso y en flag una variable que indica que ha
sucedido en la aplicacion del metodo. As flag=1 indica que se ha alcanzado el n umero
maximo de iteraciones sin convergencia, mientras que flag=0 indica convergencia. Para
ver el historial de la convergencia del metodo se puede ejecutar
11
>> semilogy(resvec);
Observa como es necesario o aumentar el n umero de iteraciones maximas o disminuir la
tolerancia para obtener convergencia.
A continuacion vamos a utilizar un precondicionador muy sencillo basado en la des-
composicion de Choleski incompleta. Teclea
>> R=cholinc(a,0);
De nuevo, con las instrucciones habituales puedes ver tanto la forma y el n umero de
entradas no nulas de R.
Modicando las instrucciones anteriores con
>>[x2,flag2, relres2,iter2,resvec2] = pcg(a,b,[],100,R,R);
estas aplicando el metodo del gradiente conjugado precondicionado con R. Disminuyen
las iteraciones? (ver iter2). Y el tiempo de calculo?. Puedes ser ahora mas exigentes
con la tolerancia?.
Ejercicio 19 Con la orden helpwin lee la ayuda de Matlab sobre los comandos pcg,
cholinc, luinc. Que otros metodos iterativos estan implementados?.
9
Su ejecucion puede llevar algo de tiempo...
10
Por cierto, el logo de Matlab es la solucion de un problema de este tipo
11
observa que el eje OY de la graca es logartmico.
#2 60
PROYECTO #2 Cap
Indice de guras
2.1. Matriz sparse 400 400 con 2690 entradas no nulas . . . . . . . . . . . . . 13
4.1. Efecto relleno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2. Resultado de reordenar las las y columnas con symrcm y symmmd. . . . . . 26
4.3. eliminacion gaussiana y su representacion como un grafo. . . . . . . . . . . 29
4.4. Una web muy sencilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1. Residuo en las sucesivas iteraciones del metodo del gradiente . . . . . . . . 53
7.2. Residuo para el metodo del gradiente conjugado . . . . . . . . . . . . . . . 58
7.3. Precondicionamiento versus no precondicionamiento . . . . . . . . . . . . . 61
#2 63
Indice general
1. Introduccion 1
I Matlab: programacion avanzada 3
2. Las matrices revisitadas 5
2.1. Acceso a partes estructuras de una matriz . . . . . . . . . . . . . . . . . . 5
2.2. Mas operaciones sobre matrices . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3. Matrices sparse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. Programacion de funciones 17
II Matrices sparse en Matematicas.
Metodos iterativos para sistemas de ecuaciones lineales 21
4. Matrices sparse en Matematicas 23
4.1. Metodo de Gauss con matrices sparse . . . . . . . . . . . . . . . . . . . . . 23
4.2. Matrices sparse y Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5. Metodos iterativos 35
5.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2. Detalles sobre su implementacion . . . . . . . . . . . . . . . . . . . . . . . 36
6. Metodos iterativos clasicos 37
6.1. Conocimientos previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.2. Denicion y condiciones de convergencia . . . . . . . . . . . . . . . . . . . 38
6.3. Metodos de Jacobi, Gauss-Seidel y Relajacion . . . . . . . . . . . . . . . . 39
6.3.1. Metodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.3.2. Metodo de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . 44
6.3.3. Metodo de Relajacion . . . . . . . . . . . . . . . . . . . . . . . . . 46
7. Metodos de tipo gradiente 49
7.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.2. Metodos de descenso. Aspectos generales . . . . . . . . . . . . . . . . . . . 50
7.3. Metodo del gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.4. El gradiente conjugado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
#2 65