Está en la página 1de 23

BLOQUE II: RESOLUCIN DE SISTEMAS DE ECUACIONES.

II.2 Sistemas lineales: Mtodos directos y mtodos iterativos.


Sistemas lineales: Mtodos directos.

- Mtodo LU.
- Eliminacin de Gauss
- Eliminacin de Gauss-Jordan.
Sistemas lineales: Mtodos iterativos.

- Mtodo de Jacobi.
- Mtodo de Gauss-Seidel.
- Mtodo de sobrerrelajacin.

Existen multitud de problemas en Fsica donde aparecen sistemas de ecuaciones tanto


lineales como no lineales.
La utilizacin de mtodos numricos se hace indispensable en sistemas lineales de muchas
ecuaciones, o en sistemas no lineales.
Aplicaciones:
- Anlisis de circuitos.
En el circuito de la figura se aplica un voltaje de 5V entre los nodos 1 y 6. Aplicando las
leyes de Kirchhoff y la ley de Ohm se llega a un sistema de 11 ecuaciones con 11 incognitas.

Determinacin de la distribucin de temperaturas en el estado de equilibrio:

Se quiere determinar la distribuccin de temperaturas en el interior de la placa en los puntos


u 1 u 9 . Los bordes se mantienen a temperaturas constantes.
En cada punto la temperatura satisface una ecuacin diferencial. Pero el problema puede
reducirse a la resolucin de un sistema de ecuaciones lineales con coeficientes constantes.
Gran aplicacin en la resolucin de ecuaciones diferenciales en derivadas parciales.

NOTACIN MATRICIAL:

Dado un sistema lineal de ecuaciones:

A11 x1 A12 x 2 ... A1n x n b1


A21 x1 A22 x 2 ... A2 n x n b2
..........................
An1 x1 An 2 x 2 ... Ann x n bn

Se puede expresar de manera ms simple utilizando la notacin matricial: Ax b


A11
A
A 21

An1

A12
A22

An 2

.... A1n
.... A2 n
Aij

.... Ann

x1
x
x 2 x i


xn

b1
b
b 2 bi


bn

Los elementos de una matriz se denotan con dos subndices:


i, denota la fila, y j, denota la columna.
Ejemplo:

3 x1 2 x 2 4 x 3 14
x1 2 x 2 7
x1 3 x 2 2 x 3 2

2 4 x1 14
3
1 2 0 x2 7


1 3 2 x3 2

OPERACIONES CON MATRICES:


A = [A ij ] y B = [B ij ] C = A + B = [A ij + B ij ] = [C ij ]
si A y B tienen las mismas dimensiones.
A = [A ik ] (n x m), y B = [B kj ] (m x r) C = A B = [A ik ][B kj ] = [C ij ]
m

con Cij Aik Bkj , i = 1, 2, ..., n, j = 1, 2, ...., r


k 1

C11 A11 B11 A12 B 21 ... A1m B m1

En C++ :

Aij A[i ][ j ]

Recordemos que en C++ los elementos de un vector de dimensin n se numeran con los
ndices de 0 a n-1. Lo mismo sucede con las filas y columnas de una matriz de dimensin

nxn.

Situacin ideal: sistema de ecuaciones especial sistema triangular superior (


inferior):
5 3 2 x1 3
0 6 1 x 1 Sistema triangular superior

2
0 0 2 x3 10

Fcilmente resoluble por sustitucin regresiva (o progresiva si es triangular inferior).


5x 1 + 3x 2 2x 3 = 3 x 1 = (3 + 2x 3 3x 2 )/5 = 2
6x 2 + x 3 = 1 x 2 = (1 x 3 )/6 = 1
2x 3 = 10 x 3 = 5

Mtodo LU.
Dado el sistema lineal de ecuaciones Ax = b, queremos factorizar A = LU, donde L y U son
dos matrices triangulares (inferior y superior, respectivamente).

Una matriz cuadrada A, no singular, puede resolverse como el producto de una matriz
triangular inferior (L) y una matriz triangular superior (U) de infinitas formas. Las ms
utilizadas son:

Mtodo de Doolittle: unos en la diagonal de L.


Mtodo de Crout: unos en la diagonal de U.
Mtodo de Choleski: los elementos diagonales de L y U tienen que ser iguales.
De esta forma nuestro sistema original se puede descomponer en dos sistemas lineales
triangulares fciles de resolver por sustitucin regresiva y progresiva, respectivamente:

