You are on page 1of 57

IT600 – Análise matricial de sistemas de energia elétrica

1 Semestre 2011
Capı́tulo 3 – Eliminação de Gauss e decomposição LDU

3.1 Introdução

◮ Os princı́pios básicos das chamadas técnicas de esparsidade são:

 minimizar a quantidade de dados armazenados

 MINIMIZAR O NÚMERO DE OPERAÇÕES REALIZADAS

 PRESERVAR A ESPARSIDADE

3.2 Resolução de sistemas de equações algébricas lineares


3.2.1 Método direto – inversão da matriz A

◮ Considerar o seguinte sistema de equações algébricas lineares colocado na forma


matricial:

A·x =b
em que:
   
10 1 2 1
 2 9 2 1   2 
   
 1 8 1   3 
A=
 1
 e b= 
 9 2 


 2 

 2 2 10 1   1 
1 1 9 2

–1–
Como A tem inversa, a solução é única e dada por:

x = A−1 · b
   
0,1052 −0,0135 0,0035 −0,0248 0,0064 −0,0011 1
 −0,0250 0,1205 −0,0307 0,0087 −0,0143 0,0050   2 
   
 0,0033 −0,0156 0,1308 −0,0015 0,0033 −0,0149   3 
= −0,0134 0,0073 −0,0022 0,1196 −0,0250 0,0030  ·  2 
  
   
 0,0078 −0,0260 0,0081 −0,0260 0,1091 −0,0130   1 
−0,0012 0,0046 −0,0154 0,0030 −0,0125 0,1142 2
 
0,0433
 0,1369 
 
 0,3349 
= 
 0,2149 
 
 0,0113 
0,1838

◮ Obter a inversa da matriz A e multiplicá-la pelo vetor b são tarefas simples de serem
realizadas, mesmo que a matriz A esteja armazenada de forma compacta.

Problema: a matriz A−1 é cheia. Do ponto de vista de espaço de memória, não é van-
tajoso armazená-la utilizando os esquemas de armazenamento compacto.

–2–
3.2.2 Método direto – substituição de variáveis

◮ Considerar o seguinte sistema de equações algébricas lineares:


 3x1 − 2x2 − x3 = 0
−2x1 + 2x2 − x3 = −1

−x1 − x2 + 3x3 = 1

◮ A solução pode ser obtida, como mostrado na seção 3.2.1, através de:

     
3 −2 −1 x1 0
 −2 2 −1  ·  x2  =  −1 
−1 −1 3 x3 1

   −1  
x1 3 −2 −1 0
 x2  =  −2 2 −1  ·  −1 
x3 −1 −1 3 1
   
−5/3 −7/3 −4/3 0
=  −7/3 −8/3 −5/3  ·  −1 
−4/3 −5/3 −2/3 1
 
1
= 1

1

–3–
◮ Outra maneira de resolver o sistema de equações é através da eliminação de
variáveis nas equações. Reescrevendo a primeira equação:

2 1
x1 = x2 + x3
3 3
e substituindo na segunda e terceira equações:


 3x1 − 2x2 − x3 = 0
2 5
 3 x2 − 3 x3 = −1
− 35 x2 + 83 x3 = 1

◮ As duas últimas equações não dependem mais de x1 .

Reescrevendo a segunda equação:

5 3
x2 = x3 −
2 2
e substituindo na terceira equação:


 3x1 − 2x2 − x3 = 0
2 5
 3 x2 − 3 x3 = −1
− 23 x3 = − 23

◮ A última equação agora só depende de x3 .

A sequência de cálculos envolvendo eliminação de variáveis e que resulta em uma


última equação contendo apenas uma variável (cuja resolução é trivial) é chamada
de Substituição Forward

–4–
◮ Colocando o sistema de equações na forma matricial tem-se:

     
3 −2 −1 x1 0
 0 2/3 −5/3  ·  x2  =  −1 
0 0 −3/2 x3 −3/2

ou seja, os elementos do triângulo inferior da matriz de coeficientes foram tornados


iguais zero.

◮ Resolvendo a terceira equação:

x3 = 1

◮ Substituindo o valor de x3 nas duas primeiras equações:


 3x1 − 2x2 = 1
2
3 x2 = 23

x3 = 1

◮ Agora a segunda equação só depende de x2.

Resolvendo a segunda equação:

x2 = 1

–5–
◮ Substituindo o valor de x2 na primeira equação:


 3x1 = 3
x = 1
 2
x3 = 1

◮ Agora a primeira equação só depende de x1.

Resolvendo a primeira equação:

x1 = 1

◮ A sequência de cálculos envolvendo a substituição das variáveis já calculadas nas


demais equações e que resulta na obtenção da solução (uma variável por vez) é
chamada de Substituição Backward (ou Back)

◮ A solução do problema é:



 x1 = 1
x2 = 1

x3 = 1

ou, na forma matricial:

     
1 0 0 x1 1
 0 1 0  ·  x2  =  1 
0 0 1 x3 1

ou seja, os elementos do triângulo superior da matriz de coeficientes foram tornados


iguais zero.

–6–
◮ Nota-se que, na solução, a matriz de coeficientes A transformou-se na matriz
identidade. Além disso, o vetor independente transformou-se no vetor solução.

3.2.3 Método direto – eliminação de Gauss

◮ O procedimento baseado em substituição de variávies pode também ser encarado


sob outro ponto de vista. Repetindo o sistema de equações original:


 3x1 − 2x2 − x3 = 0
−2x1 + 2x2 − x3 = −1

−x1 − x2 + 3x3 = 1

◮ A eliminação de x1 da segunda e terceira equações pode ser conseguida através da


definição de combinações lineares apropriadas entre as equações.
Neste caso, as combinações são as seguintes:
 
2
Linha 2 ← · Linha 1 + Linha 2
3
 
1
Linha 3 ← · Linha 1 + Linha 3
3

◮ As operações entre as equações definidas acima resultam em:


 3x1 − 2x2 − x3 = 0
2
3 x2 − 53 x3 = −1

− 35 x2 + 83 x3 = 1

que já foi obtido anteriormente.

