Está en la página 1de 19

5 Métodos Directos e Iterativos para la

.be
Solución de Sistemas de Ecuaciones

ut u
Lineales

= yo
ure
5.1. ¿A dónde nos dirigimos?
En este capítulo estudiaremos las técnicas de solución de sistemas de ecuaciones lineales cuadrados

eat
Ax = B. Para ello, primero realizaremos un repaso de álgebra de matrices y, para sustentar teórica-

If
mente los métodos, revisaremos las ideas de ortogonalización de vectores. Posteriormente se exponen

4S
las ideas sobre las que se desarrollan, en los métodos numéricos, las soluciones de los sistemas: la
eliminación de Gauss para los métodos directos y la iteración de Gauss-Seidel para los iterativos.

Ct
DT
Para establecer la velocidad de cálculo y el "trabajo computacional" en los métodos directos, se
analiza el número de operaciones de éstos y con base en ello se determinan sus necesidades de
g jy
memoria. Como consecuencia de lo anterior, se da particular atención a los sistemas especiales:
simétricos, bandeados y dispersos, entre otros. Así, estudiaremos los métodos que aprovechan es-
=Q

tas características para lograr reducir con esto el número de operaciones y los requerimientos de
máquina.
?v

Dado que el mundo real puede verse como grupos de objetos o partes trabajando en conjunto o bien
tch

conectadas de alguna manera que forman un todo, creemos que con estos conocimientos lograremos
brindarle al lector una mejor comprensión de la extraordinaria cantidad de situaciones que pueden
wa

representarse con los sistemas o grupos de ecuaciones donde cada una de ellas corresponde a alguna
m/

de sus partes.
o
e.c

5.2. Notación matricial


tub

Una matriz consiste en un arreglo rectangular de elementos representado por un solo símbolo. Como
se ilustra en la siguiente figura, [A] es la notación breve para la matriz y aij designa un elemento
u

individual de la matriz. Un conjunto horizontal de elementos se llama un renglón (o fila); y uno


.yo

vertical, columna. El primer subíndice i siempre designa el número del renglón en el cual está el
ww

elemento. El segundo subíndice j designa la columna. Por ejemplo, el elemento a23 está en el renglón
2 y la columna 3.
/w

 
a11 a12 a13 . . . a1m
s:/

 → Renglón 2 (o fila 2)
 a21 a22 a23 . . . a2m 
 .. .. .. .. 

p

 . . . aij . 
[A] =
htt

an an2 an3 . . . anm



Columna 3

La matriz en la figura anterior tiene n renglones y m columnas, y se dice que tiene una dimensión
(o tamaño) de n por m (o n × m). Ésta se conoce como una matriz n por m.

44
5.2. NOTACIÓN MATRICIAL CAPÍTULO 5. MÉTODOS DIRECTOS

A las matrices con dimensión renglón n = 1, tales como


 
[B] = b1 b2 . . . bm
se les conoce como vectores renglón. Observe que para simplificar se elimina el primer subíndice
de cada elemento. También, debe mencionarse que hay ocasiones en las que se requiere emplear una

.be
notación breve especial para distinguir una matriz renglón de otros tipos de matrices. Una forma
para llevar a cabo esto es mediante el uso de corchetes abiertos en la parte superior, así bBc.

ut u
Las matrices con dimensión columna m = 1, como

yo
 
c1

=
 c2 
bCc =  . 
 
.

ure
 . 
cn

eat
se conocen como vectores columna. Para simplificar, se elimina el segundo subíndice. Como en el

If
caso del vector renglón, en ocasiones se desea emplear una notación breve especial para distinguir

4S
una matriz columna de otros tipos de matrices. Una forma para realizarlo consiste en emplear
paréntesis de llave, así {C}.

Ct
A las matrices en las que n = m se les llama matrices cuadradas. Por ejemplo, una matriz de 4
por 4 es 
a11 a12 a13 a14
 DT
g jy
 a21 a22 a23 a24 
[A] = 
 a31 a32 a33 a34 

=Q

a41 a42 a43 a44


A la diagonal que contiene los elementos a11 , a22 , a33 , a44 se le llama diagonal principal de la
?v

matriz.
tch

Las matrices cuadradas resultan particularmente importantes cuando se resuelven sistemas de


ecuaciones lineales simultáneas. En tales sistemas, el número de ecuaciones (que corresponde a los
wa

renglones) y el número de incógnitas (que corresponde a las columnas) debe ser igual para que sea
posible tener una solución única.1 En consecuencia, cuando se trabaja con tales sistemas se tienen
m/

matrices cuadradas de coeficientes. Hay diferentes formas especiales de matrices cuadradas que son
importantes y que deben mencionarse:
o
e.c

Una matriz simétrica es aquella donde aij = aji para todo i y j. Por ejemplo,
tub

 
5 2 4
[A] =  2 3 6 
u

4 6 8
.yo

es una matriz simétrica de 3 por 3.


ww

Una matriz diagonal es una matriz cuadrada donde todos los elementos fuera de la diagonal
/w

principal son iguales a cero,


 
a11 0 · · · 0
s:/

 
a11
..
 0 a22 . . . . 
 
a22
p

 
[A] =  .. ..
= 
htt

 . . a33 0 
  a33 
a44
0 · · · 0 a44

Observe que donde hay grandes bloques de elementos que son cero, se dejan en blanco.
1
Sin embargo, debe notarse que en este tipo de sistemas puede suceder que no tengan soluciones o exista una
infinidad de éstas.

45
5.2. NOTACIÓN MATRICIAL CAPÍTULO 5. MÉTODOS DIRECTOS

Una matriz identidad es una matriz diagonal donde todos los elementos sobre la diagonal
principal son iguales a 1,  
1
 1 
[I] =  
 1 

.be
1

ut u
El símbolo [I] se utiliza para denotar la matriz identidad. La matriz identidad tiene propie-
dades similares a la unidad.