Lz b
Ax b LUx b

Ux
z

Mtodo de Doolittle: (unos en la diagonal de L)


Para mayor claridad vamos a describir el mtodo con un ejemplo genrico de un sistema con
4 ecuaciones y 4 incgnitas.
A11
A
A 21
A31

A41

A12

A13

A22

A23

A32
A42

A33
A43

A14 1
A24 L21

A34 L31

A44 L41

L32
L42

1
L43

0 U11 U12 U13


0 0 U 22 U 23

0 0
0 U 33

1 0
0
0

U14
U 24

U 34

U 44

Para obtener los elementos de L y U, multiplicamos las filas de L por las columnas de U e
identificamos trminos con los elementos de A.

fila L

col. U

U 11 A11

U 12 A12

U 13 A13

U 14 A14

obtenemos:
1 fila de U
1 fila de L

U 1 j A1 j ; la primera fila de U y A son iguales.


2

L21

1
A21
U 11

U 22 A22 L21U12

U 23 A23 L21U 13

U 24 A24 L21U 14

obtenemos:
2 fila de U
2 fila de L

U 2 j A2 j L21U 1 j
El clculo de determinados elementos de U requiere elementos de L, que deben de haber
sido previamente calculados, y viceversa.

El orden de clculo de los diferentes elementos de L y U no es arbitrario.

fila L
3

* col. U
*

L31

1
A31
U 11
1
A32 L31U12
U 22

L32

U 33 A33 L31U 13 L32U 23

U 34 A34 L31U 14 L32U 24

obtenemos:
3 fila de U
3 fila de L

31

U 3 j A3 j L3kU kj
k 1

L41

1
A41
U 11
1
A42 L41U12
U 22
1
A43 L41U 13 L42U 23
U 33

L42

L43

U 44 A44 L41U 14 L42U 24 L43U 34

obtenemos:
4 fila de U
4 fila de L

De este caso particular podemos inducir las frmulas para el caso ms general posible:
i 1

U ij Aij LikU kj i j;

Uij=0 i > j

k 1

j 1

1
Lij
Aij LikU kj i > j;
U jj
k 1

L ij=0 i < j;

L ii=1

(*) En estas expresiones generales el sumatorio no se realiza si el lmite superior es menor


que el inferior. for (int k=1; k<=0; k++) {.}; // no se ejecuta ninguna vez

Deduccin alternativa de la factoriazacin LU. (garantiza el orden de clculo correcto)


(1a) Multiplicamos la primera fila de L por las columnas de U, e identificamos trminos:
U 11 A11 ; U 12 A12 ; U 13 A13 ; U 14 A14

Es decir, la primera fila de U y A son iguales.


(1b) Multiplicamos las filas de L (excepto la primera) por la primera columna de U, e
identificamos trminos:
L21U 11 A21 ; L31U 11 A31 ; L41U 11 A41
de manera que se puede obtener la primera columna de L:
L11 1; L21

1
1
1
A31 ; L41
A41
A21 ; L31
U 11
U 11
U 11

(2a) Multiplicamos la segunda fila de L por las columnas de U (excepto la primera), e

identificamos trminos:
U 21 0
A22 L21U 12 U 22 U 22 A22 L21U 12
A23 L21U 13 U 23 U 23 A23 L21U 13
A24 L21U 14 U 24 U 24 A24 L21U 14
Se obtiene la segunda fila de U.

(2b) Multiplicamos las filas de L (excepto primera y segunda) por la segunda columna de U:
L12 0 ; L22 1; L32

1
A32 L31U 12 ; L42 1 A42 L41U 12
U 22
U 22

Segunda columna de L.
(3a) Multiplicamos la tercera fila de L por las columnas de U (excepto la primera y
segunda), e identificamos trminos:

U 31 0
U 32 0
A33 U 33 L31U 13 L32U 23 U 33 A33 L31U 13 L32U 23
A34 U 34 L31U 14 L32U 24 U 34 A34 L31U 14 L32U 24

Se obtiene la tercera fila de U.


(3b) Multiplicamos la cuarta fila de L por la tercera columna de U:
L13 0 ; L23 0 ; L33 1; L43

Tercera columna de L.