◮ A eliminação de x2 da terceira equação pode ser conseguida através da seguinte


combinação linear:
 
5
Linha 3 ← · Linha 2 + Linha 3
2

–7–
◮ A operação definida acima resulta em:


 3x1 − 2x2 − x3 = 0
2
3 x2 − 53 x3 = −1

− 23 x3 = − 23

que também já foi obtida anteriormente. Novamente, a terceira equação só depende
de x3 e sua solução é trivial. Até aqui foi realizada a substituição Forward, e os
elementos do triângulo inferior da matriz de coeficientes foram tornados iguais a
zero.

◮ Obtém-se o valor de x3 através de:

 
2
Linha 3 ← − · Linha 3
3

Esta operação corresponde a tornar o coeficiente de x3 igual a 1. Pode-se também


realizar o mesmo tipo de operação para a primeira e segunda equações, tornando
iguais a 1 os coeficientes de x1 na primeira equação e x2 na segunda equação:

 
1
Linha 1 ← · Linha 1
3
 
3
Linha 2 ← · Linha 2
2

O sistema de equações resultante é:

 2 1
 x1 − 3 x2 − 3 x3 = 0
x2 − 52 x3 = − 23

x3 = 1

Em geral, considera-se que as operações descritas acima (tornar alguns coeficientes


iguais a 1) também fazem parte da substituição Forward.

–8–
◮ A substituição Back é realizada fazendo-se as seguintes operações entre as
equações:

 
5
Linha 2 ← · Linha 3 + Linha 2
2
 
1
Linha 1 ← · Linha 3 + Linha 1
3

 2 1
 x1 − 3 x2 = 3
x2 = 1

x3 = 1

 
2
Linha 1 ← · Linha 2 + Linha 1
3


 x1 = 1
x2 = 1

x3 = 1

◮ Pode-se notar que, após a substituição Back, os elementos do triângulo superior


foram tornados iguais a zero, e a matriz dos coeficientes A transformou-se na matriz
identidade. Além disso, o vetor independente transformou-se no vetor solução.

Conclusão: os cálculos envolvendo a substituição de variáveis e eliminação de Gauss


resultaram na solução do problema sem que tenha sido necessário inverter
a matriz de coeficientes (como feito na resolução direta).

–9–
◮ Pode-se resolver um problema do tipo:

A·x =b

através da eliminação de Gauss partindo-se de uma matriz aumentada contendo A e


b e obtendo-se uma nova matriz aumentada que contém a solução x :

[A | b]

[I | x ]

em que I é a matriz identidade.

◮ Para a obtenção de I a partir de A deve-se realizar operações (combinações lineares)


entre as linhas de A, de forma a:

Passo 1 tornar todos os elementos do triângulo inferior de A iguais a 0;


Passo 2 tornar todos os elementos da diagonal de A iguais a 1;
Passo 3 tornar todos os elementos do triângulo superior de A iguais a 0.

As operações acima serão aplicadas também sobre o vetor b, que resultará na


solução x .

◮ Os passos 1 e 2 correspondem à substituição Forward do processo de eliminação de


variáveis descrito anteriormente. O passo 3 corresponde à substituição Back.

– 10 –
3.2.4 Pivoteamento

◮ Considere o seguinte sistema de equações lineares:

    
10−10 1 x1 1
=
2 1 x2 5

cuja solução, por inspeção, é x ≈ [2 1].

◮ Resolvendo o problema por eliminação de Gauss tem-se:

 
10−10 1  1 
0 −2 · 1010 + 1 −2 · 1010 + 5

 
1 1010 10

10

0 1 −2 · 1010 + 5 / −2 · 1010 + 1

    
1 0 −2 · 1010 + 5 / −2 · 1010 + 1 · −1010  + 10 10

0 1 −2 · 1010 + 5 / −2 · 1010 + 1

ou seja:

 
0
x≈
1

que não corresponde à solução correta.

Problema: o termo 10−10 é praticamente igual a zero para a maioria dos


computadores.

– 11 –
◮ Considere agora que o sistema de equações seja rearranjado como:

    
2 1 x1 5
−10 =
10 1 x2 1

◮ Resolvendo o problema por eliminação de Gauss tem-se:

 
2 1  5 
0 −1/2 · 10−10 + 1 −5/2 · 10−10 + 1

 
1 1/2 5/2
 
0 1 −5/2 · 10−10 + 1 / −1/2 · 10−10 + 1

  
1 0 5/2 − 1/2 · −5/2 · 10−10
 + 1 / −1/2 · 10 −10
 + 1
0 1 −5/2 · 10−10 + 1 / −1/2 · 10−10 + 1

ou seja:

 
2
x≈
1

◮ O rearranjo acima é chamado pivoteamento, que consiste em manter os maiores


elementos da matriz na diagonal durante a substituição forward.

Note que foi feita uma troca entre as linhas do sistema de equações. Este tipo de
pivoteamento é chamado parcial. O pivoteamento completo consiste em realizar
trocas de linhas e colunas.

– 12 –
3.2.5 Métodos iterativos

◮ Considere um sistema de n equações algébricas lineares A · x = b


Tomando a linha i da equação matricial acima:

i Ai i xi bi
. =

A x b

n
X
A i j xj = bi i = 1, . . . , n
j=1
n
X
Ai i xi + A i j xj = bi i = 1, . . . , n
j=1,j6=i

Resolvendo para xi tem-se:

n
!
1 X
xi = · bi − Ai j xj i = 1, . . . , n
Ai i
j=1,j6=i

– 13 –
◮ Nota-se que:

 Cada incógnita xi pode ser escrita em função das demais.

 Isto pode sugerir um processo iterativo do tipo:

• Arbitre valores iniciais para xi0, i = 1, . . . , n.

• Substitua os valores de xi0 no termo do lado direito da equação e calcule os


novos valores de xi1 (lado esquerdo da equação).

• Substitua os valores de xi1 no termo do lado direito da equação e calcule os


novos valores de xi2 (lado esquerdo da equação).

• ···

que pára quando os valores de xi convergirem para a solução

◮ O processo iterativo implica na existência de uma seqüência de valores para as


