Beruflich Dokumente
Kultur Dokumente
x1 b1
x2 b2
x3 b
𝐱= ⋮ 𝐛= 3
⋮
⋮ ⋮
[xn ] [b n ]
Existen dos tipos de métodos para resolver el problema Ax = b; los exactos y los iterativos.
Los primeros son llamados exactos porque, en ausencia de errores de redondeo, obtienen la
solución analítica o exacta y están basados en la eliminación de Gauss o en la factorización
LU. Los métodos del segundo tipo encuentran una solución aproximada mediante procesos
iterativos.
Para sistemas con matrices de coeficientes densas y relativamente pequeñas, se prefieren
los métodos exactos. En el caso de sistemas con matrices de coeficientes de orden grande y
poco densas, son recomendados los métodos iterativos. Una matriz densa es aquella que
contiene pocos elementos iguales a cero, y por lo contrario, la mayoría de los elementos en
una matriz poco densa o dispersa son ceros.
1
Es un proceso que convierte a la matriz de coeficientes A de n x n en una matriz triangular
superior mediante la aplicación sistemática de transformaciones elementales de renglón.
Una vez obtenida la matriz triangular superior se aplica un procedimiento conocido como
sustitución hacia atrás para obtener el vector solución x.
Las transformaciones elementales de renglón son:
1.- La fila i de una matriz puede ser multiplicada por un constante ≠ 0
Ri → Ri
2.- A la fila j de un matriz le puede ser sumada otra fila i de la misma matriz multiplicada
por una constante
Ri + Rj → Rj
Ri Rj
Ejemplo
Resolver el sistema
x1 – x2 + x3 = – 4
5x1 – 4x2 + 3x3 = –12
2x1 + x2 + x3 = 11
con eliminación de Gauss y sustitución hacia atrás. Use una estrategia de pivoteo natural.
En primer lugar, se forma una matriz agregando una columna a la matriz de coeficientes.
La columna añadida es el vector de términos del lado derecho y la matriz así formada se
conoce como matriz aumentada del sistema:
2
5.00000 y a31 / a11 = 2.00000 / 1.00000 = 2.00000. Las transformaciones de renglón
requeridas para tal efecto son
-5.00000R1 + R2 → R2
-2.00000R1 + R3 → R3
-3.00000R2 + R3 → R3
Con estos dos pasos termina la eliminación de Gauss y la parte correspondiente a la matriz
de coeficientes es una matriz triangular superior. La última matriz aumentada define un
sistema cuya solución es equivalente a la del sistema original:
Este proceso es la sustitución hacia atrás, conocido así porque se obtienen los valores de las
incógnitas comenzando con la última xn y terminando con la primera x1. Las siguientes
fórmulas describen la sustitución hacia atrás y en ellas la letra a denota a los elementos de
la matriz aumentada después de la eliminación de Gauss:
an,n+1
xn =
an,n
3
ai,n+1 − ∑nj=i+1 ai,j xj
xi = para i = n − 1, n − 2, … ,1
ai,i
El último ejercicio muestra que para poder calcular los multiplicadores en cada paso de
eliminación, el pivote necesariamente debe ser distinto de cero. Por lo tanto, si en el i-ésimo
paso de eliminación aii es cero, se debe intercambiar la fila i con alguna otra colocada
debajo de ella de tal forma que se lleve a la posición del pivote un número distinto de cero.
Si no es posible colocar un pivote diferente de cero, entonces el sistema lineal no tiene
solución única. Otra posible situación en la cual no existe solución única es aquella en la
cual después del último paso de eliminación el elemento ann es igual a cero.
Con eliminación de Gauss también es factible calcular el determinante de la matriz de
coeficientes del sistema lineal:
n
aquí ncf es el número de cambios de filas efectuados en la eliminación y aii representa los
elementos de la diagonal principal de la matriz triangular superior resultado de la
eliminación. Por lo tanto, el determinante de la matriz de coeficientes del último ejemplo
es:
Es posible contar el número de operaciones necesarias para resolver un sistema lineal con
eliminación de Gauss y sustitución hacia atrás:
Multiplicaciones o divisiones: n3 / 3 + n2 – n / 3
Sumas o restas: n3 / 3 + n2 / 2 - 5n / 6
En este caso se dice el número de operaciones es de “orden n3”, y se indica con la notación
O(n3). La conclusión es: la eliminación gaussiana con sustitución hacia atrás es un proceso
muy costoso en términos de operaciones aritméticas ya que el número de operaciones
aritméticas es proporcional a n3.
A continuación, un pseudocódigo de un procedimiento que resuelve el sistema Ax = b con
eliminación gaussiana y sustitución hacia atrás. Pivoteo natural es empleado.
4
// gaussiana y sustitución hacia atrás. Se emplea una estrategia de pivoteo natural.
// Descripción de parámetros:
// n Número de ecuaciones y de incógnitas.
// A Matriz aumentada del sistema, de n filas y n+1 columnas.
// x Si en solucion_unica se devuelve el valor true, entonces x
// es la solución única. De n elementos.
// solucion_unica Bandera que indica la existencia de una solución única:
// solucion_unica = true el sistema tiene solución única
// solucion_unica = false la matriz de coeficientes es singular
// y no hay solución única.
//
cero ← 1X10-12 // si |valor| < cero, se considera a valor como si fuera 0
// Eliminación de Gauss con pivoteo natural
for i = 1 to n – 1 do
solucion_unica ← false
for p = i to n do // selección del pivote
if |Api| ≥ cero then
solucion_unica ← true
exit
end if
end for
if not solucion_unica then
return
end if
if p ≠ i then // intercambio de las filas p e i, en caso necesario
for k = 1 to n+1 do
auxiliar ← Apk
Apk ← Aik
Aik ← auxiliar
end for
end if
for j = i +1 to n do // colocación de ceros debajo del pivote
multiplicador ← Aji / Aii
for k = i to n + 1 do
Ajk ← Ajk – multiplicador*Aik
end for
end for
end for
if |Ann| < cero then
solucion_unica ← false
return
end if
// sustitución hacia atrás
xn ← An,n+1 / Ann
for i = n -1 to 1 step -1 do
suma ← 0.0
for j = i + 1 to n do
5
suma ← suma + Aij*xj
end for
xi ← (Ai,n+1 – suma) / Aii
end for
return
end procedure eliminación_Gauss
Ejemplo
Resuelva el sistema
x1 + 3x2 – 2x3 = 7
4x1 – x2 + 3x3 = 10
–5x1 + 2x2 + 3x3 = 7
6
R1 R3
−5.00000 2.00000 3.00000 7.00000
[ 4.00000 −1.00000 3.00000 10.00000]
1.00000 3.00000 −2.00000 7.00000
– (4.00000 / (–5.00000))R1 + R2 → R2
– (1.00000 / (–5.00000))R1 + R3 → R3
La matriz aumentada queda al final de este primer paso de eliminación de esta manera:
R2 R3
– (0.60000 / 3.40000) R2 + R3 → R3
Entonces la matriz aumentada al final queda así:
7
boolean solucion_unica
real cero, auxiliar, multiplicador, suma
//
// Este procedimiento resuelve un sistema lineal de ecuaciones con eliminación
// gaussiana y sustitución hacia atrás. Se emplea una estrategia de pivoteo máximo
// de columna.
// Descripción de parámetros:
// n Número de ecuaciones y de incógnitas.
// A Matriz aumentada del sistema, de n filas y n+1 columnas.
// x Si en solucion_unica se devuelve el valor true, entonces x
// es la solución única. De n elementos.
// solucion_unica Bandera que indica la existencia de una solución única:
// solucion_unica = true el sistema tiene solución única
// solucion_unica = false la matriz de coeficientes es singular
// y no hay solución única.
//
cero ← 1X10-12 // si |valor| < cero, se considera a valor como si fuera 0
// Eliminación de Gauss con pivoteo máximo de columna
solucion_unica ← false
for i = 1 to n – 1 do
p←i
for j = i + 1 to n do // selección del pivote
if |Aji| > |Api| then
p←j
end if
end for
if |Api| < cero then
return
end if
if p ≠ i then // intercambio de las filas p e i, en caso necesario
for k = 1 to n+1 do
auxiliar ← Apk
Apk ← Aik
Aik ← auxiliar
end for
end if
for j = i +1 to n do // colocación de ceros debajo del pivote
multiplicador ← Aji / Aii
for k = i to n + 1 do
Ajk ← Ajk – multiplicador*Aik
end for
end for
end for
if |Ann| < cero then
return
end if
solucion_unica ← true
8
// sustitución hacia atrás
xn ← An,n+1 / Ann
for i = n -1 to 1 step -1 do
suma ←0.0
for j = i + 1 to n do
suma ← suma + Aij*xj
end for
xi ← (Ai,n+1 – suma) / Aii
end for
return
end procedure eliminación_Gauss_pm
3.3 Descomposición LU
A = LU
Para poder realizar la descomposición es necesario asignar valores arbitrarios a una de las
diagonales, ya sea la de L o la de U. Si los elementos de la diagonal principal de U se hacen
iguales a uno, se trata de la descomposición de Crout, como es el caso mostrado arriba. Si
los elementos de la diagonal principal de L se toman iguales a uno, entonces es la
descomposición de Doolittle.
Para determinar a las matrices L y U se usa el concepto de multiplicación de matrices:
9
l11 u14 = a14 y por lo tanto u14 = a14 / l11
Multiplicación de los renglones de L por la segunda columna de U:
Para k = 2,3, … , n − 1
10
k−1
Ejemplo
Resolver el sistema
3x1 – x2 + 2x3 = 12
x1 + 2x2 + 3x3 = 11
2x1 – 2x2 – x3 = 2
11
3 −1 2 3.00000 0 0 1 −0.33333 0.66667
[1 2 3 ] = [1.00000 2.33333 0 ] [0 1 1.00000]
2 −2 −1 2.00000 −1.33333 −1.00000 0 0 1
Lz = b es el sistema:
3.00000z1 = 12.00000
1.00000z1 + 2.33333z2 = 11.00000
2.00000z1 – 1.33333z1 –1.00000z3 = 2.00000
el cual se resuelve con sustitución hacia adelante. Este algoritmo es llamado así porque la
primera incógnita que se determina es z1 y la última zn.
La sustitución hacia adelante que permite resolver a Lz = b se puede resumir con las
fórmulas:
b1
z1 =
l11
bi − ∑i−1
j=1 lij zj
zi = , i = 2,3, … , n
lii
12
zi − ∑nj=i+1 uij xj
xi = , i = n − 1, n − 2, … ,1
uii
13
for i = 1 to n do
Uii ← 1.0 // se asigna 1 a todos los elementos de la diagonal principal de U
end for
exito ← false
distinto_cero ← false
for i = 1 to n do // búsqueda de un L11 diferente de cero
if |Ai1| ≥ cero then
distinto_cero ← true
break
end if
end for
if not distinto_cero then
return
end if
if i ≠ 1 then
for j = 1 to n do
auxiliar ← A1j // intercambio de las filas 1 e i
A1j ← Aij
Aij ← auxiliar
end for
auxiliari ← info_cambiosf1
info_cambiosf1 ← info_cambiosfi
info_cambiosfi ← auxiliari
end if
for i = 1 to n do // cálculo de la primera columna de L
Li1 ← Ai1
end for
for j = 2 to n do // cálculo de los elementos restantes de la primera fila de U
U1j ← A1j / L11
end for
for k = 2 to n – 1 do
for p = k to n do // búsqueda de un Lii distinto de cero
distinto_cero ← false
suma ← 0.0
for j = 1 to k -1 do
suma ← suma + Lpj*Ujk
end for
auxiliar ← Apk – suma
if |auxiliar| ≥ cero then
distinto_cero ← true
break
end if
end for
if not distinto_cero then
return
end if
if p ≠ k then
14
for j = 1 to n do // intercambio de las filas k y p en A
auxiliar ← Akj
Akj ← Apj
Apj ← auxiliar
end for
for j = 1 to k -1 do // intercambio de las filas k y p en L
auxiliar ← Lkj
Lkj ← Lpj
Lpj ←auxiliar
end for
auxiliari ← info_cambiosfk // intercambio de los elementos con índices
info_cambiosfk ← info_cambiosfp // k y p en info_cambiosf
info_cambiosfp ← auxiliari
end if
for i = k to n do
suma ← 0.0
for j = 1 to k – 1 do // cálculo de la columna k de L
suma ← suma +Lij*Ujk
end for
Lik ← Aik – suma
end for
for i = k + 1 to n do // cálculo de los elementos restantes de la fila k de U
suma ← 0.0
for j = 1 to k -1 do
suma ← suma + Lkj*Uji
end for
Uki ← (Aki – suma) / Lkk
end for
end for
suma ← 0.0
for j = 1 to n – 1 do // cálculo del último elemento de la diagonal principal de L
suma ← suma + Lnj*Ujn
end for
Lnn ← Ann – suma
if |Lnn| < cero then
return
end if
exito ← true
return
end procedure LU
16
aquí ncf es el número de cambios de filas efectuados en la descomposición y lii representa
los elementos de la diagonal principal de la última matriz triangular inferior L.
La matriz inversa, A-1, de una matriz A de n filas y n columnas se puede calcular mediante
la solución de n sistemas lineales, ya que la i-ésima columna de la matriz inversa es la
solución del sistema Ax = ei, en el cual el vector columna ei es la i-ésima columna de la
matriz identidad I. Como los n sistemas lineales comparten la misma matriz de coeficientes
A, es conveniente descomponer A como el producto LU y emplear a L y U en la solución
de todos los sistemas.
Es factible implementar un pivoteo máximo de columna en la descomposición de Crout. En
este caso, se busca colocar en la posición lii al elemento de mayor valor absoluto entre los
colocados en y debajo de la diagonal principal de L. El intercambio de filas deberá afectar
solamente a la parte triangular inferior de L y también deberá ser aplicado a la matriz A y al
vector b.
Ejemplo
Resolver el sistema
x1 – x2 + 3x3 = –3
–x1 – 2x3 = 1
2x1 + 2x2 + 4x3 = 0
Entre los elementos de la segunda columna de L, el de mayor valor absoluto es l32, lo que
implica cambiar las filas 2 y 3 (R2 R3) en A, L y b:
2.00000z1 = 0.00000
1.00000z1 – 2.00000z2 = –3.00000
–1.00000z1 + 1.00000z2 + 0.50000z3 = 1.00000
18
integer n, i, j, k, p, q, auxiliari
real array (Aij)1:n x 1:n, (Lij)1:n x 1:n, (Uij)1:n x 1:n
integer array (info_cambiosfi)1:n
boolean exito
//
// Factorización A = LU mediante reducción de Crout con pivoteo máximo de columna.
// Descripción de parámetros:
// n Orden de las matrices cuadradas A, L y U.
// A Matriz por factorizar. Como resultado de la factorización, en el
// regreso, A puede tener algunas filas intercambiadas.
// L Matriz triangular inferior.
// U Matriz triangular superior.
// info_cambiosf Vector que contiene información sobre los cambios de filas
// efectuados durante la factorización.
// exito Bandera cuyo valor indica el tipo de situación detectada durante
// el proceso:
// exito = true factorización exitosa, A = LU
// exito = false no fue posible la factorización o A es singular.
//
real cero, auxiliar, suma
cero ← 1X10-12 // si |valor| < cero, se considera a valor como si fuera 0
for i = 1 to n do
info_cambiosfi ← i // cuando info_cambiosi = i, no se ha intercambiado la fila i
end for
for i = 1 to n do
Uii ← 1.0 // se asigna 1 a todos los elementos de la diagonal principal de U
end for
exito ← false
p←1
for i = 2 to n do // búsqueda del L11 con el máximo valor absoluto
if |Ai1| > |Ap1| then
p←i
end if
end for
if |Ap1| < cero then
return
end if
if p ≠ 1 then
for j = 1 to n do
auxiliar ← A1j // intercambio de las filas 1 e i
A1j ← Aij
Aij ← auxiliar
end for
auxiliari ← info_cambiosf1
info_cambiosf1 ← info_cambiosfi
info_cambiosfi ← auxiliari
end if
19
for i = 1 to n do // cálculo de la primera columna de L
Li1 ← Ai1
end for
for j = 2 to n do // cálculo de los elementos restantes de la primera fila de U
U1j ← A1j / L11
end for
for k = 2 to n – 1 do
for i = k to n do
suma ← 0.0
for j = 1 to k – 1 do
suma ← suma + Lij*Ujk
end for
Lik ← Aik – suma // cálculo de la columna k de L
end for
p←k
for i = k +1 to n do // pivoteo parcial
if |Lik| > |Lpk| then
p←i
end for
end for
if |Lpk| < cero then
return
end if
if p ≠ k then
for j = 1 to n do // intercambio de las filas k y p en A
auxiliar ← Akj
Akj ← Apj
Apj ← auxiliar
end for
for j = 1 to k do // intercambio de las filas k y p en L
auxiliar ← Lkj
Lkj ← Lpj
Lpj ←auxiliar
end for
auxiliari ← info_cambiosfk // intercambio de los elementos con índices
info_cambiosfk ← info_cambiosfp // k y p en info_cambiosf
info_cambiosfp ← auxiliari
end if
for i = k + 1 to n do // cálculo de los elementos restantes de la fila k de U
suma ← 0.0
for j = 1 to k -1 do
suma ← suma + Lkj*Uji
end for
Uki ← (Aki – suma) / Lkk
end for
end for
suma ← 0.0
20
for j = 1 to n – 1 do // cálculo del último elemento de la diagonal principal de L
suma ← suma + Lnj*Ujn
end for
Lnn ← Ann – suma
if |Lnn| < cero then
return
end if
exito ← true
return
end procedure LU_pm
a11 a12
a21 a22 a23
a32 a33 a34
𝐀= ⋱ ⋱ ⋱
⋱ ⋱ ⋱
an−1,n−2 an−1,n−1 an−1,n
[ an,n−1 an,n ]
l11 1 u12
l21 l22 1 u23
l32 l33 1 u34
𝐋= 𝐔=
⋱ ⋱ ⋱ ⋱
⋱ ⋱ ⋱ un−1,n
[ ln,n−1 ln,n ] [ 1 ]
l11 = a11
21
u12 = a12 / l11
li,i-1 = ai,i-1 para i = 2,3, ..., n
Ejemplo
Resuelva el sistema
0.50000 0 0 0
0.35000 0.62500 0 0
𝐋=[ ]
0 0.25000 0.84000 0
0 0 1.00000 −2.59524
22
1.00000 0.50000 0 0
0 1.00000 0.64000 0
𝐔=[ ]
0 0 1.00000 0.59524
0 0 0 1.00000
0.50000z1 = 0.35000
0.35000z1 + 0.62500z2 = 0.77000
0.25000z2 + 0.84000z3 = –0.50000
1.00000z3 – 2.59524z4 = –2.25000
b1 x1 + c1 x2 = d1
a2 x1 + b2 x2 + c2 x3 = d2
a3 x2 + b3 x3 + c3 x4 = d3
. . . = .
. . . = .
an-1 xn-2 + bn-1 xn-1 + cn-1 xn = dn-1
an xn-1 + bn xn = dn
r1 1 w1
v2 r2 1 w2
v3 r3 1 w3
𝐋= 𝐔=
⋱ ⋱ ⋱ ⋱
⋱ ⋱ ⋱ wn−1
[ vn rn ] [ 1 ]
23
La reducción de Crout con las sustituciones hacia adelante y hacia atrás, en términos de los
vectores a, b, c, d, r, v y w, queda como:
r1 = b1
w1 = c1 / r1
Para i = 2, 3, ..., n – 1
┌
│ vi = ai
│
│ ri = bi – vi wi-1
│
│ wi = ci / ri
└
vn = an
rn = bn - vn wn-1
z1 = d1 / r1
zi = (di - vi zi-1) / ri para i = 2, 3, ..., n
x n = zn
xi = zi - wi xi+1 para i = n - 1, n -2, ...,1
24
w1 ← c1 / r1
for i = 2 to n -1 do
vi ← ai
ri ← bi - vi*wi-1 // i-ésima fila de L
wi ← ci / ri // (i+1)-ésima columna de U
end for
vn ← an // n-ésima fila de L
rn ← bn – vn*wn-1
//
// solución de Lz = b
//
z1 ← d1 / r1
for i = 2 to n do
zi ← (di – vi*zi-1) / ri
end for
//
// solución de Ux = z
//
xn ← zn
for i = n – 1 to 1 step -1 do
xi ← zi – wi*xi+1
end for
return
end procedure tridiagonal
Entonces se parte de una estimación inicial de la solución, x(0), la cual se sustituye en las
últimas ecuaciones para producir un nueva estimación, x(1) :
El vector x(1) se sustituye en esas mismas ecuaciones para obtener ahora a x(2). Este
procedimiento se repite entonces para calcular las estimaciones x(3), x(4), x(5), .... . Lo
anterior se puede generalizar mediante las ecuaciones:
n (k)
bi − ∑j=1 aij xj
(k+1) j≠i
xi = , i = 1,2,3, … , n
aii
26
1.- ǁx(k+1) – x(k)ǁ <
La tolerancia es fijada antes de iniciar los cálculos. En ambos criterios, ǁvǁ, define la
norma de un vector v. La norma de un vector se calcula con cualquiera de estas dos
definiciones:
ǁvǁ2 = (v12+v22+v32+…+vn2)1/2
Ejemplo
Encuentre una solución aproximada del sistema
5x1 – x3 + x5 = 4
7x2 + 2x4 = 20
4x3 + x5 = –6
2x2 + 3x4 = 13
2x3 + 5x5 = –12
con el método de Jacobi. Inicie con x(0) = [0, 0, 0, 0, 0]T y tome a ǁx(k+1) – x(k)ǁ2 < 1X10-4
como criterio de convergencia.
27
x2(1) = (20.00000 – 2.00000*0.00000) / 7.00000 = 2.85714
x3(1) = (–6.00000 – 1.00000x5(0)) / 4.00000
x3(1) = (–6.00000 – 1.00000*0.00000) / 4.00000 = –1.50000
x4(1) = (13.00000 – 2.00000x2(0)) / 3.00000
x4(1) = (13.00000 – 2.00000*0.00000) / 3.00000 = 4.33333
x5(1) = (–12.00000 – 2.00000x3(0)) / 5.00000
x5(1) = (–12.00000 – 2.00000*0.00000) / 5.00000 = –2.40000
Con x(1) = [0.80000, 2.85714, –1.50000, 4.33333, 2.40000]T se checa la convergencia del
método:
Como la distancia entre las dos últimas iteraciones, ǁx(1) – x(0)ǁ2, no es menor que 1X10-4,
será necesario calcular al menos una iteración más.
28
11 1.00000 2.00021 –1.00001 3.00033 –2.00000 0.00130
12 1.00000 1.99990 –1.00000 2.99986 –2.00000 0.00057
13 1.00000 2.00004 –1.00000 3.00006 –2.00000 0.00025
14 1.00000 1.99998 –1.00000 2.99997 –2.00000 0.00011
15 1.00000 2.00001 –1.00000 3.00001 2.00000 0.00005
29
suma ← suma + (xi – xiniciali)2
end for
norma2 ← √(suma)
if norma2 < then // se checa la convergencia
return
end if
for i =1 to n do // preparación de la siguiente iteración
xiniciali ← xi
end for
end for
convergencia ← false
return
end procedure Jacobi
Ax = b
(D + L + U)x = b
Dx = b – (L + U)x
x = D-1[b – (L + U)x]
30
. .
. .
. .
. .
(k+1) (k)
(k+1)
bi − ∑i−1
j=1 a ij xj + ∑nj=i+1 aij xj
xi = , i = 1,2,3, … , n
aii
Ejemplo
Resolver el sistema lineal del ejemplo anterior empleando Gauss Seidel. Considere el
mismo vector inicial y también idéntico criterio de convergencia.
31
ǁx(1) – x(0) ǁ2 =√((0.80000 – 0.00000)2 + (2.85714 – 0.00000)2 + (–1.500000 – 0.00000)2 +
(2.42857 – 0.00000)2 + (–1.80000 – 0.00000)2)
ǁx – x ǁ2 = 4.49346
(1) (0)
32
// A Matriz de coeficientes del sistema.
// b Vector de términos del lado derecho del sistema.
// xinicial Vector de estimaciones iniciales.
// Máximo error permisible. Cuando la norma euclidiana de la
// diferencia entre las dos últimas aproximaciones es menor que
// , se considera haber llegado a solución.
// maxiter Número máximo de iteraciones.
// x Última iteración calculada. Si en convergencia se devuelve
// true, entonces x también es el vector solución de Ax=b.
// convergencia Bandera cuyo valor indica si hubo convergencia:
// convergencia = true se alcanzó la convergencia
// convergencia = false no se alcanzó la convergencia.
//
convergencia ← true
for iter = 1 to maxiter do
for i = 1 to n do // cálculo de la nueva aproximación x
suma ← 0.0
for j = 1 to i -1 do
suma ← suma + Aij*xj
end for
for j = i + 1 to n do
suma ← suma + Aij*xinicialj
end for
xi ← (bi – suma) / Aii
end for
suma ← 0.0
for i = 1 to n do
suma ← suma + (xi – xiniciali)2
end for
norma2 ← √(suma)
if norma2 < then // se checa la convergencia
return
end if
for i =1 to n do // preparación de la siguiente iteración
xiniciali ← xi
end for
end for
convergencia ← false
return
end procedure Gauss_Seidel
33
La condición suficiente pero no necesaria que garantiza la convergencia tanto de Jacobi
como de Gauss Seidel para cualquier vector inicial x(0) es que la matriz de coeficientes del
sistema sea estrictamente diagonal dominante. A continuación, la definición de una matriz
estrictamente diagonal dominante.
De acuerdo con esta definición, la matriz de coeficientes de los dos últimos ejemplos es
estrictamente diagonal dominante ya que
Esto asegura la convergencia de ambos métodos para cualquier estimación inicial x(0).
34