1
A43 L41U 13 L42U 23
U 33

(4a,b) Multiplicamos la cuarta fila de L por la cuarta columna de U, e identificamos


trminos:

Cuarta fila de U.
U 41 0 ; U 42 0 ; U 43 0 ; U 44 A44 L41U 14 L42U 24 L43U 34
Cuarta columna de L.
L14 0 ; L24 0 ; L34 0 ; L44 1
Observar que con este procedimiento se sigue un camino por el cual se alterna la

obtencin de una fila de U y una columna de L, ya que el clculo de determinados elementos


de U requiere elementos de L, que deben de haber sido previamente calculados, y viceversa.
Se pueden inducir las frmulas generales previamente presentadas:
i 1

U ij Aij LikU kj i j; Uij=0 i > j


k 1

1
Lij
U jj

A j 1L U i > j;
ij ik kj
k 1

L ij =0 i < j;

L ii =1

(*) En estas expresiones generales el sumatorio no se realiza si el lmite superior es menor


que el inferior. for (int k=1; k<=0; k++) {.}; // no se ejecuta ninguna vez

Recordemos nuestro problema original:

Lz b
Ax b LUx b

Ux
z

que podemos resolver en dos etapas:

(a)
1
L
Lz b 21
L31

L41

L32
L42

1
L43

0 z1 b1
0 z 2 b2

0 z3 b3

1 z 4 b4

Por sustitucin progresiva obtenemos fcilmente z.


z1 b1
L21 z1 z 2 b2 z 2 b2 L21 z1

L31 z1 L32 z 2 z3 b3 z3 b3 L31 z1 L32 z 2

L41 z1 L42 z 2 L43 z3 z 4 b4 z 4 b4 L41 z1 L42 z 2 L43 z3


De donde se puede inducir una expresin para el caso general de n ecuaciones con n

incgnitas:
i 1

zi bi Lij z j i=1 ,, n
j 1

(b)
U 11 U 12 U 13
0 U
U 23
22

Ux z
0 U 33
0

0
0
0

U 14 x1 z1
U 24 x2 z 2

U 34 x3 z3

U 44 x4 z 4

Por sustitucin regresiva obtenemos fcilmente x.


1
U 44 x4 z 4 x4
z4
U 44
U 33 x3 U 34 x4 z3 x3

1
z3 U 34 x4
U 33

U 22 x2 U 23 x3 U 24 x4 z 2 x2

1
z2 U 23 x3 U 24 x4
U 22

U 11 x1 U 12 x2 U 13 x3 U 14 x4 z1 x1

1
z1 U12 x2 U 13 x3 U14 x4
U 11

De donde se puede inducir una expresin para el caso general de n ecuaciones con n

incgnitas:
1
xi
U ii

zi

U
x

ij j i=n,,1
j i 1

Recordemos que en C++ los elementos de un vector de dimensin n se numeran con los
ndices de 0 a n-1. Lo mismo sucede con las filas y columnas de una matriz de dimensin
nxn.
Adaptacin de las frmulas generales numerando los ndices de 0 a n-1 (i, j =0, , n-1)
i 1

U ij Aij LikU kj i j;

Uij=0 i > j

k 0

j 1

1
Lij
Aij LikU kj i > j;
U jj
k 0

i 1

zi bi Lij z j

Lij=0 i < j; Lii=1

i=0,,n-1

j 0

1
xi
U ii

zi

U
x

ij j
j i 1

n 1

i =n-1,,0

En las expresiones generales el sumatorio no se realiza si el lmite superior es menor que


el inferior.
for (int k=0; k<= 1; k++) {.}; // no se ejecuta ninguna vez

Ejemplo:

3
Ax b ; A
2

3
4
3
2

2
3
4
3

1
1


2
1
; b
3
1


4
1

Paso 1: Factorizacin A LU
4

3
A
2

3 2 1 1

4 3 2 L21

L
3 4 3
31
2 3 4 L41

0
1

0
0

L32

L42

L43

0 U 11 U 12 U 13

0 0 U 22 U 23
0 0
0 U 33

1 0
0
0

U 14

U 24
U 34

U 44

Igualando trminos obtenemos:


0
0
1

0
3 4 1
L
12 67 1

1 / 4 5 7 5 6

0
2
1
4 3

0
0 7 4 3 2 5 4
;
U