incógnitas, começando por valores iniciais arbitrados:

xi0 → xi1 → xi2 · · ·

enquanto que no método de Eliminação de Gauss mostrado anteriormente o vetor


solução é obtido em um só passo.

– 14 –
◮ Para uma iteração (m + 1), o processo iterativo pode ser definido como:

n
!
(m+1) 1 X (m)
xi = · bi − Ai j xj i = 1, . . . , n
Ai i
j=1,j6=i

Método de Gauss-Jacobi

Para a obtenção de xi(m+1) são utilizados os valores de xi(m) (todos os valores da


iteração anterior)

Uma forma alternativa para o processo iterativo é:

i −1 n
!
1 X X
xi(m+1) = · bi − Ai j xj(m+1) − Ai j xj(m) i = 1, . . . , n
Ai i
j=1 j=i +1

Método de Gauss-Seidel

(m+1)
Para a obtenção de xi são utilizados os valores mais recentes disponı́veis dos
elementos do vetor x

– 15 –
 Exemplo

Processo iterativo utilizando os métodos de Gauss-Jacobi e Gauss-Seidel para n = 3:

Gauss-Jacobi

1 h  i
(m+1) (m) (m)
x1 = · b1 − +A12x2 A13x3
A11
1 h  i
(m+1) (m) (m)
x2 = · b2 − A21x1 + A23x3
A22
1 h  i
x3(m+1) = (m) (m)
· b3 − A31x1 + A32x2
A33

Gauss-Seidel

1 h  i
x1(m+1) = · b1 − +A12x2(m) A13x3(m)
A11
1 h  i
(m+1) (m+1) (m)
x2 = · b2 − A21x1 + A23x3
A22
1 h  i
(m+1) (m+1) (m+1)
x3 = · b3 − A31x1 + A32x2
A33

– 16 –
◮ A ideia geral desses métodos iterativos é converter o sistema de equações:

A·x =b

em:

x = C · x + g = ϕ (x )

em que C é uma matriz (n × n), g é um vetor (n × 1) e ϕ (x) é uma função de


iteração matricial.

◮ A formulação acima sugere um processo iterativo. No caso do método de


Gauss-Jacobi, tem-se a seguinte expressão geral para o processo iterativo:

 
(k+1) (k) (k)
x =C·x +g =ϕ x

◮ A matriz A pode ser colocada na forma:

A=L+D+U

em que L é uma matriz que contém os elementos abaixo da diagonal (Lower


triangle) de A, D é uma matriz que contém os elementos da diagonal de A, e U é
uma matriz que contém os elementos acima da diagonal (Upper triangle) de A.

Então, a equação de Gauss-Jacobi pode ser escrita na forma matricial como:

x (k+1) = D−1 b − D−1 (L + U) x (k)

– 17 –
◮ A convergência pode ser acelerada através da utilização de parâmetros de
aceleração.

O método mais popular é o chamado método SOR (successive overrelaxation).

Para o método Gauss-Seidel:

i −1 n
!
(m+1) 1 X (m+1)
X (m)
zi = · bi − Ai j xj − Ai j xj i = 1, . . . , n
Ai i
j=1 j=i +1
(m+1) (m+1) (m)
xi = ωzi + (1 − ω)xi i = 1, . . . , n

◮ Para ω = 1, tem-se o método Gauss-Seidel sem aceleração.

◮ A aceleração corresponde a uma extrapolação:

 
(m+1) (m) (m+1) (m)
x =x +ω· z −x
= x (m) + ω · ∆x

x (m+1)
z (m+1)

x (m)
∆x
ω · ∆x

– 18 –
◮ Para cada problema existe um ω ótimo, mas para a maioria dos problemas práticos,
valores aproximados (empı́ricos) são escolhidos.

◮ Outro método iterativo comumente usado é o do gradiente conjugado. Este


método consiste na minimização da função:

E (x) = kA x − b k2

◮ Uma caracterı́stica interessante do método é que garante-se que a convergência


ocorrerá em no máximo n iterações (n é a dimensão de A), caso A seja definida
positiva.

◮ Algoritmo:

 Inicialização:

k =1
r0 = A x0 − b
ρ0 = −AT r 0

 Enquanto kr k k ≥ ε:

αk+1 = kAT r k k2/kAρk k2


x k+1 = x k + αk+1 ρk
r k = A x k+1 − b
Bk+1 = kAT r k+1 k2 /kAT r k k2
ρk+1 = −AT r k+1 + Bk+1 ρk
k =k +1

– 19 –
3.3 Eliminação de Gauss e decomposição LDU

◮ Considerar novamente a matriz A do exemplo anterior:

 
10 1 2
 2 9 2 1 
 
 1 8 1 
A=
 1

 9 2 

 2 2 10 1 
1 1 9

A matriz aumentada é:

 
10 1 2
1
 2 9 2 1 2 
 
 1 8 1 3 
[A | b] = 
 1

 9 2
2 

 2 2 10 1
1 
1 1 9 2

◮ O processo de eliminação de Gauss é iniciado com o passo 1 (tornar todos os


elementos do triângulo inferior de A iguais a 0)

– 20 –
A primeira posição a ser zerada é a posição (2,1) (A2,1 = 2)

 
10 1 2
1
 2 9 2
 1
2 


 1 8 1
3 

 1 9 2 2  linha 2 ← linha 1 × (−2/10) + linha 2
 
 2 2 10 1
1 
1 1 9 2

 
10,0000 1,0000 0 2,0000 0 0 1,0000


 0 8,8000 2,0000 -0,4000 1,0000 0 1,8000 


 0 1,0000 8,0000 0 0 1,0000 3,0000 


 1,0000 0 0 9,0000 2,0000 0 2,0000 

 0 2,0000 0 2,0000 10,0000 1,0000 1,0000 

0 0 1,0000 0 1,0000 9,0000 2,0000

◮ Observações:

 A2,1 = 0

 A2,4 6= 0 (essa posição era originalmente igual a zero)


Estes novos elementos não nulos que aparecem em posições originalmente nulas
devido às operações realizadas são chamados de fill-ins

 todos os esquemas de armazenamento compacto de matrizes devem prever um