yo
Una matriz triangular superior es aquella donde todos los elementos por debajo de la

=
diagonal principal son cero,

ure
 
a11 a12 a13 a14

eat
 a22 a23 a24 
[A] =  
a33 a34 

If

a44

4S
Ct
Una matriz triangular inferior es aquella donde todos los elementos por arriba de la dia-
gonal principal son cero,  DT

a11
 a21 a22
g jy

[A] = 
 a31 a32 a33


=Q

a41 a42 a43 a44

Una matriz bandeada tiene todos los elementos iguales a cero, con la excepción de una
?v

banda centrada sobre la diagonal principal:


tch

 
a11 a12
wa

 a21 a22 a23 


[A] =  
a32 a33 a34
m/

 
a43 a44
o
e.c

La matriz anterior tiene un ancho de banda de 3 y se le da un nombre especial: matriz


tridiagonal.
tub

La multiplicación de una matriz [A] por un escalar k se obtiene al multiplicar cada elemento
u

de [A] por k,
.yo

 
ka11 ka12 . . . ka1m
 ka21 ka22 . . . ka2m
ww


(k) [A] = [A] (k) =  . .. .. ..
 
 .. . . .


/w

kan1 kan2 . . . kanm


s:/

El producto de dos matrices se representa como [C] = [A][B], donde los elementos de [C]
están definidos como:
p

n
htt

X
cij = aik bkj (5.2.1)
k=1

donde n = la dimensión columna de [A] y la dimensión renglón de [B]. Es decir, el elemento


cij se obtiene al sumar el producto de elementos individuales del i-ésimo renglón de la primera
matriz, en este caso [A], por la j -ésima columna de la segunda matriz [B]. De acuerdo con

46
5.2. NOTACIÓN MATRICIAL CAPÍTULO 5. MÉTODOS DIRECTOS

esta definición, la multiplicación de dos matrices se puede realizar sólo si la primera matriz
tiene tantas columnas como el número de renglones en la segunda matriz. (Conformidad del
producto.) Así, si [A] es una matriz n por m, [B] podría ser una matriz m por l. En este caso,
la matriz resultante [C] tendrá dimensión n por l. Sin embargo, si [B] fuera una matriz l por
m, la multiplicación no podrá ser ejecutada.

.be
La transpuesta de una matriz implica transformar sus renglones en columnas y viceversa.

ut u
Por ejemplo, dada la matriz de 4 × 4,

yo
 
a11 a12 a13 a14
 a21 a22 a23 a24 

=
[A] = 
 a31 a32 a33

a34 

ure
a41 a42 a43 a44

eat
la transpuesta, designada por [A]T , está definida como

If
4S
 
a11 a21 a31 a41
 a12 a22 a32 a42 

Ct
T
[A] =   a13 a23 a33

a43 
DT
a14 a24 a34 a44
g jy
En otras palabras, el elemento aij de la transpuesta es igual al elemento aji de la matriz
original.
=Q

La traza de una matriz es la suma de los elementos en su diagonal principal, se designa


como tr[A] y se calcula como:
?v

n
tch

X
tr [A] = aii (5.2.2)
i=1
wa

La traza se usará en el análisis de valores propios. La última manipulación de una matriz que
m/

resultará de utilidad para nuestro análisis es la aumentación. Una matriz es aumentada al


agregar una columna (o columnas) a la matriz original. Por ejemplo, suponga que tenemos
o

una matriz de coeficientes:


e.c

 
a11 a12 a13
tub

[A] =  a21 a22 a23 


a31 a32 a33
u

Por ejemplo, se puede aumentar esta matriz [A] con una matriz identidad para obtener una
.yo

matriz de dimensiones 3 por 6:


ww

.
a11 a12 a13 .. 1 0 0
 
/w

 .. 
(5.2.3)
[A] =  a a a . 0 1 0

 21 22 23
..

s:/

a31 a32 a33 . 0 0 1


p
htt

Tal expresión es útil cuando debe ejecutarse un conjunto de operaciones idénticas sobre dos
matrices. Así, podemos realizar las operaciones sobre una sola matriz aumentada, en lugar de
hacerlo sobre dos matrices individuales.

47
5.2. NOTACIÓN MATRICIAL CAPÍTULO 5. MÉTODOS DIRECTOS

Ejemplo 5.1.1 Este ejemplo ilustrará cómo se implementa una variedad de manipulación matricial
con MATLAB. Se aborda mejor como un ejercicio práctico en la computadora.

Cree una matriz de 3 por 3:

.be
>‌> A = [1 5 6;7 4 2;-3 6 7]

ut u
A =
1 5 6

yo
7 4 2
-3 6 7

=
ure
La traspuesta de A puede ser obtenida utilizando el operador ’, así:

eat
>‌> A’ =

If
A’ =

4S
1 7 -3

Ct
5 4 6
6 2 7
DT
También puede crear una matriz de 3 por 3 usando una fila base. Primero cree tres vectores fila:
g jy

>‌> x = [8 6 9];
=Q

>‌> y = [-5 8 1];


>‌> z = [4 8 2];
?v

Entonces podemos combinar estas a la forma de matriz:


tch
wa

>‌> B = [x; y; z]
B =
m/

8 6 9
-5 8 1
o

4 8 2
e.c

podemos sumar [A] y [B]:


tub
u

>‌> C = A+B
.yo

C =
9 11 15
ww

2 12 3
/w

1 14 9
s:/

podemos restar [B] de [C] y el resultado será [A]:


p
htt

>‌> A = C-B

A =
1 5 6
7 4 2
-3 6 7

48
5.2. NOTACIÓN MATRICIAL CAPÍTULO 5. MÉTODOS DIRECTOS

como [A] y [B] tienen la misma dimensión, se pueden multiplicar:

>‌> A*B
ans =
7 94 26