0 0 12 7 10 7
0

1
0
53
0 0

Paso 2: Resolucin de Lz b .
0
0
1

0
3 4 1
1 2 6 7 1

1 / 4 5 7 5 6

0 z1 1 z1 1


0 z 2 1 z 2 1 4

0 z3 1 z3 12 7


1 z 4 1 z 4 0

Paso 3: Resolucin de Ux z .
2
1 x1 1 x1 0
4 3

x
4
0
7
4
3
2
5
4
1
x2 1

2
0 0 12 7 10 7 x 12 7 x 1
3

3
0
5 3 x4 0 x4 0
0 0

9 1 1
10

Ejemplo:
Ax b ; A 2 10 3 ; b 19

3 4 11
0
Paso 1: Factorizacin A LU
0 0 U 11 U 12 U 13
9 1 1 1

A 2 10 3 L21 1 0 0 U 22 U 23

0 U 33
3 4 11 L31 L32 1 0
Igualando trminos obtenemos:
0
0
1
1
1
9

L 2 9
1
0 ; U 0 88 9 25 9

0
9.625
1 99 264 1
0

Paso 2: Resolucin de Lz
0
1

1
2 9

1 99 264

b.
0 z1 10
10

0 z 2 9 z 151 9

1 z 3 0
9.625

Paso 3: Resolucin de Ux z .
1
1 x1 10
9
1


0 88 9 25 9 x2 151 9 x 2
0
1
0
9.625 x3 9.625

Mtodo LU en sistemas tridiagonales:

Ax f ;

0
b1 c1 0
a b c

0
2
2
2

0 a3 b3 c3
A

0 0 an1 bn1

an
0 0

0
0


;
0
cn1

bn

f1
f
2
f3
f

f n1

f
n

A es una matriz tridiagonal.


Para este tipo de sistemas, la factorizacin LU toma la siguiente forma simplificada:
1

2
A LU 0

0 1
0 0

0 0
0 n 1 0
0
1

0
0
1

1 0
2 2


0 n 1
0

0
n 1
n

Observar que a 1 y c n no existen en la matriz de coeficientes A, y 1 y n no existen en las


matrices L y U, respectivamente.

(1) Para obtener los elementos de L y U, multiplicamos las filas de L por las columnas de U

e identificando trminos con los elementos de A se obtiene:

i = c i ; i = 1,, n-1
1 b1 i

ai

i 1

i bi i ci 1 ; i = 2, , n

(bucle recorrido de 2 a n)

Lz
(2) Posteriormente para resolver el sistema: Ax f LUx f
Ux

Se pueden
programar
a la vez

(a) La sustitucin progresiva en el sistema Lz f nos da:


z1 f 1 ; zi f i i zi 1 ; i = 2, , n

(bucle recorrido de 2 a n)

(b) La sustitucin regresiva en el sistema Ux z nos da:


xn

zn

; xi

zi ci xi 1

; i = n-1, , 1

(bucle recorrido de n-1 a 1)

Procedimiento extremadamente rpido para resolver sistemas tridiagonales con n muy


elevado problemas de contorno en EDPs.

Consejos de programacin:

Hacer una funcin que resuelva el sistema tridiagonal. Por ejemplo:


void Tridiag(double a[], double b[], double c[], double f[], double x[], int n)
n : el numero de ecuaciones del sistema
a, b, c y f arrays de tipo vector que almacenan los coeficientes a i , b i , c i y f i previamente
definidos. Observar que no se trabaja con la matriz de coeficientes entera A.
x: array que almacena la solucin x i calculada.
Dentro de la funcin Tridiag se utilizarn tambin los arrays , y z.
Puesto que en C++ los elementos de una array se numeran empezando por el ndice cero, se
recomienda declarar la dimensin de los arrays a, b, c, f, x, , y z como n+1 (double a[n+1]),
con objeto de respetar la notacin de subndices previamente introducida.
Ojo: los elementos de los arrays (a[0], a[1], b[0], c[0], c[n], f[0], x[0], [0], [1], [0] y
z[0] ) de los arrays no se utilizan, pero esto es irrelevante para el correcto funcionamiento del
programa.
Alternativa: adaptar la notacin de las frmulas generales de la pgina anterior numerando
los ndices de 0 a n-1 en vez de 1 a n, y declarar la dimensin de los arrays como n.