espaço de memória adicional para levar em conta o possı́vel aparecimento de
fill-ins:

MAX = NB + 2 · NR + folga

– 21 –
 a operação realizada equivale a premultiplicar a matriz aumentada por uma
matriz L1 tal que a matriz resultante tenha A2,1 = 0:

 
1
 α2,1 1 
 
 1 
L1 =   α2,1 = −A2,1 /A1,1 = −2/10

 1 

 1 
1

[A1 | b1 ] = L1 · [A | b]

 α2,1 é chamado de fator triangular

 Observar que a coluna da matriz aumentada correspondente ao vetor b foi


alterada na posição 2, resultando no vetor b1 :

b2 ← b1 · α2,1 + b2

– 22 –
◮ O próximo passo é zerar a posição (4,1) (A4,1 = 1). Para isso, a seguinte operação
é realizada:

linha 4 ← linha 1 × (−1/10) + linha 4

e o resultado é:

 
10,0000 1,0000 0 2,0000 0 0 1,0000


 0 8,8000 2,0000 −0,4000 1,0000 0 1,8000 


 0 1,0000 8,0000 0 0 1,0000 3,0000 


 0 -0,1000 0 8,8000 2,0000 0 1,9000 

 0 2,0000 0 2,0000 10,0000 1,0000 1,0000 

0 0 1,0000 0 1,0000 9,0000 2,0000

Nota-se que um novo fill-in apareceu na posição correspondente a A4,2 e que a


posição correspondente a b4 foi alterada

◮ O processo continua até que todo o triângulo inferior de A tenha sido zerado:

 
10,0000 1,0000 0 2,0000 0 0 1,0000
 0 8,8000 2,0000 -0,4000 1,0000 0 1,8000 
 

 0 0 7,7727 0,0455 -0,1136 1,0000 2,7955 


 0 0 0 8,7953 2,0117 -0,0029 1,9123 


 0 0 0 0 9,2872 1,0592 0,2992 

0 0 0 0 0 8,7555 1,6089

Os elementos marcados correspondem a posições que eram originalmente iguais a


zero.

– 23 –
◮ O passo 2 corresponde a tornar todos os elementos da diagonal de A iguais a 1.
Para tornar o elemento A1,1 igual a 1, deve-se realizar a seguinte operação:

linha 1 ← linha 1 × (1/10)

ou, da mesma forma, premultiplicar a matriz aumentada por uma matriz D1 tal que
a matriz resultante tenha A1,1 = 1:

 
α1,1

 1 

 1 
D1 =   α1,1 = 1/A1,1 = 1/10

 1 

 1 
1

◮ Realizando essas operações para todas as linhas, obtém-se finalmente:

 
1,0000 0,1000 0 0,2000 0 0 0,1000

 0 1,0000 0,2273 −0,0455 0,1136 0 0,2045 


 0 0 1,0000 0,0058 −0,0146 0,1287 0,3596 


 0 0 0 1,0000 0,2287 −0,0003 0,2174 

 0 0 0 0 1,0000 0,1140 0,0322 
0 0 0 0 0 1,0000 0,1838

– 24 –
◮ O passo 3 consiste em zerar todos os elementos do triângulo superior de A.
Começando pelo elemento A5,6 = 0,1140, deve-se realizar a seguinte operação:

linha 5 ← linha 6 × (−0,1140) + linha 5


ou, da mesma forma, premultiplicar a matriz aumentada por uma matriz U1 tal que
a matriz resultante tenha A5,6 = 0:

 
1

 1 

 1 
U1 =   α5,6 = −A5,6 = −0,1140

 1 

 1 α5,6 
1

O resultado da operação é:

 
1,0000 0,1000 0 0,2000 0 0 0,1000

 0 1,0000 0,2273 −0,0455 0,1136 0 0,2045 


 0 0 1,0000 0,0058 −0,0146 0,1287 0,3596 


 0 0 0 1,0000 0,2287 −0,0003 0,2174 

 0 0 0 0 1,0000 0 0,0113 
0 0 0 0 0 1,0000 0,1838

◮ Repetindo o procedimento para todos os elementos não nulos do triângulo superior


de A chega-se a:

 
1,0000 0 0 0 0 0
0,0433

 0 1,0000 0 0 0 0
0,1369 


 0 0 1,0000 0 0 0
0,3349 


 0 0 0 1,0000 0 0
0,2149 

 0 0 0 0 1,0000 0
0,0113 
0 0 0 0 0 1,0000 0,1838
| {z }
x

– 25 –
◮ Todos os valores de α ao longo do processo de eliminação de Gauss são chamados
de fatores triangulares. O processo de obtenção dos valores de α também é
chamado de fatoração triangular

◮ No caso da matriz A do exemplo, o processo de fatoração resultou em 8 fill-ins (oito


elementos adicionais que devem ser armazenados)

◮ Idéia: armazenar os fatores triangulares (α) nas posições correspondentes aos


elementos que se desejou zerar ou tornar iguais a 1:

 
0,1000 −0,1000 0 −0,2000 0 0

 −0,2000 0,1136 −0,2273 0,0455 −0,1136 0 

 0 −0,1136 0,1287 −0,0058 0,0146 −0,1287 
A= 

 −0,1000 0,0114 −0,0029 0,1137 −0,2287 0,0003 

 0 −0,2273 0,0585 −0,2380 0,1077 −0,1140 
0 0 −0,1287 0,0007 −0,1094 0,1142

Conhecendo-se os fatores triangulares e a ordem em que eles devem ser utilizados,


pode-se repetir as operações para vários vetores b

– 26 –
◮ Existem dois esquemas básicos de fatoração triangular para se zerar os elementos
dos triângulos inferior e superior da matriz:

 Fatoração por colunas:

Zerar triângulo Colunas Linhas

inferior esquerda → direita cima → baixo


superior direita → esquerda baixo → cima

– 27 –
 Fatoração por linhas:

Zerar triângulo Linhas Colunas

inferior cima → baixo esquerda → direita


superior baixo → cima direita → esquerda