.be
44 90 71
-26 86 -7

ut u
Note que [A] y [B] también se pueden multiplicar elemento por elemento incluyendo un punto

yo
con el operador multiplicación:

=
ure
>‌> A.*B
ans =

eat
8 30 54
-35 32 2

If
-12 48 14

4S
La matriz inversa puede ser calculada con la función inv, así:

Ct
>‌> AI = inv(A) DT
AI =
g jy
0.2462 0.0154 -0.2154
-0.8462 0.3846 0.6154
=Q

0.8308 -0.3231 -0.4769


?v

(Practique) Ahora pruebe que esa es la AI es la inversa de A.La función eye puede ser utilizada
para generar una matriz identidad, así:
tch
wa

>‌> I = eye(3)
m/

I =
1 0 0
o

0 1 0
e.c

0 0 1
tub

Finalmente la matriz [A] puede ser aumentada, así:


u

>‌> aum = [A I]
.yo

aum =
ww

1 5 6 1 0 0
7 4 2 0 1 0
/w

-3 6 7 0 0 1
s:/

Note que el tamaño de la matriz puede ser determinado por la función size, así:
p

>‌> [n,m] = size(aum)


htt

n =
3
m =
6

49
5.3. TENSOR ESFUERZO (STRESS) CAPÍTULO 5. MÉTODOS DIRECTOS

.be
ut u
yo
(a) Representación gráfica de las com- (b) Componentes del Esfuerzo en un cubo elemental.

=
ponentes del tensor Esfuerzo en

ure
una base ortogonal.

eat
Figura 5.3.1

If
Método Gráfico para dos ecuaciones.

4S
Ct
Determinantes y regla de Cramer.
DT
5.3. Tensor Esfuerzo (Stress)
g jy

5.3.1. ¿Por qué determinar el esfuerzo in situ?


=Q

Las motivaciones básicas para la determinación del esfuerzo in situ son:


?v

1 Tener un conocimiento básico del estado de esfuerzo para la ingeniería, es decir, ¿En qué
dirección y con qué magnitud está actuando el esfuerzo principal? ¿De qué efectos del esfuerzo
tch

nos estamos defendiendo a nosotros mismos y a nuestras estructuras? ¿En qué dirección es
wa

más probable que se rompa la roca? En igualdad de condiciones, ¿En qué dirección fluirá el
petróleo? Incluso para preguntas de ingeniería tan básicas y directas, un conocimiento del
m/

estado del esfuerzo es esencial.


o
e.c

2 Tener un conocimiento específico y «formal» de las condiciones de frontera para los análisis
de esfurzo realizados en proyectos de fracturación en las rocas.
tub

El esfuerzo no es el mismo tipo de cantidad que la presión o la fuerza porque el esfuerzo no es


u

un escalar o un vector: es una cantidad tensorial. Dado que un tensor es una entidad matemática
.yo

que obedece a un cierto conjunto de reglas, no es difícil desarrollar una comprensión superficial de
esfuerzo.
ww

El esfuerzo se define como la fuerza por unidad de área que existe dentro de un plano específico de
/w

un material. En realidad los esfuerzos no se pueden medir directamente, solo se pueden determinar a
partir de ciertos análisis y principios generales. Teóricamente un esfuerzo se puede calcular mediante:
ps:/

F
σ= (5.3.1)
htt

A
donde F es la fuerza definida como F = ma el producto de la masa (m) por la aceleración (a) y
A el área donde se ejerce la fuerza. Cabe destacar que esta ecuación es válidad si se asume que el
esfuerzo está uniformemente distribuido en el material.

50
5.3. TENSOR ESFUERZO (STRESS) CAPÍTULO 5. MÉTODOS DIRECTOS

Sin embargo, el esfuerzo en un punto dentro de una roca tiene tres componentes que actúan
perpendicularmente a las caras de un cubo, y seis componentes de tensión que actúan a lo largo
de las caras (ver figura 5.3.1.(a)). La forma en que estos componentes varían a medida que gira el
cubo significa que el esfuerzo es una cantidad tensorial y debe especificarse en el caso tridimensional
por seis componentes independientes. Los esfuerzos normales y de corte que actúan sobre planos

.be
en diferentes orientaciones dentro de la masa rocosa son necesarios para los estudios de diseño de
ingeniería de rocas y pueden calcularse utilizando ecuaciones de transformación, como se ilustrará.

ut u
Existen 5 tipos de esfuerzos:

yo
a Tensión.

=
ure
b Compresión.

eat
c Cizalla.

If
d Flexión y

4S
e Torsión.

Ct
DT
Pregunta. Muestre cómo se puede describir el estado de esfuerzo en un sólido mediante los
componentes de esfuerzo (normal y de cizalla) en un cubo de roca elemental. Además, muestre cómo
g jy
se enumeran estos componentes en la matriz de esfuerzo ¿Qué tienen en común los componentes en
una fila de la matriz de tensiones? ¿Qué tienen en común los componentes de una columna de la
=Q

matriz de tensiones?
?v

Respuesta. Los componentes en un cubo elemental se muestran a continuación en la figura


5.3.1.(b). Los componentes se enumeran en la matriz de tensiones de la siguiente manera:
tch
wa

  Los componentes en una fila son los


σxx τxy τxz →
m/

 τyx σyy τyz  componentes que actúan en un plano;


para la primera fila, el plano en el cual
o

τzx τzy σzz


σxx actúa.
e.c


tub

Los componentes en una columna son los


componentes que actúan en una dirección;
u

para la segunda columna, la dirección y.


.yo
ww

Existen varias convenciones para expresar los componentes del esfuerzo. Hemos utilizado la no-
tación más común en ingeniería de mecánica de rocas, con σ para componentes de esfuerzo normal
/w

y τ para componentes de esfuerzo de cizalla y con esfuerzo de compresión positiva.


s:/

