Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 6 v0.2 PDF
Tema 6 v0.2 PDF
______________________________________________________________________
1 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Índice
Índice ................................................................................................................................ 2
Lista de Figuras ................................................................................................................ 3
Lista de Tablas.................................................................................................................. 3
Lista de Algoritmos .......................................................................................................... 4
Motivación........................................................................................................................ 5
Fundamentos: Definiciones y propiedades de sistemas de ecuaciones lineales y matrices
.......................................................................................................................................... 9
Definición: Sistema de ecuaciones lineales.............................................................. 9
Propiedades: SEL, operaciones elementales y matrices........................................... 9
Definiciones: Matriz y vector ................................................................................. 11
Definición: Igualdad entre matrices ....................................................................... 11
Definición: Dependencia e independencia lineal ................................................... 11
Definiciones: Tipos especiales de matrices ............................................................ 11
Propiedades: Suma de matrices y producto externo por escalares ......................... 12
Definición: Matriz extendida.................................................................................. 13
Definición: Producto (interno) de matrices ............................................................ 13
Definición: Matriz identidad .................................................................................. 14
Propiedades: Producto de matrices......................................................................... 14
Definición: Matriz inversa...................................................................................... 14
Propiedades: Inversión de matrices ........................................................................ 15
Definición: Determinante de una matriz ................................................................ 15
Definición: Menor principal ................................................................................... 15
Propiedades: Determinantes ................................................................................... 15
Definición: Matriz traspuesta ................................................................................. 16
Propiedades: Matrices traspuestas .......................................................................... 16
Definición: Matriz ortogonal .................................................................................. 17
Teorema: Existencia y unicidad de soluciones....................................................... 17
Definición: Producto escalar entre vectores ........................................................... 17
Propiedades: Producto escalar entre vectores......................................................... 18
Definición: Matriz definida positiva ...................................................................... 18
Definición: Matriz diagonalmente dominante........................................................ 18
Definición: Rango de una matriz............................................................................ 18
Definición: Normas vectoriales .............................................................................. 19
Teorema: Relación entre la norma euclídea y la norma infinito ............................ 19
Definición: Distancia entre dos vectores ................................................................ 19
Definición: Convergencia....................................................................................... 20
Definición: Norma matricial................................................................................... 20
Definición: Norma subordinada y normal natural.................................................. 20
Definición: Condicionamiento de matrices ............................................................ 21
Definición: Autovalores y autovectores ................................................................. 21
Propiedades: Autovalores y autovectores............................................................... 21
Definición: Polinomio característico ...................................................................... 22
Definición: Multiplicidad algebraica y geométrica ................................................ 22
Propiedades: Polinomio característico ................................................................... 22
Definición: Matriz diagonalizable .......................................................................... 22
Propiedades: Matrices diagonalizables................................................................... 23
Definición: Radio espectral de una matriz ............................................................. 23
______________________________________________________________________
2 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Lista de Figuras
Figura 1. Circuito eléctrico cuya resolución mediante las leyes de Kirchoff da lugar a un
sistema de ecuaciones lineales.......................................................................................... 5
Figura 2. Placa y distribución de temperaturas................................................................. 6
Lista de Tablas
Tabla 1. Órdenes de los algoritmos. ............................................................................... 67
______________________________________________________________________
3 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Lista de Algoritmos
Algoritmo 1. Matriz diagonal ......................................................................................... 26
Algoritmo 2. Método de sustitución hacia delante ......................................................... 26
Algoritmo 3. Método de sustitución hacia atrás ............................................................. 27
Algoritmo 4. Método de Gauss con sustitución hacia atrás .......................................... 32
Algoritmo 5. Método de Gauss con sustitución hacia atrás y búsqueda de pivote......... 38
Algoritmo 6. Método de Gauss-Jordan con búsqueda de pivote................................... 40
Algoritmo 7. Método de Gauss con sustitución hacia atrás y búsqueda de pivote
máximo en la columna.................................................................................................... 48
Algoritmo 8. Método de Gauss con sustitución hacia atrás y búsqueda pivote de
columna escalada............................................................................................................ 53
Algoritmo 9. Factorización LU por el método de Doolittle. ........................................ 60
Algoritmo 10. Factorización LU según el método de Crout ....................................... 63
Algoritmo 11. Factorización LU según el método de Choleski .................................. 66
______________________________________________________________________
4 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Motivación
¿Qué es un sistema de ecuaciones lineales y por qué necesitamos resolverlo?
En primer lugar advertiremos que los sistemas de ecuaciones lineales aparecen por
doquier en las ciencias experimentales, técnicas e ingeniería. Muchos de los problemas
que aparecen en estas disciplinas pueden reducirse a resolver sistemas de ecuaciones
lineales (SEL). Entre los problemas que así pueden ser tratados están la solución de
ecuaciones diferenciales en derivadas parciales resueltas mediante diferencias finitas,
problemas geométricos en matemáticas, la solución de sistemas de ecuaciones
diferenciales, problemas de valores propios en física matemática, el ajuste por mínimos
cuadrados y la aproximación de funciones por polinomios.
Algunos ejemplos sencillos de sistemas cuyas leyes físicas dan lugar a SEL se muestran
a continuación.
Figura 1. Circuito eléctrico cuya resolución mediante las leyes de Kirchoff da lugar a un sistema de
ecuaciones lineales.
Teniendo éstas en cuenta, suponiendo sentidos para las corrientes entre cada dos nodos
y calculando con cuidado, se llega al SEL (1.1), cuya solución debe ser única. En
ausencia de otras condiciones, los valores de las resistencias Ri , 1 ≤ i ≤ 8 y de la
fuente de alimentación V0 pueden suponerse conocidos determinando unívocamente
todos los coeficientes del sistema.
______________________________________________________________________
5 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞
VB ⎜⎜⎜3 ∑ Rk ⎟⎟⎟ −VC ⎜⎜⎜ ∑ Rk ⎟⎟⎟ −VD ⎜⎜⎜ ∑ Rk ⎟⎟⎟ −VE ⎜⎜⎜ ∑ Rk ⎟⎟⎟ = V0 ⎜⎜⎜ ∑ Rk ⎟⎟⎟
⎝⎜ k ={1,2,4,8} ⎟⎠ ⎜⎝k ={1,2,8} ⎠⎟ ⎜⎝k ={1,2,4} ⎠⎟ ⎝⎜k ={1,4,8} ⎠⎟ ⎝⎜k ={2,4,8} ⎠⎟
⎛ ⎞
−VB (R6 ) +VC ⎜⎜⎜ ∑ Rk ⎟⎟⎟ −VD (R4 ) =0
⎜⎝k ={4,6} ⎟⎠
⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞
−VB ⎜⎜⎜ ∑ Rk ⎟⎟⎟ −VC ⎜⎜⎜ ∑ Rk ⎟⎟⎟ +VD ⎜⎜⎜2 ∑ Rk ⎟⎟⎟ −VE ⎜⎜⎜ ∑ Rk ⎟⎟⎟ =0
⎜⎝k ={5,6} ⎟⎠ ⎜⎝k ={5,8} ⎟⎠ ⎜⎝ k ={5,6,8} ⎟⎠ ⎜⎝k ={6,8} ⎟⎠
⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞
−VB ⎜⎜⎜ ∑ Rk ⎟⎟⎟ −VD ⎜⎜⎜ ∑ Rk ⎟⎟⎟ +VE ⎜⎜⎜3 ∑ Rk ⎟⎟⎟ = V0 ⎜⎜⎜ ∑ Rk ⎟⎟⎟
⎝⎜k ={3,5,7} ⎟⎠ ⎝⎜k ={2,3,7} ⎟⎠ ⎜⎝ k ={2,3,5,7} ⎟⎠ ⎜⎝k ={2,3,5} ⎟⎠
(1.1)
______________________________________________________________________
6 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
¿En qué proporción deben ser mezclados los componentes? El número de átomos
presentes antes de la reacción debe coincidir con el número después de la misma. Por
tanto,
7x − 7z =0
8x +y −5z −2w = 0
(1.4)
y −3z =0
3y −6z −w =0
______________________________________________________________________
7 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
8 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
En general, los sistemas podemos clasificarlos según la solución. Así, diremos que un
sistema es incompatible cuando no tenga solución y compatible cuando tenga, al menos,
una solución. Si un sistema es compatible, será determinado si presenta una única
solución e indeterminado cuando presente infinitas soluciones.
Los dos sistemas, el original y el transformado, presentan la misma solución, esto es, el
vector (x 1, …, x m ) es la solución de ambos sistemas. Diremos, por tanto, que ambos
sistemas son equivalentes. A las operaciones anteriores nos referiremos como
operaciones elementales.
Un caso especialmente sencillo de SEL es el llamado homogéneo, que verifica
bi = 0, ∀i . Los sistemas homogéneos presentan, al menos, la solución trivial, esta es,
______________________________________________________________________
9 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
10 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Por ello, damos a continuación una lista de definiciones y propiedades (no demostradas)
básicas de vectores y matrices, principalmente, que emplearemos en las secciones
siguientes [Burden y Faires, 1985; Conte y Boor, 1980; Kincaid y Cheney, 1990; Lang,
1987].
______________________________________________________________________
11 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
De forma análoga se define matriz triangular inferior aquella en la que aij = 0 para
cada i = j + 1, j + 2, …, n :
⎛a11 0 0 ⎞⎟
⎜⎜ ⎟⎟
⎜⎜a ⎟⎟
A = ⎜⎜⎜ ⎟⎟
21
⎟ (1.16)
⎜⎜ 0 ⎟⎟
⎜⎜ ⎟⎟
an −1n ann ⎠⎟⎟
⎜⎝an 1
Una matriz triangular inferior y superior a la vez tiene la forma explícita
⎛a11 0 0 ⎞⎟
⎜⎜ ⎟⎟
⎜⎜ 0 ⎟⎟
⎜⎜ ⎟
A=⎜ ⎟⎟ , (1.17)
⎜⎜ 0 ⎟⎟
⎜⎜ ⎟⎟
⎜⎜⎝ 0 0 ann ⎟⎟⎠
denominándose matriz diagonal.
Otro tipo de matrices que aparecen en ciertas aplicaciones son las matrices
tridiagonales. Como su propio nombre indica, son matrices A = (aij )n×n en las que
aij = 0 para todas las parejas i, j que verifiquen i − j > 1 , esto es, en la i -ésima fila,
sólo los aii , aii −1 y aii +1 son distintos de cero. De forma explícita:
⎛a11 a12 0 0 ⎞⎟
⎜⎜ ⎟⎟
⎜⎜a a ⎟⎟
⎜⎜ 21 22 ⎟⎟
⎜⎜ ⎟
A=⎜ 0 0 ⎟⎟ . (1.18)
⎜⎜ ⎟⎟
⎜⎜ an −1n −1 an −1n ⎟⎟⎟
⎜⎜ ⎟⎟
⎜⎜ 0 0 a a ⎟
⎝ nn −1 nn ⎟ ⎠
______________________________________________________________________
12 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
1. A + B = B + A , suma conmutativa
2. (A + B ) + C = A + (B + C ) , suma asociativa
3. A + 0 = 0 + A , elemento neutro para la suma: 0 = (0)n×m
4. A + (−A) = (−A) + A = 0 , elemento inverso para la suma
5. λ(A + B ) = λA + λB , propiedad distributiva para el producto externo
(conmutativo)
6. (λ + μ)A = λA + μA
7. (λμ)A = λ(μA)
8. 1A = A , elemento neutro para el producto externo
______________________________________________________________________
13 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
14 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
A ⋅ B = B ⋅ A = In (1.28)
−1
A la matriz B se la denomina matriz inversa de A y se denota A . Además, si existe,
es única. Una matriz no invertible es singular.
Propiedades: Determinantes
Sea A, B ∈ M n×n ( ) y λ ∈ , definiendo ahora Ei como la fila (ecuación) o la
columna i (indistintamente) de una matriz dada, se tienen las siguientes propiedades.
______________________________________________________________________
15 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
16 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
El SEL (1.25) tiene como mucho una solución (i.e. la solución, si existe, es única) si y
sólo si el correspondiente sistema homogéneo presenta sólo la solución trivial, esta es,
x i = 0, ∀i . Es más, no se puede obtener una solución única a no ser que nuestro SEL
tenga tantas ecuaciones como incógnitas.
En efecto, cualquier SEL homogéneo como menos ecuaciones que incógnitas presenta
soluciones no triviales. Además, si A ∈ M n ( ) y x , b ∈ M n×1( ) se tiene que los
siguientes puntos son equivalentes (préstese especial atención a los 4 primeros puntos)
1. El sistema homogéneo A ⋅ x = 0 asociado a A ⋅ x = b tiene sólo la solución
trivial x = 0
2. ∀b , A ⋅ x = b tiene una única solución
3. A es invertible, esto es, no singular
4. El determinante de A es no nulo: det(A) ≠ 0
5. Los vectores columna que forman A son una base de n
6. Los vectores fila que forman A son una base de n
7. 0 no es un autovalor de A
______________________________________________________________________
17 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
n
Además, diremos que dos vectores x , y ∈ son ortogonales si y solo si x , y = 0 .
______________________________________________________________________
18 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Es trivial comprobar que ambas verifican las propiedades de norma (hágase como
ejercicio).
x ∞
≤ x2≤ n x ∞
. (1.40)
______________________________________________________________________
19 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
e = xa − xr ∞
= max { 1.0 − 1.21 , 1.0 − 1.0012 , 1.0 − 0.9976 } = 0.21. (1.44)
Como se puede comprobar errores grandes, aunque sean sólo uno o pocos puntos,
dominan la norma.
Definición: Convergencia
{ }
∞
Una sucesión de vectores x( k ) de n
se dice que converge a x con respecto a la
k =1
Asimismo, se puede demostrar que las normas euclídea y la norma infinito son
equivalentes con respecto a la convergencia.
Nótese que la última propiedad hace diferente la norma matricial de las normas
vectoriales usuales. La distancia entre matrices puede entonces definirse de la forma
usual como A − B , A, B ∈ M n ( ) . Del mismo modo que en n es posible definir
múltiples normas matriciales, pero aquí nos vamos a restringir a las derivadas de la
norma euclídea y la norma matricial.
A M = sup { Ax V
: x V = 1} . (1.48)
______________________________________________________________________
20 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Esta se denomina norma natural. Es evidente demostrar que esta norma subordinada es
compatible con la norma vectorial dada. Las normas inducidas más empleadas son
⎧ n
⎪ ⎫
⎪ n
1. A 1 = max ⎪⎨∑ aij , 1 ≤ j ≤ n ⎪⎬ inducida por x 1 = ∑ x i .
⎪
⎪
⎩ i =1 ⎪
⎪
⎭ i =1
1/ 2
⎛ ⎧ n 2
⎪ ⎫⎞⎟
⎪ n
2. A 2 = ⎜⎜⎜max ⎪
⎨∑ aij , 1 ≤ j ≤ n ⎪
⎬⎟⎟ inducida por x 2 = ∑ x i2 .
⎜⎝ ⎪
⎪
⎩ i =1 ⎭⎠⎟
⎪
⎪ i =1
⎧
⎪ n ⎫
⎪
3. A ∞ = max ⎨∑ aij , 1 ≤ j ≤ n ⎪⎬ inducida por
⎪
⎪
⎪ i =1
⎩ ⎪
⎪
⎭
x ∞ = max { x i , 1 ≤ j ≤ n } .
______________________________________________________________________
22 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
⎛ d11 … 0 ⎞
⎜ ⎟
D = P −1 AP = (δ ij ) = ⎜ ⎟ (1.57)
n
⎜ 0 ⎟
⎝ d nn ⎠
es una matriz diagonal. Entonces, cada columna de P es un autovector de A asociado
al correspondiente elemento de D , que será un autovalor de A . Puesto que la matriz
P es no singular, recuérdese que las n filas son linealmente independientes, luego
forman una base de n .
ρ ( A) = max λ (1.58)
λ autovalor. El concepto de radio espectral está estrechamente relacionado con la
norma de una matriz.
2. ρ ( A) ≤ A p
para cualquier norma l p .
Un resultado íntimamente relacionado con el punto (2) de este teorema es que, dada una
matriz A , se verifica que existe una norma A p y un ε > 0 tal que A p < ρ ( A) + ε .
______________________________________________________________________
23 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
lim ( Ak ) = 0 (1.59)
k →∞ ij
3. ρ ( A) < 1 .
4. lim Ak x = 0 para todo x ∈ n
.
k →∞
La definición de radio espectral es muy apropiada y útil pues, de forma análoga a series
de números reales o funciones, el criterio de convergencia es ρ ( A) < 1 .
______________________________________________________________________
24 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Matriz diagonal
Consideremos un sistema Ax = b donde x , b ∈ M n×1( ) y A ∈ M n ( ) es una matriz
diagonal. Explícitamente,
⎛ ⎞ ⎛ ⎞
⎜⎜a11 0 ⎟⎟⎟ ⎛⎜ x 1 ⎟⎞⎟ ⎜⎜b1 ⎟⎟
⎜⎜ ⎜
⎜⎜ ⎟⎟⎟ ⎜⎜ ⎟⎟⎟ = ⎜⎜ ⎟⎟⎟ .
⎜⎜ ⎟⎟⎜⎜ ⎟⎟ ⎜⎜ ⎟⎟ (1.1)
⎟ ⎜ ⎟ ⎜ ⎟
⎜ ⎟
⎜0
⎜⎝ ann ⎟⎟⎟⎠ ⎜⎝x n ⎟⎠ ⎜⎝bn ⎟⎠
En este caso, la solución del sistema de ecuaciones es inmediata, puesto que las n
ecuaciones están factorizadas, despejando componente a componente:
⎛ x 1 ⎞⎟ ⎛⎜ b1 / a11 ⎞⎟
⎜⎜ ⎟ ⎜ ⎟⎟
⎜⎜ ⎟⎟ = ⎜⎜ ⎟⎟
⎜⎜ ⎟⎟⎟ ⎜⎜ ⎟⎟ (1.2)
⎜⎜x ⎟⎟ ⎜⎜ ⎟
⎟
⎝ n ⎠ ⎝⎜bn / ann ⎠⎟⎟
Evidentemente, se para poder despejar cada componente es necesario que los elementos
de la diagonal principal de A sean no nulos. En el caso que aii = 0 para algún i y
bi = 0 , existen infinitas soluciones: x i ∈ . Por otro lado, es evidente que si aii = 0
1 ≤ i ≤ n , bi ≠ 0 , ∃ solución del sistema.
Con Input indicamos las entradas mínimas requeridas para implementar el algoritmo y
resolver el SEL dado. Output es el resultado o producto del programa. If, Else y Then
representan los comandos básicos en cualquier entorno para llevar a cabo
comparaciones y bifurcaciones abierta. For, While, Do son los comandos típicos para
llevar a cabo bucles y bucles condicionados. Todos ellos se cierran con End. Para
indicar la finalización del programa se emplea la directiva Break.
______________________________________________________________________
25 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
⎛a11 0 0 ⎞⎟
⎜⎜ ⎟⎛ ⎛ ⎞
⎜ ⎟⎟ ⎜ x 1 ⎞⎟⎟ ⎜⎜b1 ⎟⎟
⎜⎜⎜a21 ⎜
⎟⎟ ⎜ ⎟⎟ ⎜⎜ ⎟⎟
⎟ ⎜ ⎟ = ⎜ ⎟⎟ (1.3)
⎜⎜ ⎟⎜
⎜⎜ 0 ⎟⎟ ⎜⎜ ⎟⎟⎟ ⎜⎜ ⎟⎟⎟
⎟⎟ ⎜x n ⎟ ⎜⎜b ⎟
⎜⎜a
⎝ n1 ann −1 ann ⎟⎟⎠ ⎝ ⎠ ⎝ n ⎠
______________________________________________________________________
26 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
27 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
⎛a 31 0 0 ⎞⎛ ⎛ ⎞
⎜⎜ ⎟⎟ ⎜⎜x 3 ⎟⎟⎞ ⎜⎜b3 ⎟⎟
⎜⎜a ⎟⎟ ⎜ ⎟⎟ ⎜⎜ ⎟⎟
⎜⎜ 11 a12 0 ⎟⎟⎟ ⎜⎜⎜x 1 ⎟⎟⎟ = ⎜⎜b1 ⎟⎟⎟ . (1.6)
⎜⎜a ⎟⎟ ⎜⎜x ⎟⎟ ⎜⎜ ⎟⎟
⎝ 21 a22 a23 ⎠⎝ 2⎠ ⎜⎝b2 ⎟⎠
______________________________________________________________________
28 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
⎛ a11 … a1n ⎞⎛ ⎛ ⎞
⎜⎜ ⎟⎟ ⎜⎜ x 1 ⎟⎟⎞ ⎜⎜b1 ⎟⎟
⎜⎜ ⎟⎟ ⎜ ⎟⎟ ⎜⎜ ⎟⎟
⎜⎜ ⎟⎟ ⎜⎜ ⎟⎟ = ⎜⎜ ⎟⎟ (1.7)
⎜⎜a ⎟⎟ ⎜⎜ ⎟⎟ ⎜ ⎟⎟
⎟
⎝ m1 a mn ⎟ ⎠⎝⎜x n ⎟⎠ ⎜⎜⎝bn ⎟⎠
Algoritmo [Burden y Faires, 1985]: Método de Gauss con sustitución hacia atrás
Input n, aij , bi
// Proceso de eliminación gaussiana
For i = 1 to i = n − 1
For j = i + 1 to i = n
m ji = a ji / aii
(E j − m jiEi ) → E j
End
End
If ann = 0 (no existe solución única) Then Break
______________________________________________________________________
29 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Se pueden incluir chequeos para comprobar que la matriz es, en efecto, cuadrada, que
el determinante es no nulo, etc. Estos refinamientos quedan a discreción del lector.
Nótese que por ahorrar notación no hemos denotado las nuevas variables con tilde.
______________________________________________________________________
30 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
A = zeros(N,N+1);
X = zeros(1,N);
for I = 1:N
for J = 1:N+1
A(I,J) = fscanf(INP, '%f',1);
end;
end;
OK = TRUE;
fclose(INP);
else fprintf(1,'The number must be a positive integer.\n');
end;
end;
else
fprintf(1,'The program will end so the input file can be
created.\n');
end;
if OK == TRUE
% STEP 1
% Elimination Process
NN = N-1;
M = N+1;
ICHG = 0;
I = 1;
while OK == TRUE & I <= NN
% STEP 2
% use IP instead of p
IP = I;
while abs(A(IP,I)) <= 1.0e-20 & IP <= N
IP = IP+1;
end;
if IP == M
OK = FALSE;
else
% STEP 3
if IP ~= I
for JJ = 1:M
C = A(I,JJ);
A(I,JJ) = A(IP,JJ);
A(IP,JJ) = C;
end;
ICHG = ICHG+1;
end;
% STEP 4
JJ = I+1;
for J = JJ:N
% STEP 5
% use XM in place of m(J,I)
XM = A(J,I)/A(I,I);
% STEP 6
for K = JJ:M
A(J,K) = A(J,K) - XM * A(I,K);
end;
% Multiplier XM could be saved in A(J,I).
A(J,I) = 0;
end;
end;
I = I+1;
end;
if OK == TRUE
% STEP 7
if abs(A(N,N)) <= 1.0e-20
______________________________________________________________________
31 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
OK = FALSE;
else
% STEP 8
% start backward substitution
X(N) = A(N,M) / A(N,N);
% STEP 9
for K = 1:NN
I = NN-K+1;
JJ = I+1;
SUM = 0;
for KK = JJ:N
SUM = SUM - A(I,KK) * X(KK);
end;
X(I) = (A(I,M)+SUM) / A(I,I);
end;
% STEP 10
% procedure completed successfully
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text file\n');
fprintf(1,'Please enter 1 or 2.\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example: A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'GAUSSIAN ELIMINATION\n\n');
fprintf(OUP, 'The reduced system - output by rows:\n');
for I = 1:N
for J = 1:M
fprintf(OUP, ' %11.8f', A(I,J));
end;
fprintf(OUP, '\n');
end;
fprintf(OUP, '\n\nHas solution vector:\n');
for I = 1:N
fprintf(OUP, ' %12.8f', X(I));
end;
fprintf (OUP, '\n\nwith %d row interchange(s)\n', ICHG);
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created successfully \n',NAME);
end;
end;
end;
if OK == FALSE
fprintf(1,'System has no unique solution\n');
end;
end;
Ejercicios
______________________________________________________________________
32 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Resolver mediante el método de Gauss con sustitución hacia atrás los siguientes SEL:
6x 1 − 2x 2 + 2x 3 + 4x 4 = 12
12x 1 − 8x 2 + 6x 3 + 10x 4 = 34
([Kincaid y Cheney, 1990], pag. 139)
3x 1 − 13x 2 + 9x 3 + 3x 4 = 27
−6x 1 + 4x 2 + x 3 − 18x 4 = −38
⎛1 −1 2 −1⎞⎟ ⎛x 1 ⎞ ⎛−8 ⎞⎟
⎜⎜ ⎟⎟ ⎜⎜ ⎟⎟ ⎜⎜ ⎟
⎜⎜2 −2
⎜⎜ 3 −3⎟⎟ ⎜⎜x 2 ⎟⎟ ⎜⎜⎜−20⎟⎟⎟
⎟⎟ ⎜ ⎟⎟ = ⎜ ⎟⎟ ([Burden y Faires, 1985], pag. 298)
⎜⎜1 1 ⎜ ⎜
1 0 ⎟⎟ ⎜⎜ 3 ⎟⎟ ⎜⎜−2 ⎟⎟⎟
⎟ x ⎟
⎜⎜ ⎟⎟ ⎜ ⎟⎟ ⎜ ⎟⎟
⎜1 −1
⎜⎝ 4 3 ⎟⎟⎠ ⎜⎜⎝x 4 ⎟⎠ ⎜⎜⎝⎜−4 ⎠⎟⎟
Limitaciones
El método de eliminación gaussiana, esquematizado en el Algoritmo 4 presenta algunas
limitaciones.
Otra limitación obvia proviene del hecho que en algún paso intermedio del Algoritmo 4
se produzca una división por cero (o números cercanos en módulo a cero). Estos pueden
ocurrir al determinar los factores m ji = a ji / aii para i, j dados; aunque eso no implica
que el sistema no tenga solución, sino que la técnica debe ser modificada para resolver
esa eventualidad. En la mayoría de los casos, es suficiente hacer una búsqueda en los
elementos siguientes de la misma columna e intercambiar las filas del elemento (o
pivote) nulo y la del nuevo no nulo encontrado. Para ilustrar esta dificultad, tratemos de
resolver el tercer ejercicio propuesto en el apartado anterior.
El sistema propuesto es
⎛1 −1 2 −1⎞⎟ ⎛x 1 ⎞ ⎛−8 ⎟⎞
⎜⎜ ⎟⎟ ⎜⎜ ⎟⎟ ⎜⎜ ⎟
⎜⎜2 −2
⎜⎜ 3 −3⎟⎟ ⎜⎜x 2 ⎟⎟ ⎜⎜⎜−20⎟⎟⎟
⎟⎟ ⎜ ⎟⎟ = ⎜ ⎟⎟ .
1 0 ⎟⎟⎟ ⎜⎜⎜x 3 ⎟⎟⎟ ⎜⎜⎜−2 ⎟⎟⎟
⎜⎜1 1 (1.9)
⎜⎜ ⎟⎟ ⎜ ⎟⎟ ⎜ ⎟⎟
⎜1 −1
⎜⎝ 4 3 ⎟⎟⎠ ⎜⎜⎝x 4 ⎟⎠ ⎜⎜⎜−
⎝ 4 ⎟⎟
⎠
______________________________________________________________________
33 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
⎛1 −1 2 −1⎟⎞ ⎛x 1 ⎞ ⎛−8⎟⎞
⎜⎜ ⎟ ⎟ ⎜ ⎟
⎜⎜0 0 −1 −1⎟⎟ ⎜⎜⎜x ⎟⎟ ⎜⎜⎜−4⎟⎟
⎜⎜ ⎟⎟ ⎜ 2 ⎟⎟ ⎜ ⎟⎟
⎜⎜0 2 −1 1 ⎟⎟⎟ ⎜⎜⎜x 3 ⎟⎟⎟ = ⎜⎜⎜6 ⎟⎟⎟ . (1.10)
⎜⎜ ⎟⎟ ⎜⎜ ⎟⎟ ⎜⎜ ⎟⎟
⎟ ⎟ ⎟
⎜⎜0 0
⎝ 2 4 ⎟⎠⎟ ⎜⎜⎝x 4 ⎠⎟ ⎜⎜⎝12 ⎠⎟⎟
El problema aparece a continuación: el elemento de pivote actual, el a22 , tras la primera
(1)
iteración (denotado como a22 ) es nulo. Por tanto, no podemos llevar a cabo la
eliminación de los siguientes elementos de la segunda columna. Nuestro algoritmo
produciría un “infinito” y dejaría de resolver el sistema o, en términos matemáticos,
multiplicar por cero elimina ecuaciones. Lo que sí podemos hacer es permutar la fila
con pivote nulo por otra con un elemento no nulo (sistema (1.11)) en la misma columna
(en este caso la fila tercera) y proseguir con el algoritmo.
⎛1 −1 2 −1⎟⎞ ⎛x 1 ⎞ ⎛−8⎟⎞
⎜⎜ ⎟ ⎟ ⎜ ⎟
⎜⎜0 2 −1 1 ⎟⎟ ⎜⎜⎜x ⎟⎟ ⎜⎜⎜6 ⎟⎟
⎜⎜ ⎟⎟ ⎜ 2 ⎟⎟ ⎜ ⎟⎟
⎜⎜0 0 −1 −1⎟⎟⎟ ⎜⎜⎜x 3 ⎟⎟⎟ = ⎜⎜⎜−4⎟⎟⎟ . (1.11)
⎜⎜ ⎟
⎟⎟ ⎜⎜ ⎟⎟⎟ ⎜⎜ ⎟⎟ ⎟
⎜⎜0 0 2 4 ⎟⎟ ⎜⎝⎜x 4 ⎠⎟ ⎜⎜12 ⎟⎟
⎝ ⎠ ⎝ ⎠
En caso de que no existiera otro pivote no nulo, lógicamente, el sistema podría presentar
infinitas soluciones o bien no tener solución. Así pues, el Algoritmo 4 modificado,
incluyendo la búsqueda de pivotes no nulos, quedaría como sigue:
______________________________________________________________________
34 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
End
Output x i
Break
En caso que el sistema no presente solución única (tenido en cuenta en este algoritmo),
discernir entre infinitas soluciones o sistema incompatible requeriría operaciones
adicionales.
% GAUSSIAN ELIMINATION WITH PARTIAL PIVOTING ALGORITHM 6.2
%
% To solve the n by n linear system
%
% E1: A(1,1) X(1) + A(1,2) X(2) +...+ A(1,n) X(n) = A(1,n+1)
% E2: A(2,1) X(1) + A(2,2) X(2) +...+ A(2,n) X(n) = A(2,n+1)
% :
% .
% EN: A(n,1) X(1) + A(n,2) X(2) +...+ A(n,n) X(n) = A(n,n+1)
%
% INPUT: number of unknowns and equations n; augmented
% matrix A = (A(I,J)) where 1<=I<=n and 1<=J<=n+1.
%
% OUTPUT: solution x(1), x(2),...,x(n) or a message that the
% linear system has no unique solution.
syms('AA', 'NAME', 'INP', 'OK', 'N', 'I', 'J', 'A');
syms('M', 'NROW', 'NN', 'ICHG', 'IMAX', 'AMAX', 'JJ');
syms('IP', 'JP', 'NCOPY', 'I1', 'J1', 'XM', 'K', 'N1');
syms('X', 'N2', 'SUM', 'KK', 'FLAG', 'OUP');
TRUE = 1;
FALSE = 0;
fprintf(1,'This is Gaussian Elimination with Partial Pivoting.\n');
fprintf(1,'The array will be input from a text file in the
order:\n');
fprintf(1,'A(1,1), A(1,2), ..., A(1,N+1) \n');
fprintf(1,'A(2,1), A(2,2), ..., A(2,N+1),\n');
fprintf(1,'..., A(N,1), A(N,2), ..., A(N,N+1)\n\n');
fprintf(1,'Place as many entries as desired on each line, but
separate ');
fprintf(1,'entries with\n');
fprintf(1,'at least one blank.\n\n\n');
fprintf(1,'Has the input file been created? - enter Y or N.\n');
AA = input(' ','s');
if AA == 'Y' | AA == 'y'
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example: A:\\DATA.DTA\n');
NAME = input(' ','s');
INP = fopen(NAME,'rt');
OK = FALSE;
while OK == FALSE
fprintf(1,'Input the number of equations - an integer.\n');
N = input(' ');
if N > 0
A = zeros(N,N+1);
X = zeros(1,N);
NROW = zeros(1,N);
for I = 1:N
for J = 1:N+1
A(I,J) = fscanf(INP, '%f',1);
end;
end;
OK = TRUE;
______________________________________________________________________
35 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
fclose(INP);
else fprintf(1,'The number must be a positive integer.\n');
end;
end;
else
fprintf(1,'The program will end so the input file can be
created.\n');
end;
if OK == TRUE
M = N+1;
% STEP 1
for I = 1:N
NROW(I) = I;
end;
% initialize row pointer
NN = N-1;
ICHG = 0;
I = 1;
% STEP 2
while OK == TRUE & I <= NN
% STEP 3
IMAX = NROW(I);
AMAX = abs(A(IMAX,I));
IMAX = I;
JJ = I+1;
for IP = JJ:N
JP = NROW(IP);
if abs(A(JP,I)) > AMAX
AMAX = abs(A(JP,I));
IMAX = IP;
end;
end;
% STEP 4
if AMAX <= 1.0e-20
OK = FALSE;
else
% STEP 5
% simulate row interchange
if NROW(I) ~= NROW(IMAX)
ICHG = ICHG+1;
NCOPY = NROW(I);
NROW(I) = NROW(IMAX);
NROW(IMAX) = NCOPY;
end;
I1 = NROW(I);
% STEP 6
for J = JJ:N
J1 = NROW(J);
% STEP 7
XM = A(J1,I)/A(I1,I);
% STEP 8
for K = JJ:M
A(J1,K) = A(J1,K)-XM*A(I1,K);
end;
% Multiplier XM could be saved in A(J1,I)
A(J1,I) = 0;
end;
end;
I = I+1;
end;
if OK == TRUE
______________________________________________________________________
36 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
% STEP 9
N1 = NROW(N);
if abs(A(N1,N)) <= 1.0e-20
OK = FALSE;
% system has no unique solution
else
% STEP 10
% start backward substitution
X(N) = A(N1,M) / A(N1,N);
% STEP 11
for K = 1:NN
I = NN - K + 1;
JJ = I + 1;
N2 = NROW(I);
SUM = 0;
for KK = JJ:N
SUM = SUM-A(N2,KK)*X(KK);
end;
X(I) = (A(N2,M) + SUM) / A(N2,I);
end;
% STEP 12
% procedure completed successfully
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text file\n');
fprintf(1,'Please enter 1 or 2.\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example: A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'GAUSSIAN ELIMINATION - PARTIAL PIVOTING\n\n');
fprintf(OUP, 'The reduced system - output by rows:\n');
for I = 1:N
for J = 1:M
fprintf(OUP, ' %11.8f', A(I,J));
end;
fprintf(OUP, '\n');
end;
fprintf(OUP, '\n\nHas solution vector:\n');
for I = 1:N
fprintf(OUP, ' %12.8f', X(I));
end;
fprintf (OUP, '\n\nwith %d row interchange(s)\n', ICHG);
fprintf(OUP, '\nThe rows have been logically re-ordered to:\n');
for I = 1:N
fprintf(OUP, ' %2d', NROW(I));
end;
fprintf(OUP,'\n');
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created successfully \n',NAME);
end;
end;
end;
if OK == FALSE
fprintf(1,'System has no unique solution\n');
______________________________________________________________________
37 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
end;
end;
Así, para el algoritmo de eliminación gaussiana con sustitución hacia atrás (incluyendo
la búsqueda de pivote no nulo), el número total de operaciones es de
2n 3 + 3n 2 − 5n n(n + 1) n 3 + 3n 2 − n
∑
×÷
=
6
+
2
=
3
,
n 3 − n n(n − 1) 2n 3 + 3n 2 − 5n
∑+−
=
3
+
2
=
6
donde los primeros sumandos se refieren al cómputo para el proceso de eliminación
gaussiana y los segundos a la sustitución regresiva.
Ejemplos
x1 + x 2 + x 3 + x 4 = 7
x 1 + x 2 + 2x 4 = 8
([Burden y Faires, 1985], pag 300, falla por infinitas
2x 1 + 2x 2 + 3x 3 = 10
−x 1 − x 2 − 2x 3 + 2x 4 = 0
soluciones)
x1 + x 2 + x 3 + x 4 = 7
x 1 + x 2 + 2x 4 = 5
([Burden y Faires, 1985], pag 300, falla por no tener
2x 1 + 2x 2 + 3x 3 = 10
−x 1 − x 2 − 2x 3 + 2x 4 = 0
solución, sistema incompatible)
______________________________________________________________________
38 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Método de Gauss-Jordan
Otro método de resolución, en la misma línea que los dos métodos anteriores, es el
llamado método de Gauss-Jordan. El método de Gauss-Jordan reduce la matriz asociada
al sistema de ecuaciones a una matriz diagonal, en vez de triangular superior o inferior.
Limitaciones
El método adolece de las mismas limitaciones que los anteriores. Hay que tener especial
cuidado en que el pivote sea no nulo para lo cual es a veces necesario hacer búsquedas
de pivotes en la columna.
______________________________________________________________________
39 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
(E j − m jiEi ) → E j
End
End
If ann = 0 (no existe solución única) Then Break
// Sustitución directa (matriz diagonal)
For i = 1 to i = n
x i ← bi / aii
End
Output x i
Break
n 3 + 2n 2 − 3n n 3 + 2n 2 − n
∑=
×÷ 2
+n =
2
,
n3 − n n3 − n
∑+−
=
2
+0=
2
donde los primeros sumandos se refieren al número de operaciones requeridas para el
proceso de eliminación gaussiana y los segundos a la sustitución regresiva, en este caso
directa.
Otros métodos
Método híbrido
Otra posible variación de los métodos anteriores, aunque similar al método de Gauss-
Jordan, consiste en transformar un sistema dado en un sistema triangular superior
(inferior) mediante el método de Gauss y entonces transformar éste en uno diagonal. Por
la evidente similitud con los casos anteriores no profundizamos más en este método.
Simplemente mostramos el orden de este algoritmo, que es el siguiente:
______________________________________________________________________
40 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
2n 3 + 3n 2 − 5n 2n 3 + 9n 2 − 5n
∑=
×÷ 6
+ n(n − 1) + n =
6
,
n3 − n n2 − n 2n 3 + 3n 2 − 5n
∑+−
=
3
+
2
+0=
6
donde el primer sumando es consecuencia de la triangulación, el segundo de la
diagonalización y el tercero para despejar las incógnitas del sistema ya diagonalizado.
Para el primero, sólo calcular la matriz inversa, si existe, requiere las siguientes
operaciones [Burden y Faires, 1985]
4n 3 − n
∑×÷
=
3
mediante el método de Gauss
8n 3 − 9n 2 + n
∑+−
=
6
3n 3 − n
∑=
×÷ 2
mediante el método de Gauss-Jordan
3n 3 − 4n 2 + n
∑
+−
=
2
Para el método de Cramer, se puede demostrar por inducción que si n > 1 , calcular un
sólo determinante de una matriz cuadrada de orden n requiere más de n ! operaciones.
______________________________________________________________________
41 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
∑ = (n + 1)(n !− 1)
+−
Los órdenes de estos algoritmos son mucho más elevados que los mostrados por los
métodos de Gauss y sus variaciones, lo que los hace impracticables (especialmente el de
Cramer).
Métodos a medida
En muchas ocasiones los sistemas a resolver poseen ciertas simetrías que hacen que la
matriz asociada tenga una estructura muy concreta (e. g. matrices banda). Conocer las
simetrías y las estructuras facilitan el diseño de algoritmos a medida eficientes.
Proponemos como ejercicio desarrollar un programa para resolver de forma eficiente
SEL con matrices en banda.
______________________________________________________________________
42 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Estrategias de pivotaje
Ya vimos anteriormente que un elemento de pivote nulo requería de un intercambio de
filas. No obstante, en la práctica es a menudo necesario intercambiar filas aunque los
pivotes sean no nulos. Los algoritmos presentados anteriormente determinan la solución
(exacta) del sistema A ⋅ x = b , si todas las operaciones se llevan a cabo con precisión
infinita. Este es un problema estrictamente computacional, puesto que matemáticamente
las soluciones son exactas. Los computadores, emplean una aritmética de precisión
finita (15 dígitos es lo usual) puesto que, lógicamente, no tienen una capacidad infinita
ni de almacenamiento ni de cómputo. No obstante, actualmente existen módulos y
paquetes de programación estándar que permiten incrementar la precisión de los
cálculos de forma considerable, a costa del coste computacional.
Intuitivamente podría decirse que la fuente de error es el elemento a11 , que está
próximo a cero. Puesto que el algoritmo no es válido si a11 = 0 , en una máquina de
precisión finita, es lógico que el algoritmo no resuelva correctamente el sistema para a11
cercanos a cero.
Esta intuición es cierta en parte, aunque imprecisa. Lo que realmente conduce a
resultados erróneos es el hecho de que a11 y a12 son muy distintos en módulo, esto es,
a11 − a12 1 , por lo que un pequeño error debido a truncamiento o redondeo en
x 2 da lugar a una gran error en x 1 . Dicho de otro modo, para calcular x 1 nos queda en el
denominador a11 = 0.0003 y en el numerador a12 = 1.566 , magnificando
a11/ a12 = 1.566 / 0.0003 = 5220 veces el error por truncamiento. De hecho, este es
un problema general de la aritmética que emplean los computadores: operaciones con
números muy dispares. En la medida de lo posible debe evitarse este tipo de situaciones.
______________________________________________________________________
43 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
A simple vista, puede resultar este problema de la aritmética finita un problema menor,
puesto que, a fin de cuentas, los ordenadores actuales trabajan con 15 dígitos sin
problemas. La respuesta es que depende del problema en cuestión. Sin bien es posible
que para resolver un sistema particular dado nos podamos permitir errores de redondeo
en la (e. g.) 12ª cifra decimal, también puede ocurrir que al resolver secuencialmente
SELs anidados el error se vaya acumulando, resultando al final del proceso un error
inaceptable en la solución. Esto último se da con frecuencia en la solución de
ecuaciones diferenciales en derivadas parciales dependientes del tiempo y discretizadas
mediante diferencias finitas.
Basados en las dificultades a la hora de resolver el sistema (1.12) a partir del Algoritmo
5, diseñamos una nueva estrategia. La más sencilla es seleccionar el elemento (en la
misma columna) que esté por debajo de la diagonal y que tome el valor absoluto mayor.
Ese elemento será considerado como el pivote. El pseudocódigo se detalla a
continuación:
Algoritmo [Burden y Faires, 1985]: Método de Gauss con sustitución hacia atrás y
búsqueda de pivote máximo en la columna
Input n, aij , bi
// Proceso de eliminación gaussiana
For i = 1 to i = n − 1
Find el menor p with i ≤ p ≤ n and a pi = max a ji
i ≤ j ≤n
End
End
______________________________________________________________________
45 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
N = input(' ');
if N > 0
A = zeros(N,N+1);
X = zeros(1,N);
NROW = zeros(1,N);
for I = 1:N
for J = 1:N+1
A(I,J) = fscanf(INP, '%f',1);
end;
end;
OK = TRUE;
fclose(INP);
else fprintf(1,'The number must be a positive integer.\n');
end;
end;
else
fprintf(1,'The program will end so the input file can be
created.\n');
end;
if OK == TRUE
M = N+1;
% STEP 1
for I = 1:N
NROW(I) = I;
end;
% initialize row pointer
NN = N-1;
ICHG = 0;
I = 1;
% STEP 2
while OK == TRUE & I <= NN
% STEP 3
IMAX = NROW(I);
AMAX = abs(A(IMAX,I));
IMAX = I;
JJ = I+1;
for IP = JJ:N
JP = NROW(IP);
if abs(A(JP,I)) > AMAX
AMAX = abs(A(JP,I));
IMAX = IP;
end;
end;
% STEP 4
if AMAX <= 1.0e-20
OK = FALSE;
else
% STEP 5
% simulate row interchange
if NROW(I) ~= NROW(IMAX)
ICHG = ICHG+1;
NCOPY = NROW(I);
NROW(I) = NROW(IMAX);
NROW(IMAX) = NCOPY;
end;
I1 = NROW(I);
% STEP 6
for J = JJ:N
J1 = NROW(J);
% STEP 7
XM = A(J1,I)/A(I1,I);
______________________________________________________________________
46 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
% STEP 8
for K = JJ:M
A(J1,K) = A(J1,K)-XM*A(I1,K);
end;
% Multiplier XM could be saved in A(J1,I)
A(J1,I) = 0;
end;
end;
I = I+1;
end;
if OK == TRUE
% STEP 9
N1 = NROW(N);
if abs(A(N1,N)) <= 1.0e-20
OK = FALSE;
% system has no unique solution
else
% STEP 10
% start backward substitution
X(N) = A(N1,M) / A(N1,N);
% STEP 11
for K = 1:NN
I = NN - K + 1;
JJ = I + 1;
N2 = NROW(I);
SUM = 0;
for KK = JJ:N
SUM = SUM-A(N2,KK)*X(KK);
end;
X(I) = (A(N2,M) + SUM) / A(N2,I);
end;
% STEP 12
% procedure completed successfully
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text file\n');
fprintf(1,'Please enter 1 or 2.\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example: A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'GAUSSIAN ELIMINATION - PARTIAL PIVOTING\n\n');
fprintf(OUP, 'The reduced system - output by rows:\n');
for I = 1:N
for J = 1:M
fprintf(OUP, ' %11.8f', A(I,J));
end;
fprintf(OUP, '\n');
end;
fprintf(OUP, '\n\nHas solution vector:\n');
for I = 1:N
fprintf(OUP, ' %12.8f', X(I));
end;
fprintf (OUP, '\n\nwith %d row interchange(s)\n', ICHG);
fprintf(OUP, '\nThe rows have been logically re-ordered to:\n');
for I = 1:N
______________________________________________________________________
47 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Algoritmo 7. Método de Gauss con sustitución hacia atrás y búsqueda de pivote máximo en la columna
Limitaciones
Ejercicios
Implemetar el algoritmo anterior con sustitución hacia delante.
______________________________________________________________________
48 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
de la fila. Si si = 0 para algún i , por los teoremas 6.11 y 6.12 vistos en Burden, se sabe
que el sistema no tiene solución única y el procedimiento se detiene. El intercambio de
fila apropiado para obtener ceros en la primera columna ( E1 ←⎯→ Ek ) se determina
ak 1 a
eligiendo el primer entero k que verifica = max j 1 . El efecto del escalado es
sk j =1,…,n s
j
para asegurar que el elemento mayor en cada fila tiene una magnitud relativa unidad
antes de la comparación para el intercambio entre filas. Además, al principio del paso de
eliminación gaussiana, el algoritmo selecciona el pivote que tiene el valor mayor
relativo al “tamaño” de la fila, lo que garantiza que sea a estrategia correcta.
Algoritmo [Burden y Faires, 1985]: Método de Gauss con sustitución hacia atrás y
búsqueda pivote de columna escalada
Input n, aij , bi
For i = 1 to i = n
si = max aij
1≤ j ≤n
End
If si = 0 then (no existe solución única) End
// Proceso de eliminación gaussiana
For i = 1 to i = n − 1
a pi a ji
Find el menor p with i ≤ p ≤ n and = max
sp i ≤ j ≤n s
j
______________________________________________________________________
49 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
For i = 1 to i = n
⎛ n ⎞
x i ← ⎜⎜bi − ∑ aij x j ⎟⎟⎟ / aii
⎜
⎜⎝ j =i +1
⎟⎠
End
Output x i
Break
Los si representan el “tamaño” de la fila, definido como si = max aij
1≤ j ≤n
______________________________________________________________________
50 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
51 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
NROW(IMAX) = NCOPY;
end;
% STEP 6
I1 = NROW(I);
for J = JJ : N
J1 = NROW(J);
% STEP 7
XM = A(J1,I)/A(I1,I);
% STEP 8
for K = JJ : M
A(J1,K) = A(J1,K)-XM*A(I1,K);
end;
% Multiplier XM could be saved in A(J1,I)
A(J1,I) = 0;
end;
end;
I = I+1;
end;
if OK == TRUE
% STEP 9
N1 = NROW(N);
if abs(A(N1,N)) <= 1.0e-20
OK = FALSE;
% system has no unique solution
else
% STEP 10
% start backward substitution
X(N) = A(N1,M)/A(N1,N);
% STEP 11
for K = 1 : NN
I = NN-K+1;
JJ = I+1;
N2 = NROW(I);
SUM = 0;
for KK = JJ : N
SUM = SUM-A(N2,KK)*X(KK);
end;
X(I) = (A(N2,M)+SUM)/A(N2,I);
end;
% STEP 12
% procedure completed successfully
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text file\n');
fprintf(1,'Please enter 1 or 2\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'For example A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'GAUSSIAN ELIMINATION WITH SCALED PARTIAL
PIVOTING\n\n');
fprintf(OUP, 'The reduced system - output by rows:\n');
for I = 1 : N
for J = 1 : M
fprintf(OUP, ' %11.8f', A(I,J));
end;
______________________________________________________________________
52 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
fprintf(OUP,'\n');
end;
fprintf(OUP, '\n\nHas solution vector:\n');
for I = 1 : N
fprintf(OUP, ' %11.8f', X(I));
end;
fprintf(OUP, '\nwith %3d row interchange(s)\n', ICHG) ;
fprintf(OUP, '\nThe rows have been logically re-ordered to:\n');
for I = 1 : N
fprintf(OUP, ' %2d', NROW(I));
end;
fprintf(OUP, '\n');
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created successfully \n',NAME);
end;
end;
end;
if OK == FALSE
fprintf(1,'System has no unique solution\n');
end;
end;
Algoritmo 8. Método de Gauss con sustitución hacia atrás y búsqueda pivote de columna escalada
3
∑ = 2n(n − 1)
comp .
n(n + 1)
∑=
÷ 2
−1
Puede ocurrir que el sistema sea especialmente rebelde, de tal forma que se requiera
calcular los factores de escala dada vez que se realiza un intercambio de filas. En este
caso, lo recomendable es emplear el pivotaje máximo o completo, que sólo requiere el
siguiente número de compraciones
n(n − 1)(2n + 5)
∑= 6
.
comp .
Nótese que calcular los si cada vez que se realiza un intercambio de filas graba
considerablemente el algoritmo ( ∼ n 3 / 6 ).
______________________________________________________________________
53 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Factorización de Matrices
Supóngase que A ∈ M 4 ( ) puede factorizarse en el producto dos matrices triangulares:
una inferior, L = (lij )n×n , y otra superior, U = (uij )n×n , ambas L,U ∈ M n ( ) . Si es así,
diremos que A tiene una descomposición o factorización LU . No obstante, hay que
decir que no toda matriz puede descomponerse de esta forma. Véanse los teoremas
dados en el apartado de fundamentos. Entonces, para resolver el sistema
Ax = LUx = b , donde x , b, y ∈ M n×1( ) , es posible resolverlo en dos pasos
1. Ly = b para y , por el (v.gr.) método de Gauss con sustitución hacia delante
2. Ux = y para x , por el (v.gr) método de Gauss con sustitución hacia atrás
Los análisis previos realizados en la sección anterior indican que resolver sistemas
triangulares es sencillo. Para determinar sus coeficientes emplearemos la igualdad
A = LU , desarrollando el producto de ambas matrices. Puesto que A tiene 16
coeficientes y la suma de coeficientes incógnita de las matrices L y U son 20, se
requieren 4 condiciones adicionales. Por ejemplo, se puede considerar que lii = 1
(método de Doolittle) o uii = 1 (método de Crout) o uii = lii (método de Choleski),
para todo 1 ≤ i ≤ n .
______________________________________________________________________
54 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
l21u11 = 2 → l21 = 1/ 3
l 31 = 1/ 3 (1.24)
l 41 = −1/ 6.
Repitiendo el mismo proceso anterior pero con las segundas filas y columnas, en este
orden, de L se llega a
l21u12 + l22u22 = 4 → u22 = 10 / 3
u23 = 2 / 3 (1.25)
u24 = 1/ 3
y
l 31u12 + l 32u22 = 1 → l 32 = 1/ 5
(1.26)
l 42 = 1/10,
______________________________________________________________________
55 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Si lqq ≠ 0 la ecuación (1.30) puede ser usada para obtener los elementos uqj . Del forma
similar, si los coeficientes uqq ≠ 0 , a partir de ellos puede determinarse mediante la
ecuación (1.31) los elementos liq . Esta condición es porque el método implica
divisiones por lqq y uqq , por lo que si son nulos el cálculo no podrá completarse
(excepto en casos muy concretos en los que de algún modo se elimine esa posible
divergencia).
Nótese que en la práctica, para asegurarnos de que una matriz A ∈ M n ( ) admite una
descomposición LU unívoca, basta con comprobar que es definida positiva o que es
diagonalmente dominante. En caso de no serlo (es condición suficiente) no podemos
asegurar si tiene o no tiene descomposición.
______________________________________________________________________
56 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Método de Doolittle
______________________________________________________________________
57 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
FALSE = 0;
fprintf(1,'This is the general LU factorization method.\n');
fprintf(1,'The array will be input from a text file in the
order:\n');
fprintf(1,'A(1,1), A(1,2), ..., A(1,N), \n')
fprintf(1,'A(2,1), A(2,2), ..., A(2,N),\n');
fprintf(1,'..., A(N,1), A(N,2), ..., A(N,N)\n\n');
fprintf(1,'Place as many entries as desired on each line, but
separate\n');
fprintf(1,'entries with\n');
fprintf(1,'at least one blank.\n\n\n');
fprintf(1,'Has the input file been created? - enter Y or N.\n');
AA = input(' ','s');
if AA == 'Y' | AA == 'y'
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example: A:\\DATA.DTA\n');
NAME = input(' ','s');
INP = fopen(NAME,'rt');
OK = FALSE;
while OK == FALSE
fprintf(1,'Input the dimension n - an integer.\n');
N = input(' ');
if N > 0
A = zeros(N,N);
XL = zeros(1,N);
for I = 1 : N
for J = 1 : N
A(I,J) = fscanf(INP, '%f',1);
end;
end;
OK = TRUE;
fclose(INP);
else fprintf(1,'The number must be a positive integer.\n');
end;
end;
fprintf(1,'Choice of diagonals:\n');
fprintf(1,'1. Diagonal of L consists of ones\n');
fprintf(1,'2. Diagonal of U consists of ones\n');
fprintf(1,'Please enter 1 or 2.\n');
FLAG = input(' ');
if FLAG == 1
ISW = 0;
else
ISW = 1;
end
else
fprintf(1,'The program will end so the input file can be
created.\n');
OK = FALSE;
end;
if OK == TRUE
for I = 1 : N
XL(I) = 1;
end;
% STEP 1
if abs(A(1,1)) <= 1.0e-20
OK = FALSE;
else
% the entries of L below the main diagonal will be placed
% in the corresponding entries of A; the entries of U
% above the main diagonal will be placed in the
______________________________________________________________________
58 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
59 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
S = S-A(N,K)*A(K,N);
end;
A(N,N) = (A(N,N)+S)/XL(N);
% If A(N,N) = 0 then A = LU but the matrix is singular.
% Process is complete, all entries of A have been determined.
% STEP 7
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text file\n');
fprintf(1,'Please enter 1 or 2\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'For example A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'GENERAL LU FACTORIZATION\n\n');
if ISW == 0
fprintf(OUP, 'The diagonal of L consists of all entries = 1.0\n');
else
fprintf(OUP, 'The diagonal of U consists of all entries = 1.0\n');
end;
fprintf(OUP, '\nEntries of L below/on diagonal and entries of U
above');
fprintf(OUP, '/on diagonal\n');
fprintf(OUP, '- output by rows in overwrite format:\n');
for I = 1 : N
for J = 1 : N
fprintf(OUP, ' %11.8f', A(I,J));
end;
fprintf(OUP, '\n');
end;
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created successfully \n',NAME);
end;
end;
end;
if OK == FALSE
fprintf(1,'The matrix does not have an LU factorization.\n');
end;
end;
Método de Crout
______________________________________________________________________
60 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Input n, aij
For k = 1 to k = n
ukk ← 1
For i = k to i = n
⎛ k −1 ⎞
lik ← ⎜⎜aik − ∑ lis usk ⎟⎟⎟ / ukk
⎝⎜ s =1 ⎠
End
For j = k + 1 to j = n
⎛ k −1 ⎞
ukj ← ⎜akj − ∑ lks usj ⎟⎟ / lkk
⎜
⎜⎝ s =1
⎟⎠
End
End
Output lij , uij
Break
Es importante añadir al inicio del programa los chequeos necesarios, proporcionados
por los teoremas anteriores, a fin de que esté garantizada la existencia y unicidad de la
descomposición LU . Por ejemplo, se puede comprobar que la matriz A es definida
positiva.
______________________________________________________________________
61 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
______________________________________________________________________
62 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Z(N) = (BB(N)-B(N)*Z(N-1))/A(N);
% STEP 4
% STEPS 4, 5 solve UX = Z
X(N) = Z(N);
% STEP 5
for II = 1 : NN
I = NN-II+1;
X(I) = Z(I)-C(I)*X(I+1);
end;
% STEP 6
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text file\n');
fprintf(1,'Please enter 1 or 2.\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example: A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
else
OUP = 1;
end;
fprintf(OUP, 'CROUT METHOD FOR TRIDIAGONAL LINEAR SYSTEMS\n\n');
fprintf(OUP, 'The solution is\n');
for I = 1 : N
fprintf(OUP, ' %12.8f', X(I));
end;
fprintf(OUP, '\n');
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created successfully \n',NAME);
end;
end;
Método de Choleski
______________________________________________________________________
63 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
⎛ k −1 ⎞
lij ← ⎜aik − ∑ lis uks ⎟⎟ / lkk
⎜
⎜⎝ s =1 ⎠⎟
End
End
Output lij
Break
U = LT , luego las entradas verifican uij = l ji
______________________________________________________________________
64 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
A = zeros(N,N);
for I = 1 : N
for J = 1 : N
A(I,J) = fscanf(INP, '%f',1);
end;
end;
OK = TRUE;
fclose(INP);
else fprintf(1,'The number must be a positive integer.\n');
end;
end;
else
fprintf(1,'The program will end so the input file can be
created.\n');
OK = FALSE;
end;
if OK == TRUE
% STEP 1
A(1,1) = sqrt(A(1,1));
% STEP 2
for J = 2 : N
A(J,1) = A(J,1)/A(1,1);
end;
% STEP 3
NN = N-1;
for I = 2 : NN
% STEP 4
KK = I-1;
S = 0;
for K = 1 : KK
S = S-A(I,K)*A(I,K);
end;
A(I,I) = sqrt(A(I,I)+S);
% STEP 5
JJ = I+1;
for J = JJ : N
S = 0;
KK = I-1;
for K = 1 : KK
S = S - A(J,K)*A(I,K);
end;
A(J,I) = (A(J,I)+S)/A(I,I);
end;
end;
% STEP 6
S = 0;
for K = 1 : NN
S = S-A(N,K)*A(N,K);
end;
A(N,N) = sqrt(A(N,N)+S);
% STEP 7
fprintf(1,'Choice of output method:\n');
fprintf(1,'1. Output to screen\n');
fprintf(1,'2. Output to text file\n');
fprintf(1,'Please enter 1 or 2.\n');
FLAG = input(' ');
if FLAG == 2
fprintf(1,'Input the file name in the form - drive:\\name.ext\n');
fprintf(1,'for example: A:\\OUTPUT.DTA\n');
NAME = input(' ','s');
OUP = fopen(NAME,'wt');
______________________________________________________________________
65 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
else
OUP = 1;
end;
fprintf(OUP, 'CHOLESKI FACTORIZATION\n\n');
fprintf(OUP, 'The matrix L output by rows:\n');
for I = 1 : N
for J = 1 : I
fprintf(OUP, ' %12.8f', A(I,J));
end;
fprintf(OUP, '\n');
end;
if OUP ~= 1
fclose(OUP);
fprintf(1,'Output file %s created successfully \n',NAME);
end;
end;
n 3 + 9n 2 + 2n
∑=
×÷ 6
n 3 + 6n 2 − 7n
∑=
+− 2
∑= n
Ejercicios
Completar los algoritmos de Crout y Doolittle hasta resolver completamente un SELs
genérico, sígase lo indicado al principio de esta sección (pag. 345 Burden).
______________________________________________________________________
66 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Gauss (1) 3 6
Cálculo de A−1 con 3n 3 − n 3n 3 − 4n 2 + n
Gauss-Jordan (1) 2 2
Cramer n + (n − 1)(n + 1)! (n + 1)(n !− 1)
Givens (2) ∼ 2n 3
Householder (2) 4n 3
∼
3
3 2
Choleski (3) n + 9n + 2n n 3 + 6n 2 − 7n
+n
6 2
Crout (2) 2n 3
∼
3
Doolittle (2) 2n 3
∼
3
Tabla 1. Órdenes de los algoritmos.
______________________________________________________________________
67 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
3
1. Añaden n(n − 1) comparaciones y ¡Error! No se pueden crear objetos modificando
2
códigos de campo. divisiones por pivotaje de columna escalada.
2. Muestran el total de operaciones, no desglosado.
3. El segundo sumando en Productos/Divisiones es el número de raices cuadradas.
______________________________________________________________________
68 Manuel Díez Minguito
Análisis Numérico: Matrices y Métodos directos de resolución de SEL
Bibliografía
Burden, R.L. and Faires, J.D., 1985. Numerical Analysis. PWS-Kent Publishing
Company, Boston, EE. UU.
Conte, S.D. and Boor, C.d., 1980. Elementary Numerical Analysis: An algorithmic
approach. International Series in Pure and Applied Mathematics. McGraw-Hill,
Nueva York, EE. UU.
Gerald, C.F. and Wheatley, P.O., 2000. Análisis Numérico con Aplicaciones. Pearson
Educación, México D.F.
Kincaid, D. and Cheney, W., 1990. Numerical Analysis. Brooks/Cole Publishing,
Pacific Grove, California, EE. UU.
Lang, S., 1987. Linear Algebra. Undergraduate Texts in Mathematics. Springer, Nueva
York, EE.UU. .
Molina, J.J.Q., 1996. Ecuaciones Diferenciales, Análisis Numérico y Métodos
Matemáticos. Editorial Santa Rita, Granada.
O'Connor, J.L.F., 1993. Tecnicas de Cálculo para Sistemas de Ecuaciones,
Programación Lineal y Programación Entera, Madrid, España.
Ruiz, A., El problema del tapón salino II.
______________________________________________________________________
69 Manuel Díez Minguito