A sequência das operações é importante pois uma operação não deve criar
elementos não nulos em posições que foram zeradas em operações anteriores.
Tipicamente a substituição forward (zerar triângulo inferior) é feita por colunas e
a substituição back (zerar triângulo superior) é feita por linhas.

– 28 –
◮ Resumo das operações (combinações lineares) realizadas para transformar A em I na
matriz aumentada:

(U11 · U10 · . . . · U2 · U1) · (D6 · . . . · D1 ) · (L11 · L10 · . . . · L2 · L1 ) · A = I

As matrizes L1 → U11 são chamadas de matrizes elementares.

◮ As mesmas operações são realizadas para transformar b em x:

(U11 · U10 · . . . · U2 · U1 ) · (D6 · . . . · D1 ) · (L11 · L10 · . . . · L2 · L1 ) · b = x

Logo:

A = [(U11 · U10 · . . . · U2 · U1) · (D6 · . . . · D1 ) · (L11 · L10 · . . . · L2 · L1 )]−1


ou:

 
A = L1−1 · L2−1 · . . . · L10−1 · L11−1 · D1 −1 · . . . · D6 −1 ·

U1−1 · U2−1 · . . . · U10−1 · U11−1
=L·D·U

Este processo também é chamado de decomposição (ou fatoração) LDU da matriz


A:

 L é uma matriz triangular inferior (Lower triangular) – o triângulo inferior tem


elementos não nulos e os elementos da diagonal são iguais a 1

 D é uma matriz diagonal – somente a diagonal tem elementos não nulos

 U é uma matriz triangular superior (Upper triangular) – o triângulo superior tem


elementos não nulos e os elementos da diagonal são iguais a 1

– 29 –
◮ A matriz L é igual a:

L = L1 −1 · L2 −1 · L3 −1 · L4−1 · L5−1 · L6−1 · L7−1 · L8 −1 · L9 −1 · L10−1 · L11−1


 
1,0000 0 0 0 0 0
 0,2000 1,0000 0 0 0 0
 
 0 0,1136 1,0000 0 0 0 
=
 
 0,1000 −0,0114 0,0029 1,0000 0 0 

 0 0,2273 −0,0585 0,2380 1,0000 0
0 0 0,1287 −0,0007 0,1094 1,0000

Os elementos do triângulo inferior correspondem ao negativo dos fatores


triangulares α obtidos anteriormente.

◮ Notar que:
 −1  
1 1
 1 0   1 0 
−1    
Lk = ...  = ... 
α   −α 
1 1

◮ A matriz D é igual a:

D = D1 −1 · D2 −1 · D3 −1 · D4 −1 · D5−1 · D6 −1
 
10,0000 0 0 0 0 0

 0 8,8000 0 0 0 0
 0 0 7,7727 0 0 0 
= 

 0 0 0 8,7953 0 0
 0 0 0 0 9,2872 0
0 0 0 0 0 8,7555

Os elementos da diagonal correspondem ao inverso dos fatores triangulares α


obtidos anteriormente.

– 30 –
◮ Notar que:
 −1  
α 1/α
 1 0   1 0 
−1    
Dk = =
0 ... 0 ...
 
   
1 1

◮ A matriz U é igual a:

U = U1 −1 · U2−1 · U3−1 · U4−1 · U5−1 · U6−1 · U7−1 · U8−1 · U9 −1 · U10−1 · U11−1


 
1,0000 0,1000 0 0,2000 0 0

 0 1,0000 0,2273 −0,0455 0,1136 0
 0 0 1,0000 0,0058 −0,0146 0,1287 
= 

 0 0 0 1,0000 0,2287 −0,0003 

 0 0 0 0 1,0000 0,1140 
0 0 0 0 0 1,0000

Os elementos do triângulo superior correspondem ao negativo dos fatores


triangulares α obtidos anteriormente.

◮ Notar que:
 −1  
1 1
 1 α  1 −α 
−1    
Uk = . .  = . . 
 0 .   0 . 
1 1

– 31 –
◮ Normalmente a matriz D é incorporada a L (L ← L · D):

A=L·U
No caso da matriz A do exemplo:

L=L·D
 
10,0000 0 0 0 0 0
 0,2000 8,8000 0 0 0 0
 
 0 0,1136 7,7727 0 0 0 
=
 0,1000 −0,0114 0,0029 8,7953

 0 0 

 0 0,2273 −0,0585 0,2380 9,2872 0
0 0 0,1287 −0,0007 0,1094 8,7555

◮ A solução é dada por:

x = A−1 · b
= (L · U)−1 · b
= U−1 · L−1 · b

ou

w = L−1 · b Substituição Forward


x = U−1 · w Substituição Back

◮ A fatoração LDU não preserva a esparsidade original da matriz, já que fill-ins são
criados ao longo do processo.
Existem várias técnicas propostas para minimizar o número de fill-ins gerados
(algumas serão vistas adiante). Elas se baseiam na reordenação das linhas e colunas
da matriz.

– 32 –
◮ Procedimento geral:

 armazenar a matriz A utilizando algum esquema de armazenamento compacto

 reordenar linhas e colunas de A de forma a minimizar o número de fill-ins gerados

 obter os fatores triangulares

 realizar substituição Forward

 realizar substituição Back → SOLUÇÃO

– 33 –
3.4 Bifatoração

◮ Procedimento desenvolvido por Zollenkopf

◮ É particularmente interessante no caso de matrizes estruturalmente simétricas1

◮ Considerando um sistema de n equações algébricas lineares dado por A · x = b, a


bifatoração pode ser representada por:

L(n) L(n−1) · · · L(2) L(1) AR(1)R(2) · · · R(n−1)R(n) = I

em que:

L são as matrizes de fatores à esquerda, R são as matrizes de fatores à direita e I é


a matriz identidade

◮ Logo:

A−1 = R(1)R(2) · · · R(n−1)R(n) L(n) L(n−1) · · · L(2)L(1)

◮ O processo de obtenção das matrizes de fatores à esquerda e à direita é dado por:

A(0) = A
A(1) = L(1)A(0)R(1)
A(2) = L(2)A(1)R(2)
··· ···
A(n) = L(n) A(n−1)R(n) = I