El esfuerzo normal y el esfuerzo de cizalla, sobre cualquier plano (2D), cuya normal este inclinada
p

un ángulo θ con relación al sistema de coordenadas original, puede escribirse de forma matricial
htt

usando las identidades trigonométricas básicas para sin 2θ y cos 2θ. Esto es

σ0 = M  σ (5.3.2)

es decir,

51
5.3. TENSOR ESFUERZO (STRESS) CAPÍTULO 5. MÉTODOS DIRECTOS

.be
ut u
yo
Figura 5.3.2

=
ure
σx0 cos2 θ sin2 θ
     
sin 2θ σx

eat
 σy0  =  sin2 θ cos2 θ − sin 2θ    σy 
τx0 0 y0 − 21 sin 2θ 1
2 sin 2θ cos 2θ τxy

If
4S
siendo

Ct

σx0
 
cos2 θ
DT
sin2 θ sin 2θ
 
σx

σ0 =  σy0 ; M=  sin2 θ cos2 θ − sin 2θ ; σ=  σy 


g jy

τx0 0 y0 − 21 sin 2θ 1
2 sin 2θ cos 2θ τxy
=Q

Con el fin de facilitar la comprensión y el uso de las ecuaciones que permiten calcular los esfuerzos
?v

normales y de cizalla, a continuación se presenta un ejemplo que muestra la forma de calcular la


tch

magnitud de estos esfuerzos en dos dimensiones.


Ejemplo 5.2.1. (Geomecánica) Dada una muestra de roca en forma de cubo, tomada de un
wa

yacimiento de hidrocarburos. Suponiendo que en laboratorio se somete a los siguientes esfuerzos en


m/

uno de sus planos (una de las cara del cubo), σx0 = 50,49 Mpa, σy0 = 19,5 Mpa y τx0 y0 = 3,17 Mpa.
Calcule los esfuerzos σx , σy y τxy de esta muestra, con un ángulo de inclinación de θ = 30º.
o

Solución. Note que se quiere resolver la siguiente ecuación: σ = M−1 σ 0 . Utilizando la ecuación
e.c

5.2.2. en forma matricial (reemplace los valores y resuelva la matriz, sug. use la inversa de M ). Los
tub

resultados se presentan a continuación (ver figura 5.2.3):

40 Mpa
u

σx =
.yo

σy = 30 Mpa
τxy = 15 Mpa
ww

Implementación en Matlab
/w

Abra Matlab y digite los coeficientes de las matrices M y σ.


s:/

>‌> M = [0.75 0.25 0.866; 0.25 0.75 -0.866; -0.433 0.433 0.5]
p

M =
htt

0.75 0.25 0.866


0.25 0.75 -0.866
-0.433 0.433 0.5
>‌> sigma_p = [50.49 19.5 3.17]
B = sigma_p.’

52
5.4. ELIMINACIÓN DE GAUSS SIMPLE CAPÍTULO 5. MÉTODOS DIRECTOS

B =
50.49
19.5
3.17
empleando multiplicación inversa

.be
>‌> sigma = inv(M)*B

ut u
sigma =
40

yo
30

=
15

ure
5.4. Eliminación de Gauss Simple

eat
El método está ideado para resolver un sistema general de n ecuaciones y n incognitas:

If
4S
a11 x1 + a12 x2 + a13 x3 + ... + a1n xn = b1
a21 x1 + a22 x2 + a23 x3 + ... + a2n xn = b2

Ct
.. .. (5.4.1)
. .
DT
an1 x1 + an2 x2 + an3 x3 + ... + ann xn = b3
g jy
A la primera ecuación del sistema (5.2.1) se le conoce como la ecuación pivote, y a11 se denomina
el coeficiente o elemento pivote.
=Q

Como en el caso de dos ecuaciones, la técnica para resolver n ecuaciones consiste en dos fases:
la eliminación de las incógnitas y su solución mediante sustitución hacia atrás. El procedimiento
?v

puede continuar usando las ecuaciones pivote restantes. La última manipulación en esta secuencia
tch

es el uso de la (n–1)-ésima ecuación para eliminar el término xn–1 de la n-ésima ecuación. Aquí el
sistema se habrá transformado en un sistema triangular superior como se muestra acontinuación:
wa
m/

a11 x1 + a12 x2 + a13 x3 + ... + a1n xn = b1


a022 x2 + a023 x3 + ... + a02n xn = b2
.. .. (5.4.2)
o

. .
e.c

(n−1) (n−1)
ann xn = bn
tub

(n−1) (n−1)
Acontinuación se puede despejar xn y obtener xn = bn /ann siendo
u
.yo

 
n
(i−1) (i−1) (i−1)
X
xi = bi − aij xj  /aii
ww

j=i+1
/w

para i = (n − 1), (n − 2), ..., 1


s:/

Ejemplo 5.3.1. Considere el siguiente yacimiento productor en el espacio 1D, con un flujo de
petróleo monofásico en estado no estacionario2 . Este yacimiento tiene las distribuciones de propie-
p
htt

dades homogéneas de φ = 30 % y kx = 178 md. La figura 5.3.1. muestra las dimensiones uniformes
de los bloques. Las condiciones de contorno en los extremos externos se especifican como condiciones
de límite sin flujo (q(lsc)i = 0, para i 6= 2, 6.) y los pozos en las cuadrículas 2 y 6 producen a una
velocidad de qlsc = 2000 STB/D. Cada bloque de cuadrícula tiene una presión inicial especificada

2
Las variables que definen su comportamiento, respecto del tiempo, no permanecen invariantes.

53
5.4. ELIMINACIÓN DE GAUSS SIMPLE CAPÍTULO 5. MÉTODOS DIRECTOS

.be
ut u
yo
Figura 5.4.1: Sistema físico del ejemplo 5.3.1.

=
ure
de pni = 4000 psia. Obtenga el sistema de ecuaciones cuya solución da la distribución de presión