1 Denominamos aqui uma matriz A de estruturalmente simétrica caso Ai j e Aj i sejam simultaneamente iguais a zero ou diferentes de zero.

– 34 –
 Exemplo

Considere a seguinte matriz:

 
10 2 3
A= 3 8 1
1 3 15

Inicialmente, serão obtidos os fatores triangulares através da decomposição LDU:

 
1 0 0
L1 =  −3/10 1 0 
−1/10 0 1
 
10 2 3
A = L1 · A =  0 37/5 1/10 
0 14/5 147/10
 
1 0 0
L2 =  0 1 0
0 −14/37 1
 
10 2 3
A = L2 · A =  0 37/5 1/10 
0 0 1085/74
 
1/10 0 0
D= 0 5/37 0
0 0 74/1085
 
1 1/5 3/10
A=D·A=  0 1 1/74 
0 0 1

– 35 –
 
1 0 −3/10
U3 =  0 1 −1/74 
0 0 1
 
1 1/5 0
A = U3 · A =  0 1 0
0 0 1
 
1 −1/5 0
U2 =  0 1 0
0 0 1
 
1 0 0
A = U3 · A =  0 1 0 
0 0 1

Agrupando os fatores triangulares:

 
1/10 −1/5 −3/10
FT =  −3/10 5/37 −1/74 
−1/10 −14/37 74/1085

O processo de bifatoração é:

   
1/10 0 0 1 −1/5 −3/10
L1 =  −3/10 1 0  R1 =  0 1 0
−1/10 0 1 0 0 1
 
1 0 0
A = L1 · A · R1 =  0 37/5 1/10 
0 14/5 147/10

– 36 –
   
1 0 0 1 0 0
L2 =  0 5/37 0  R2 =  0 1 −1/74 
0 −14/37 1 0 0 1
 
1 0 0
A = L2 · A · R2 =  0 1 0
0 0 1085/74
   
1 0 0 1 0 0
L3 =  0 1 0 R3 =  0 1 0 
0 0 74/1085 0 0 1
 
1 0 0
A = L3 · A · R3 =  0 1 0 
0 0 1

Agrupando os fatores triangulares:

 
1/10 −1/5 −3/10
FT =  −3/10 5/37 −1/74 
−1/10 −14/37 74/1085

Portanto, os fatores triangulares são os mesmos, porém, obtidos em uma sequência


diferente.


– 37 –
◮ Na bifatoração, a obtenção dos fatores triangulares é feita por colunas para o
triângulo inferior e por linhas para o triângulo superior.

◮ Toda a metodologia proposta por Zollenkopf tem por base a bifatoração, portanto,
a estrutura de armazenamento compacto leva em conta esse processo.

Além disso, a substituição forward é realizada por colunas, enquanto que a


substituição back é realizada por linhas.

– 38 –
3.5 Eliminação de Gauss e redução de circuitos

◮ Considerar o seguinte circuito de 6 barras e 7 ramos:

3
2 1

6 4
5

◮ Considerando que todos os ramos do circuito tenham admitâncias série iguais a 1


pu, a matriz admitância nodal fica:

 
2 0 −1 −1 0 0

 0 2 −1 0 0 −1 

 −1 −1 3 0 −1 0 
Y= 

 −1 0 0 2 −1 0 

 0 0 −1 −1 3 −1 
0 −1 0 0 −1 ∞

A matriz Y tem dimensão [6 × 6] (rede tem 6 nós).

Como o nó 6 foi definido como sendo o nó de referência, atribuiu-se ao elemento da
diagonal Y66 um valor grande.

– 39 –
◮ Considerar o seguinte vetor das injeções de corrente nodais:
 
1

 1 

 1 
I= 

 1 

 1 
X
em que a posição 6 se refere à injeção de corrente no nó de referência.

◮ O processo de eliminação de Gauss começa tornando nulos os elementos do


triângulo inferior de Y.
Para zerar os elementos não nulos da primeira coluna, deve-se premultiplicar a
matriz Y por:
 
1 0 0 0 0 0

 0 1 0 0 0 0 

 1/2 0 1 0 0 0 
L1 =  

 1/2 0 0 1 0 0 

 0 0 0 0 1 0 
0 0 0 0 0 1
Logo:

Y 1 = L1 · Y
 
2 0 −1 −1 0 0
0 2 −1 0 0 −1 
 
 0 −1 5/2 - 1/2 −1 0 
 
= 
 0 0 - 1/2 3/2 −1 0 
 
0 0 −1 −1 3 −1 
0 −1 0 0 −1 ∞

Nota-se o aparecimento de dois fill-ins nas posições Y34 e Y43.

– 40 –
◮ Como a primeira coluna (correspondente ao nó 1) foi zerada, considerar agora
somente as colunas 2 → 6 da matriz Y1:
 
2 0 −1 −1 0 0

 0 2 −1 0 0 −1 

 0 −1 5/2 −1/2 −1 0 
Y1′ =  

 0 0 −1/2 3/2 −1 0 

 0 0 −1 −1 3 −1 
0 −1 0 0 −1 ∞

◮ A construção da rede a partir de Y1′ resulta em:


nó eliminado
3
2 1

ramo fictı́cio
criado
6 4
5

◮ Considerações:

 Zerar a primeira coluna de Y corresponde a eliminar o nó 1 do circuito

 A eliminação da coluna 1 resulta no aparecimento de 2 fill-ins

 Os fill-ins correspondem ao aparecimento de um ramo fictı́cio. Como o nó 1 era


conectado aos nós 3 e 4, o ramo fictı́cio conecta os nós 3 e 4 → fill-ins nas
posições (3,4) e (4,3) de Y

 A admitância do ramo fictı́cio do exemplo é igual a 1/2 pu, que corresponde à


associação em série dos ramos 1-3 e 1-4:

y13 · y14 1
y34 = = pu
y13 + y14 2

– 41 –
◮ Aplicando a matriz L1 ao vetor de correntes tem-se:

I1 = L1 · I
 
1
 1
 
 3/2 
= 3/2 

 
 1
X

ou seja, a injeção do nó 1 é distribuı́da entre os nós 3 e 4, que são diretamente


conectados a ele. A forma como se dá essa distribuição é função dos valores das
admitâncias conectadas ao nó 1.
Pode-se também eliminar a linha de I1 correspondente ao nó 1, resultando em:

 
1

 1 

 3/2 
I1′ =  

 3/2 

 1 
X

◮ Para a eliminação do nó 2, a seguinte matriz elementar é definida:

 
1 0 0 0 0 0

 0 1 0 0 0 0 

 0 1/2 1 0 0 0 
L2 =  

 0 0 0 1 0 0 

 0 0 0 0 1 0 
0 1/2 0 0 0 1

– 42 –
A nova matriz admitância nodal é:

Y2 = L2 · Y1′
 
2 0 −1 −1 0 0
 0 2 −1 0 0 −1 
 
0 0 2 −1/2 −1 -1/2 
 
= 
 0 0 −1/2 3/2 −1 0
 
 0 0 −1 −1 3 −1 
0 0 -1/2 0 −1 ∞

Nota-se o aparecimento de dois fill-ins nas posições Y26 e Y62.

◮ Eliminando a linha e a coluna 2 de Y2 (que corresponde ao nó 2):

 
2 0 −1 −1 0 0

 0 2 −1 0 0 −1 

 0 0 2 −1/2 −1 −1/2 
Y2 =  

 0 0 −1/2 3/2 −1 0
 0 0 −1 −1 3 −1 
0 0 −1/2 0 −1 ∞

◮ Reconstruindo o circuito a partir de Y2′ :

nó eliminado nó eliminado


3
2 1

ramo fictı́cio ramo fictı́cio


criado criado
6 4
5

– 43 –
◮ Considerações:

 Zerar a segunda coluna de Y corresponde a eliminar o nó 2 do circuito

 A eliminação da coluna 2 resulta no aparecimento de 2 fill-ins

 Novamente aparece um ramo fictı́cio. Como o nó 2 era conectado aos nós 3 e
6, o ramo fictı́cio conecta os nós 3 e 6

 A admitância do ramo fictı́cio do exemplo é igual a 1/2 pu, que corresponde à


associação em série dos ramos 2-3 e 2-6:

y23 · y26 1
y36 = = pu
y23 + y26 2
 Se a linha e a coluna correspondentes ao nó de referência não estivessem
representadas na matriz Y, o aparecimento de certos fill-ins só será notado
através da mudança dos valores de elementos da diagonal.

◮ Aplicando a matriz L2 ao vetor de correntes tem-se:

I2 = L2 · I1′
 
1

 1
 2 
= 

 3/2 

 1
(X + 1/2)
ou seja, a injeção do nó 2 é distribuı́da entre os nós 3 e 6, que são diretamente
conectados a ele. Pode-se também eliminar a linha de I2 correspondente ao nó 2,
resultando em:
 
1

 1 

 2 
I2′ =  

 3/2 

 1 
(X + 1/2)

– 44 –
◮ Após a eliminação do nó 3:

 
2 0 −1 −1 0 0

 0 2 −1 0 0 −1 

 0 0 2 −1/2 −1 −1/2 
Y3′ =  

 0 0 0 11/8 −5/4 −1/8 

 0 0 0 −5/4 5/2 −5/4 
0 0 0 −1/8 −5/4 ∞

 
1

 1 

 2 
I3′ =  

 2 

 2 
(X + 1)

nó eliminado
nó eliminado nó eliminado
3
2 1

6 4
5

ramo fictı́cio criado

O ramo fictı́cio tem uma admitância igual a 1/8 pu. Os elementos da matriz que
correspondem aos ramos 4-5 e 5-6 (que já existiam) tiveram seus valores alterados.
Após a eliminação do nó 3, todos os seus ramos vizinhos (4, 5 e 6) passaram a estar
conectados entre si.

– 45 –
◮ Após a eliminação do nó 4:

 
2 0 −1 −1 0 0

 0 2 −1 0 0 −1 

 0 0 2 −1/2 −1 −1/2 
Y4′ =  

 0 0 0 11/8 −5/4 −1/8 

 0 0 0 0 15/11 −15/11 
0 0 0 0 −15/11 ∞

 
1

 1 

 2 
I4′ =  

 2 

 42/11 
(X + 13/11)

nó eliminado
nó eliminado nó eliminado
3
2 1

6 4
5
nó eliminado

Os elementos da matriz que correspondem ao ramo 5-6 (que já existia) tiveram seus
valores alterados.

– 46 –
◮ Após a eliminação do nó 5:

 
2 0 −1 −1 0 0

 0 2 −1 0 0 −1 

 0 0 2 −1/2 −1 −1/2 
Y5′ =  

 0 0 0 11/8 −5/4 −1/8 

 0 0 0 0 15/11 −15/11 
0 0 0 0 0 ∞

 
1

 1 

 2 
I5′ =  

 2 

 42/11 
(X + 5)

nó eliminado
nó eliminado nó eliminado
3
2 1

6 4
5
nó eliminado
nó eliminado

◮ O processo de eliminação de nós até que reste somente um nó na rede corresponde
à substituição Forward

– 47 –
 Exercı́cio

Obtenha a matriz dos fatores triangulares para a rede exemplo de 6 barras e 7 ramos,
conforme mostrado na página 26.

◮ Pode-se também restaurar a rede a partir do conhecimento das matrizes


elementares L. Por exemplo, pode-se restaurar o nó 2 através de:

Y1′ = L−1 · Y2
2 
2 0 −1 −1 0 0
 0 2 −1 0 0 −1 
 
 0 −1 5/2 −1/2 −1 0 
= 0 0 −1/2 3/2 −1 0 

 
 0 0 −1 −1 3 −1 
0 −1 0 0 −1 ∞

Importante: a restauração de nós em princı́pio deve seguir exatamente a ordem


inversa de eliminação.

– 48 –
◮ Em cada passo do processo de eliminação de Gauss os seguintes passos são
executados (do ponto de vista da redução de circuitos):

 eliminar o nó

 eliminar os ramos diretamente conectados ao nó eliminado

 interligar todos os nós vizinhos do nó eliminado. Neste ponto, duas situações