eat
en el yacimiento al final de 10 días. Use un paso de tiempo de 10 días (4t = 10) para generar el
sistema de ecuaciones.

If
Use también un esquema implícito de diferencia finitas hacia atrás para generar las ecuaciones.

4S
Además, tenga en cuenta que µl = 1,0 cp, Bl = 1,0 RB/STB, cl = 5 ∗ 10—6 psi—1 y Blo = 1,0

Ct
RB/STB y βc = 1,127 (o 86,4 ∗ 10−6 en sistema métrico) factor de conversión de transmisibilidad.

Solución. Primero organicemos los datos en una tabla:


DT
g jy

φ= 30 % 4t = 10 Blo = 1.0
=Q

kx = 178 µl = 1.0 βc = 1.127


qlsc = 2000 Bl = 1.0 4x = 400
?v

pni = 4000 cl = 5 ∗ 10—6 Ax = 20000


tch
wa

La siguiente ecuación representa el flujo de un líquido monofásico, ligeramente compresible en


una formación heterogénea y anisotrópica3 :
m/

     
∂ ∂p ∂ ∂p ∂ ∂p
4z + B o µqsc (5.4.3)
o

β c Ax k x 4x + βc Ay ky 4y + βc Az kz
e.c

∂x ∂x ∂y ∂y ∂z ∂z
tub

Vb φµc ∂p
=
αc ∂t
u

siendo Ax = área de sección transversal normal al flujo, Vb = (Ax ) (4x) = volumen aparente , cl =
.yo

compresibilidad de la fase l, Blo = factor de volumen de formación de petróleo en la fase l. Para una
formación homogénea e isotrópica y considerando solo una dimensión (1D), esta ecuación puede ser
ww

simplificada para obtener:


∂ 2 p Blo µl qlsc φµl cl ∂p
/w

+ = (5.4.4)
∂x βc kx Vb βc αc kx ∂t
s:/

donde l = o y puede ser expresada en forma de diferencias finitas con el esquema de diferencias
finitas implícitas hacia atrás (se explicará en los próximos capítulos) en el nivel de tiempo n + 1,
p
htt

para así quedar:


!
 o  2
B µ l q lsc φµ l cl (4x)
pn+1 n+1
+ pn+1 l
pn+1 − pni (5.4.5)

i−1 − 2pi i+1 + (4x) = i
βc Ax kx i βc αc kx 4t
i

3
Eterkin Turgay, Jamal H. Abou-Kassem & Gregory R. King; Basic Applied Reservoir Simulation (2001), pag 67.

54
5.4. ELIMINACIÓN DE GAUSS SIMPLE CAPÍTULO 5. MÉTODOS DIRECTOS

Reemplazando los valores de esta ecuación se tiene:


 o 
Bl µl (1)(1)(400)
(4x) = = 0,100
βc Ax kx i (1,127)(200 ∗ 100)(0,178)
y

.be
!
φµl cl (4x)2 (0,30) (1) 5 ∗ 10−6 (400)2

= = 0,021

ut u
βc αc kx 4t (1,127) (5,615) (0,178) (10)
i
así, las ecuaciones toman la siguiente forma:

yo
pn+1 n+1
+ pn+1 n
(5.4.6)

=
i−1 − 2,021pi i+1 = −0,1qlsci − 0,021pi

ure
Para el primer paso de tiempo, la condición inicial establece que pni = 4000. Antes de escribir las
ecuaciones de diferencias finitas para cada bloque desconocido, reconocemos la simetría presente en el

eat
problema. Las condiciones de contorno (interior y exterior), las condiciones iniciales, la geometría del

If
depósito y las propiedades del bloque son simétricas con respecto al centro de Gridblock 4. En otras

4S
palabras, p1 = p7 , p2 = p6 y p3 = p5 . Por lo tanto, en lugar de resolver siete presiones desconocidas,
podemos resolver la presión de los primeros cuatro bloques, por lo que solo es necesario escribir las

Ct
ecuaciones exclusivamente para los bloques de cuadrícula 1 a 4. Tenga en cuenta que 0,021pni =
DT
0,021(4000) = 84 para el nivel de tiempo n y qlsc [(Blo µl (4x)) / (βc Ax kx )]2 = (−2000) (0,100) =
−200 (signo (-) por el sentido del flujo). Las ecuaciones de flujo en el primer paso de tiempo son:
g jy

Para i = 1, límite sin flujo (no-flow boundary), se tiene que pn+1


1 = pn+1
0 y así:
=Q

−1,021pn+1
1 + pn+1
2 = −84
?v

Para i = 2, pn+1
1 − 2,021pn+1
2 + pn+1
3 = −0,1q(lsc)2 − 0,021pn2 = − (−200) − 84
tch

pn+1
1 − 2,021pn+1
2 + pn+1
3 = 116
wa

Para i = 3, pn+1
2 − 2,021pn+1
3 + pn+1
4 = −0,1q(lsc)3 − 0,021pn3 = (0) − 84
m/

pn+1
2 − 2,021pn+1
3 + pn+1
4 = −84
o
e.c

Para i = 4, como se está considerando que el Gridblock es simétrico pn+1


5 = pn+1
3 , pn+1
3 −
2,021pn+1 + p n+1
= −0,1q − 0,021p n = (0) − 84
tub

4 3 (lsc)4 4

2pn+1 − 2,021pn+1 = −84


u

3 4
.yo

lo que genera un sistema de ecuaciones o una matriz tridiagonal:


ww

   n+1   
−1,021 1 0 0 p1 −84
/w

1 −2,021 1 0   pn+1   116 


(5.4.7)

   2n+1 = 
0 1 −2,021 1  p   −84 
s:/


3
0 0 2 −2,021 pn+1
4 −84
p

ahora resuelva el sistema anterior (Ap = B), utilizando el método de eliminación de Gauss Simple,
htt