podem ocorrer:

• dois nós vizinhos já conectados continuarão assim e os elementos da matriz


correspondentes a esse ramo terão seus valores alterados

• dois nós vizinhos ainda não conectados o serão através de um ramo fictı́cio.
Consequentemente, aparecerão elementos correspondentes a esse ramo
fictı́cio na matriz, em posições que anteriormente eram nulas (fill-ins)

 Exercı́cio

Realize a eliminação de Gauss para a rede a seguir, mostrando as redes reduzidas em


cada passo. Não utilize matrizes na resolução do problema.

1 4

2 7 10
6
3

9 8

– 49 –
 Exemplo

A eliminação de Gauss sob o ponto de vista de eliminação de nós é utilizada na


obtenção de equivalentes externos.

Fronteira (F)

Rede Rede
Interna Externa
(I) .. (E)
.

Área de Interesse

Equivalente externo

Fronteira (F) shunt equivalente

Rede
Interna ligação equivalente
(I) ..
.

injeção equivalente

A idéia é substituir a rede externa (E) por uma rede equivalente que reaja de maneira
semelhante a distúrbios na rede interna (I).
Os nós da rede externa (as injeções de potência) são eliminados (distribuı́das) através
da eliminação de Gauss.

– 50 –
Considerando que os nós são numerados de maneira que aqueles a serem eliminados
apareçam primeiro, tem-se:

1
..
.
k
k +1

0
Yr ..
.

 Exemplo

A transformação Y-∆ é um caso particular da eliminação de Gauss sob o ponto de vista


de eliminação de nós.

4 4

eliminar nó 1

2 3 2 3

– 51 –
Considerando o caso particular em que todas as admitâncias dos ramos do circuito Y
são iguais a 1 pu, tem-se:

 
3 −1 −1 −1
 −1 1 0 0 
Y=
 −1 0 1 0 

−1 0 0 1
Eliminando o nó 1:

Y′ = L · Y
   
1000 3 −1 −1 −1
 1/3 1 0 0   −1 1 0 0 
= 1/3 0 1 0  ·  −1 0 1 0 
  

1/3 0 0 1 −1 0 0 1
 
3 −1 −1 −1
 0 2/3 −1/3 −1/3 
= 0 −1/3 2/3 −1/3 

0 −1/3 −1/3 2/3

Eliminando a linha e a coluna correspondente ao nó 1:

 
3 −1 −1 −1
 0 2/3 −1/3 −1/3 
Yred = 
 0 −1/3 2/3 −1/3 
0 −1/3 −1/3 2/3

que corresponde à matriz admitância do circuito ∆ reduzido. Através de Yred nota-se


que as admitâncias dos ramos do circuito reduzido valem 1/3 pu, ou seja:

YY
Y∆ =
3


– 52 –
3.6 Algoritmo para eliminação de Gauss

◮ Algoritmo para matrizes simétricas e assimétricas:

do k = 1 , (n-1)

alfa = a(k,k) 


a(k,k) = - 1.0 







do i = k , n 

(D e U)


a(k,i) = -a(k,i)/alfa 







end do 

do i = (k+1) , n 



beta = a(i,k) (L)

a(i,k) = -beta/alfa 

do j = (k+1) , n 



 atualização das

a(i,j) = a(i,j) + beta * a(k,j) demais colunas



 da linha i
end do 

end do

end do

a(n,n) = 1.0/a(n,n) → inversão do último


elemento

– 53 –
 Exemplo

Considere a matriz (3 × 3) a seguir.

a11 a12 a13

a21 a22 a23

a31 a32 a33

Executando o algoritmo para k = 1:

(U) 1/a11 −a12/a11 −a13/a11

′ ′
−a21/a11 a22 a23
(L)

′ ′
−a31/a11 a32 a33

atualização

– 54 –
◮ Uma vez conhecida a matriz dos fatores triangulares e dado um vetor independente
b, pode-se obter a solução do problema A · x = b por:

Substituição forward (por coluna)

do k = 1 , n

alfa = b(k)
b(k) = b(k) * a(k,k)

do i = (k+1) , n

b(i) = b(i) + a(i,k) * alfa

end do

end do

Substituição back (por coluna)

do k = n , 2 , -1

do i = (k-1) , 1 , -1

b(i) = b(i) + a(i,k) * b(k)

end do

end do

– 55 –
 Exercı́cio

Considere a rede de 4 nós e 4 ramos a seguir. As admitâncias dos ramos em pu são


fornecidas na própria figura. O nó 4 é tomado como o nó de referência.

1 2 4
1 1

1 1/2

(a) Obtenha a matriz admitância da rede.


(b) Implemente a rotina de obtenção dos fatores triangulares apresentada anteriormente,
e determine a matriz resultante de sua aplicação à matriz do item (a).
(c) Considere o seguinte vetor de correntes nodais:
 T
I= 1 1 1 X
Implemente as rotinas das substituições Forward e Back apresentadas anteriormente
e obtenha a solução do problema I = Y · V , em que V é o vetor das tensões nodais.
Mostre o resultado intermediário ao final da substituição Forward.

– 56 –
◮ Referências

 A.J. Monticelli, “Fluxo de Carga em Redes de Energia Elétrica”, Edgard


Blücher, 1983.

 K. Zollenkopf, “Bi-factorization – basic computational algorithms and


programming techniques”, In: J.K. Reid, Large sparse sets of linear equations,
Academic Press, 1971.

 M. Crow, “Computational Methods for Electric Power Systems”, CRC Press,


2003.

 W.F. Tinney, J.W. Walker, “Direct solutions of sparse network equations by


optimally ordered triangular factorization”, Proceedings of the IEEE, vol.55,
n.11, 1967.

◮ Materiais interessantes

 www.labspot.ufsc.br/˜campagno/Pos.html – Capı́tulo II – Partes 1 e 2

 www.dm.ufscar.br/profs/silvia/AulaGradientesConjugados.pdf

 www.eee.ufg.br/˜colemar/Espars01.pdf

 www.ufmt.br/icet/matematica/geraldo/sela2.pdf

– 57 –

You might also like