donde:
pn+1
     
−1,021 1 0 0 1 −84
1 −2,021 1 0  pn+1   116
 pn+1  y B =  −84
  
A= ; p= 2   
 0 1 −2,021 1 
3

0 0 2 −2,021 pn+1
4 −84

55
5.4. ELIMINACIÓN DE GAUSS SIMPLE CAPÍTULO 5. MÉTODOS DIRECTOS

Acontinuación se muestran los resultados (compare):

pn+1
   
1 1279,49
 pn+1   1222,35 
 2n+1  =  
 p   1306,89

.be

3
n+1
p4 1334,88

ut u
Implementación del Método Gauss Simple en Matlab

yo
El ejercicio del ejemplo 5.3.1 también se puede resolver utilizando el siguiente código en Matlab:

=
ure
function x = GaussNaive(A,b)
% GaussNaive: eliminación de Gauss Simple

eat
% x = GaussNaive(A,b): eliminación de Gauss sin pivote.
% input(entradas):

If
% A = coeficientes de la matriz

4S
% b = vector del lado derecho

Ct
% output(salida):
% x = vector solución
[m,n] = size(A); DT
if m~=n, error(’Matriz A debería ser cuadrada’); end
g jy
nb = n+1;
Aug = [A b];
=Q

% eliminación hacia atrás


for k = 1:n-1
?v

for i = k+1:n
tch

factor = Aug(i,k)/Aug(k,k);
Aug(i,k:nb) = Aug(i,k:nb)-factor*Aug(k,k:nb);
wa

end
end
m/

% sustitución hacia atrás


o

x = zeros(n,1);
e.c

x(n) = Aug(n,nb)/Aug(n,n);
for i = n-1:-1:1
tub

x(i) = (Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i);
end
u
.yo

en el command window, ahora ingrese la matriz A y el vector b en forma de columna de la siguiente


manera:
ww

>‌> A = [-1.021 1 0 0; 1 -2.021 1 0; 0 1 -2.021 1; 0 0 2 -2.021];


/w

>‌> b = [-84 116 -84 -84];


>‌> c = b.’;
s:/

>‌> GaussNaive(A,c)
p

ans =
htt

1279.5
1222.4
1306.9
1334.9

56
5.5. ELIMINACIÓN DE GAUSS-JORDAN CAPÍTULO 5. MÉTODOS DIRECTOS

.be
ut u
= yo
Figura 5.5.1: Discretización de un yacimiento homogéneo en 1D.

ure
eat
5.5. Eliminación de Gauss-Jordan

If
El método de Gauss-Jordan es una variación de la eliminación de Gauss. La principal diferencia

4S
consiste en que cuando una incógnita se elimina en el método de Gauss-Jordan, ésta es eliminada de
todas las otras ecuaciones, no sólo de las subsecuentes. Además, todos los renglones se normalizan

Ct
al dividirlos entre su elemento pivote. De esta forma, el paso de eliminación genera una matriz
DT
identidad en vez de una triangular. En consecuencia, no es necesario usar la sustitución hacia atrás
para obtener la solución.
g jy

Ejemplo 5.4.1. Intente resolver el problema de flujo incompresible aplicado a un yacimiento


=Q

horizontal 1D, utilizando Gauss-Jordan en la Figura 5.4.1. que se muestra, cuyo sistema de ecuación
para las presiones pi , viene dado por:
?v

  
−p1
 
−2 1 0 0 0 p2
tch

 1 −2 1 0 0  0
  p3  
   

0 (5.5.1)

 0 1 −2 1 0   p4  = 
wa

 
    µq (4x)2 
 0 0 1 −2 1   p5   − βsck V

c x b

m/

0 0 0 1 −1 p6 0
o

siendo p1 = 1300 psia, µ = 1,0 cp, qsc = 1900 STB/D, 4x = 400 ft, βc = 1,127, kx = 170 md y
e.c

Vb = 5000 ft3 . Compare con el vector solución pT = [1617,3 1934,7 2252 2569,4 2569,4].
tub

Implementación del Método Gauss-Jordan en Matlab


u

El ejercicio del ejemplo 5.4.1 también se puede resolver utilizando el siguiente código en Matlab:
.yo

function x = GaussPivot(A,b)
ww

% GaussPivot: eliminación de Gauss Jordan


% x = GaussPivot(A,b): eliminación de Gauss con pivotes
/w

% input(entradas):
% A = coeficientes de la matriz
s:/

% b = vector de lado derecho


p

% output (salida):
htt

% x = vector solución
[m,n]=size(A);
if m~=n, error(’La matriz A debe ser cuadrada’);
end nb=n+1;
Aug=[A b];
% eliminación hacia atrás

57
5.5. ELIMINACIÓN DE GAUSS-JORDAN CAPÍTULO 5. MÉTODOS DIRECTOS

for k = 1:n-1
% pivoteo parcial
[big,i]=max(abs(Aug(k:n,k)));
ipr=i+k-1;
if ipr~=k

.be
Aug([k,ipr],:)=Aug([ipr,k],:);
end

ut u
for i = k+1:n
factor=Aug(i,k)/Aug(k,k);

yo
Aug(i,k:nb)=Aug(i,k:nb)-factor*Aug(k,k:nb);

=
end

ure
end
% sustitución hacia atrás

eat
x=zeros(n,1);
x(n)=Aug(n,nb)/Aug(n,n);

If
for i = n-1:-1:1

4S
x(i)=(Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i);

Ct
end
DT
en el command window, ahora ingrese la matriz A y el vector b en forma de columna de la siguiente
manera:
g jy
>‌> A = [-2 1 0 0 0; 1 -2 1 0 0; 0 1 -2 1 0; 0 0 1 -2 1; 0 0 0 1 -1];
>‌> b = [-1300 0 0 -317.34 0];
=Q

>‌> c = b.’;
>‌> GaussPivot(A,c)
?v

ans =
tch

1617.3
wa

1934.7
2252.0
m/

2569.4
2569.4
o
e.c

Implementación para Matrices Tridiagonales en Matlab


Ciertas matrices tienen una estructura particular en las que se puede desarrollar esquemas de
tub

solución muy eficientes. Por ejemplo, las matrices con bandas en las que existen grandes cantidades
de ceros, con una modificación que ahorre espacios es ventajosa, porque el algoritmo resultante
u
.yo

requiere menos memoria de la computadora. Un algoritmo para resolver tales sistemas se puede
diseñar directamente después de la eliminación de Gauss, es decir, utilizando la eliminación hacia
ww

adelante y la sustitución hacia atrás. Sin embargo, debido a que la mayoría de los elementos de la
matriz ya son cero, se gasta mucho menos esfuerzo que para una matriz completa. Esta eficiencia
/w

se ilustra con los ejemplos 5.3.1 y 5.4.1. utilizados en el siguiente código de Matlab:
s:/

function x = Tridiag(e,f,g,r)
% Tridiag: solucionador del sistema bandeado tridiagonal
p
htt

% x = Tridiag(e,f,g,r): sistema tridiagonal a solucionar.


% input(entradas):
% e = vector subdiagonal
% f = vector diagonal
% g = vector superdiagonal
% r = vector de lado derecho

58
5.6. GAUSS-SEIDEL CAPÍTULO 5. MÉTODOS DIRECTOS

% output(salida):
% x = vector solución
n=length(f);
% eliminación hacia adelante
for k = 2:n

.be
factor = e(k)/f(k-1);
f(k) = f(k) - factor*g(k-1);

ut u
r(k) = r(k) - factor*r(k-1);
end

yo
% sustitución hacia atrás

=
x(n) = r(n)/f(n);

ure
for k = n-1:-1:1
x(k) = (r(k)-g(k)*x(k+1))/f(k);

eat
end
Para resolver el problema del ejemplo 5.3.1, en el command window, ingrese los vectores de la

If
4S
siguiente manera:

Ct
>‌> e = [0 1 1 2]; =⇒ (note que este es el vector subdiagonal (ver la ecuación 5.3.7))
>‌> f = [-1.021 -2.021 -2.021 -2.021]; =⇒ (esta es la diagonal)
>‌> g = [1 1 1]; =⇒ (este es el vector superdiagonal) DT
>‌> r = [-84 116 -84 -84]; =⇒ (vector del lado derecho)
g jy
>‌> Tridiag(e,f,g,r)
=Q

ans =
1279.5 1279.5 1222.4 1306.9 1334.9
?v

Ejercicio. Resuelva el problema del ejemplo 5.4.1. con la función Tridiag anterior y compare.
tch
wa

5.6. Gauss-Seidel
m/

Los métodos iterativos constituyen una alternativa a los métodos de eliminación descritos hasta
ahora, para aproximar la solución. Tales métodos son similares a las técnicas que se desarrollaron
o

para obtener las raíces de una ecuación. Aquellos métodos consistían en suponer un valor y luego
e.c

usar un método sistemático para obtener una aproximación mejorada de la raíz. Como esta parte
tub

trata con un problema similar (obtener los valores que simultáneamente satisfagan un conjunto de
ecuaciones), entonces se esperaría que tales métodos aproximados fuesen útiles en este contexto.
u

El método de Gauss-Seidel es el método iterativo más comúnmente usado. Suponga que se da un


.yo

sistema de n ecuaciones:
ww

A~x = B (5.6.1)
donde A son los coeficientes de una matriz cuadrada de n por n elementos y B es un vector
/w

columna de n por 1. Si los elementos de la diagonal no son todos cero, la primera ecuación se puede
s:/

resolver para x1 , la segunda para x2 y siguiendo de la misma forma hasta la n-ésima para xn y
obtener:
p

n
htt

P
b1 − a1i xi
i=2, i6=1
x11 = (5.6.2)
a11
n
P
b2 − a2i xi
i=1, i6=2
x22 = (5.6.3)
a22

59
5.6. GAUSS-SEIDEL CAPÍTULO 5. MÉTODOS DIRECTOS

..
.
..
.
n
P
bn−1 − a(n−1)i xi

.be
i=1, i6=n−1
x(n−1)(n−1) = (5.6.4)
a(n−1)(n−1)

ut u
n−1
P
bn − ani xi

yo
i=1,
xnn = (5.6.5)
ann

=
Ahora, se puede empezar el proceso de solución al escoger valores iniciales para las xii , con i = 1,

ure
2, 3, ..., n. Una forma simple para obtener los valores iniciales es suponer que todos son cero. Estos
ceros se sustituyen en la ecuación (5.5.2), la cual se utiliza para calcular un nuevo valor x11 = b1 /a11 .

eat
Después, se sustituye este nuevo valor de x11 junto con el valor previo cero de x33 en la ecuación
(5.5.3) y se calcula el nuevo valor de x22 . Este proceso se repite con la ecuación (5.5.4) para calcular

If
un nuevo valor de x33 . Se continúa este mismo proceso hasta llegar a la ecuación (5.5.5). Después

4S
se regresa a la primera ecuación y se repite todo el procedimiento hasta que la solución converja

Ct
suficientemente cerca a los valores verdaderos. La convergencia se verifica usando el criterio (ver la
ecuación 3.0.7):
xj − xj−1
DT
(5.6.6)
i i
|εa,i | = ∗ 100 % < εs

g jy
j
x
i
para todas las i, donde j y j–1 son las iteraciones actuales y previas, respectivamente.
=Q

Ejemplo 5.5.1. Suponga que se quiere resolver la ecuación (5.3.7) del ejemplo 5.3.1. con el
?v

método de Gauss-Seidel. Para hacer esto, primero despeje la incógnita sobre la diagonal para cada
una de las ecuaciones:
tch

n
a1i pn+1
P
b1 − i
−84 − pn+1

wa

i=2, i6 = 1 2
n+1
p1 = = (5.6.7)
a11 −1,021
m/

n
a2i pn+1
P
b2 −
o

i
116 − pn+1 + pn+1

e.c

i=1, i6=2 1 3
pn+1
2 = = (5.6.8)
a22 −2,021
tub

n
a2i pn+1
P
b3 − i
−84 − pn+1 + pn+1

u

i=1, i6=3 2 4
pn+1 = = (5.6.9)
.yo

3
a33 −2,021
ww

n
a2i pn+1
P
b2 − i
−84 − 2pn+1

i=1, i6=2 3
pn+1 (5.6.10)
/w

4 = =
a44 −2,021
s:/

Suponiendo que pn+1


2 , pn+1
3 y pn+1
4 son cero, se utiliza la ecuación (5.5.7) para calcular
p

−84 − pn+1

−84 − (0)
htt

n+1 2
p1 = = = 82,27
−1,021 −1,021

Este valor, junto con el valor de pn+1


3 = 0 y pn+1
4 = 0, se sustituye en la ecuación (5.5.8) para
calcular
116 − pn+1 + pn+1

1 3 116 − (82,27 + (0))
pn+1
2 = = = −16,69
−2,021 −2,021

60
5.6. GAUSS-SEIDEL CAPÍTULO 5. MÉTODOS DIRECTOS

Nuevamente, este valor, junto con el valor de pn+1


4 = 0, se sustituye en la ecuación (5.5.9) para
calcular
−84 − pn+1 + pn+1

n+1 2 4 −84 − (−16,69 + (0))
p3 = = = 33,30
−2,021 −2,021
La primera iteración termina al sustituir los valores calculados para pn+1 en la ecuación (5.5.10)

.be
3
para dar
−84 − 2p3n+1

ut u

n+1 −84 − (2 (33,30))
p4 = = = 74,52
−2,021 −2,021

yo
En la segunda iteración, se repite el mismo proceso para calcular

=
−84 − (−16,69)

ure
pn+1
1 = = 65,93 |εa,1 | = 29,33 %
−1,021

eat
116 − ((65,93) + (33,30))
pn+1
2 = = −8,30 |εa,2 | = 101,1 %
−2,021

If
4S
−84 − ((−8, 30) + (74,52))
pn+1 = = 74,33 |εa,3 | = 55,20 %

Ct
3
−2,021

pn+1
4 =
−84 − (2 (74,33))
−2,021
= 115,12 DT |εa,4 | = 35,27 %
g jy
En los anteriores resultados también se calculan los errores relativos porcentuales (ecuación 3.0.7).
El método es, por lo tanto, convergente hacia la verdadera solución. Por supuesto, se necesita aplicar
=Q

iteraciones adicionales para mejorar los resultados. Observe que, como cuando se determinaron las
raíces de una sola ecuación, las formulaciones como la ecuación (5.5.6) usualmente ofrecen una
?v

valoración conservativa de la convergencia. Así, cuando éstas se satisfacen, aseguran que el resultado
se conozca con, al menos, la tolerancia especificada por εs .
tch
wa

Implementación del Método Gauss-Seidel en Matlab


El ejercicio del ejemplo 5.5.1 también se puede resolver utilizando el siguiente código en Matlab:
m/

function x = GaussSeidel(A,b,es,maxit)
o
e.c

% GaussSeidel: método de Gauss Seidel


% x = GaussSeidel(A,b): Gauss Seidel sin stop
tub

% input:
% A = coeficientes de la matriz
u

% b = vector del lado derecho


.yo

% es = criterio de stop (default = 0.00001 %)


% maxit = max iteraciones (default = 50)
ww

% output:
/w

% x = vector solución
if nargin<2,error(’al menos 2 argumentos de entrada son requeridos’),end
s:/

if nargin<4|isempty(maxit),maxit=50;end
if nargin<3|isempty(es),es=0.00001;end
p
htt

[m,n] = size(A);
if m~=n, error(’La matriz A debe ser cuadrada’); end
C = A;
for i = 1:n
C(i,i) = 0;
x(i) = 0;

61
5.6. GAUSS-SEIDEL CAPÍTULO 5. MÉTODOS DIRECTOS

end
x = x’;
for i = 1:n
C(i,1:n) = C(i,1:n)/A(i,i);
end

.be
for i = 1:n
d(i) = b(i)/A(i,i);

ut u
end
iter = 0;

yo
while (1)

=
xold = x;

ure
for i = 1:n
x(i) = d(i)-C(i,:)*x;

eat
if x(i) ~= 0
ea(i) = abs((x(i) - xold(i))/x(i)) * 100;

If
end

4S
end

Ct
iter = iter+1;
if max(ea)<=es | iter >= maxit, break, end
end
DT
g jy
Ahora, en el command window, ingrese los vectores del ejemplo 5.5.1. de la siguiente manera:
>‌> A = [-1.021 1 0 0; 1 -2.021 1 0; 0 1 -2.021 1; 0 0 2 -2.021];
=Q

>‌> b = [-84 116 -84 -84];


>‌> GaussSeidel(A,b)
?v

ans =
tch

892.8912
wa

837.1243
924.3533
m/

956.3120
El resultado es distinto al del ejemplo 5.5.1. Explique ¿Por que?
o
e.c

Ejercicio 5.5.1. Use el método de Gauss-Seidel para resolver el sistema de ecuaciones para las
tub

presiones en un yacimiento (1D) que aparecen acontinuación. Suponga que en la primera iteración
p2 = p3 = 100 psia.
u

−2p1 + p2 = −200
.yo

p1 − 2p2 + p3 = 0
p2 − 2p3 = −100
ww
/w
p s:/
htt

62

También podría gustarte