Você está na página 1de 22

Fatoração PA = LU

Prof. Alexandre Salles da Cunha


Eliminação de Gauss

Matriz no inı́cio da j-ésima operação (após j − 1 operações


completas).
 0 0 0 
a11 a21 ... ... ... ... a1n
1
 0 a22 . . . . . . . .. ... 1
a2n 
 ..
 
.. ..
. .

 . ... ... ... ... 
 .. ..
 
j−1 j−1 j−1
 . . 0 ajj aj,j+1 ... ajn


Aj−1 =  .. .. ..
 
j−1 j−1 j−1 
 . . . aj+1,j aj+1,j+1 ... aj+1,n 
 .. .. ..
 
j−1 j−1 j−1 
 . . . aj+2,j aj+2,j+1 ... aj+2,n 
 .. .. .. .. .. .. ..
 

 . . . . . . . 
j−1 j−1 j−1
0 0 0 an,j an,j+1 ... ann

Os mutiplicadores mj+1,j , . . . , mn,j podem não ser definidos se


j−1
aj,j = 0.

Prof. Alexandre Salles da Cunha Fatoração PA = LU 2 / 22


Outro fator importante

j−1
Ainda que aj,j 6= 0, temos uma dificuldade. A magnitude de
j−1
aj,j pode ser muito pequena comparada à dos demais elementos
da j−ésima coluna de Aj−1 , abaixo da diagonal.

Incremento
 −20de erros
 numéricos.
  Exemplo:
10 1 1
A= ,b =
1 1 0

Prof. Alexandre Salles da Cunha Fatoração PA = LU 3 / 22


Formalizando a troca de linhas

1 Dada uma permutação π = (π1 , π2 , . . . , πn ) dos inteiros


{1, . . . , n}, uma matriz P é uma permutação (de linhas,
associado a π) da matriz identidade In se a i-ésima linha de P for
a πi -ésima linha de In .
2 Se P é matriz de permutação, P −1 = P.
3 Seja  uma matriz que contém as mesmas linhas de A, em
ordem diferente. Então existe uma matriz P de permutação de
linhas da identidade, tal que  = PA.
4 Se A é não singular (logo, det(A) 6= 0), então existe uma matriz
de permutação P tal que podemos aplicar o Método de
Eliminação de Gauss à matriz PA, sem que ocorra divisão por
zero, no cálculo dos multplicadores.
5 Logo PA = LU.

Prof. Alexandre Salles da Cunha Fatoração PA = LU 4 / 22


Introduzindo a troca de linhas, pivoteamento parcial

Pivoteamento parcial: na j−ésima operação, escolhemos como


elemento pivô:
j−1 j−1
ap,j = max{|ak,j | : k = j, . . . , n} e

j−1
p = arg max{|ak,j | : k = j, . . . , n}.
Esta troca é formalizada por uma matriz de permutação Pj .
Pivoteamento total é uma alternativa mais cara: escolhemos o
elemento de maior módulo da submatriz quadrada de Aj−1 que
envolve as colunas e linhas de j até n. Implica em trocar a ordem
de colunas e linhas e pesquisar o maior elemento dentre
O((n − j)2 ) alternativas, elevando o custo total.

Prof. Alexandre Salles da Cunha Fatoração PA = LU 5 / 22


Introduzindo a troca de linhas, pivoteamento parcial

Vamos representar a troca de linhas por meio da


pré-multiplicação de Aj−1 por uma matriz de permutação Pj , que
difere da matriz identidade apenas pelas linhas j e p (p > j): a
linha j recebe a p−ésima linha da identidade e a linha p, a
j−ésima.

Usamos uma estrutura de dados adicional, vetor pivot,


inicializado como pivot(i) = i, i = 1, . . . , n. O valor inteiro
pivot(i) indica o ı́ndice da linha do sistema original representado
na linha i. Com este vetor, ao final do processo, recuperamos a
matriz P.

Prof. Alexandre Salles da Cunha Fatoração PA = LU 6 / 22


Calculando os multiplicadores necessários

Após realizada a troca de linhas na j−ésima operação:

Calculamos (n − j) multiplicadores mij e com eles uma matriz de


multiplicadores Mj .
À linha k ∈ {j + 1, . . . , n}, corresponde o multplicador mij tal
que i indica o ı́ndice da linha original do sistema linear
armazenado na posição k, isto é, pivot(k) = i.
Implicitamente, as operações l-elementares na j−ésima operação
são representadas pela pré-multiplicação de Mj Pj em Aj−1 .

Prof. Alexandre Salles da Cunha Fatoração PA = LU 7 / 22


Exemplo

(op1) j = 1
 
2 1 1 0 1 (E 1)
 4 3 3 1 3 (E 2) 
[A|b] = 
 8

7 9 5 7 (E 3) 
6 7 9 8 3 (E 4)

ap1 = 8, p = 3.
Atualizamos “pivot(1) = pivot(3), pivot(3) = pivot(1)”, trocamos
o conteúdo das linhas 1/3.
Pre-multiplicamos por P1 , que difere de I nas linhas 1 e 3 apenas.
m11 = − 14 , m21 = − 12 , m41 = − 34
 
8 7 9 5 7 (E 3)
 0 −1 −3 −3 −1
2 2 2 2 (E 20 ) 
M1 P1 [A|b] = 
(E 10 ) 

 0 −3 −5 −5 −3
4 4 4 4
0 7
4
9
4
17
4 − 9
4 (E 40 )

Prof. Alexandre Salles da Cunha Fatoração PA = LU 8 / 22


Exemplo

(op2) j = 2
 
8 7 9 5 7 (E 3)
 0 −1 −3 −3 −1
2 2 2 2 (E 20 ) 
M1 P1 [A|b] = 
(E 10 ) 

 0 −3 −5 −5 −3
4 4 4 4
0 7
4
9
4
17
4 − 49 (E 40 )

ap2 = 74 , p = 4.
Trocamos o conteúdo da linha j = 2 pela linha p = 4, que
corresponde a fazer “pivot(2) = pivot(4), pivot(4) = pivot(2)”.
Pré-multplicamos por P2 , que difere de I nas linhas 2 e 4 apenas.
m22 = 27 , m12 = 37
 
8 7 9 5 7 (E 3)
 0 7
4
9
4
17
4 − 94 (E 40 ) 
M2 P2 M1 P1 [A|b] = 
(E 100 ) 

 0 0 − 72 4
7 − 12
7
0 0 − 67 − 27 − 87 (E 200 )

Prof. Alexandre Salles da Cunha Fatoração PA = LU 9 / 22


Exemplo

(op3) j = 3:
 
8 7 9 5 7 (E 3)
 0 7
4
9
4
17
4 − 94 (E 40 ) 
M2 P2 M1 P1 [A|b] = 
(E 100 ) 

 0 0 − 72 4
7 − 12
7
0 0 − 67 − 27 − 87 (E 200 )

ap3 = − 76 , p = 4.
Trocamos o conteúdo da linha j = 3 pela linha p = 4, que
corresponde a fazer “pivot(3) = pivot(4), pivot(4) = pivot(3)”.
Pré-multplicamos por P3 , que difere de I apenas nas linhas 3 e 4.
m13 = − 13
 
8 7 9 5 7 (E 3)
 0 7
4
9
4
17
4 − 49 (E 40 ) 
M3 P3 M2 P2 M1 P1 [A|b] = 
(E 200 ) 

 0 0 − 67 − 72 − 78
0 0 0 2
3 − 34 (E 1000 )

Prof. Alexandre Salles da Cunha Fatoração PA = LU 10 / 22


Para resolver Ax = b

Resolvemos PAx = Pb via LUx = Pb.


 
0 0 1 0
   0 0 0 1 
pivot = 3 4 2 1 → P =   0 1

0 0 
1 0 0 0
 
8 7 9 5
 0 7 9 17 
U= 4 4 4 
 0 0 − 76 − 27 
2
0 0 0 3

m11 = − 14 , m21 = − 12 , m41 = − 43


m22 = 27 , m12 = 3
7
m13 = − 13 .

Prof. Alexandre Salles da Cunha Fatoração PA = LU 11 / 22


Recuperando L a partir dos multiplicadores
A partir dos multplicadores armazenados, como definir L ?
Os valores −mij : j = 1, . . . , k − 1 são empregados na linha k de L,
antes do elemento da diagonal principal; o ı́ndice k satisfaz
pivot(k) = i.

m11 = − 14 , m21 = − 12 , m41 = − 43 , m22 = 27 , m12 = 37 ,


m13 = − 13 .

 
1
3

4 1 
L= 1


2 − 27 1 
1
4 − 37 1
3 1

Prof. Alexandre Salles da Cunha Fatoração PA = LU 12 / 22


Usando os fatores para resolver o sistema

Concluı́da a fatoração, dispomos de L, U e, por meio de


pivot(i) : i = 1, . . . , n, de P.
Ax = b → PAx = Pb → LUx = Pb
      
1 y1 7 7
 3 1   y2   3   −9 
Ly = Pb :  4  4 
  y3  =  3  , y =  − 8 
   
 1 −2 1
2 7 7
1 3 1
4 −7 3 1 y4 1 − 43
      
8 7 9 5 x1 7 −1
 0 7 9 17  
x2
  −9   1 
Ux = y :  4 4 4    4 
 0 0 − 6 − 2   x3  =  − 8  , x =  2
 

7 7 7
2
0 0 0 3 x4 − 43 −2

det(A) = det(U)(−1)p , onde p é o número de trocas de pares de


linhas necessárias para transformar P em I .
det(A) = (8)( 74 )( −6 2 3
7 )( 3 )(−1) = 8

Prof. Alexandre Salles da Cunha Fatoração PA = LU 13 / 22


Sistematizando as operações de forma matricial

Para j = 1, . . . , n − 1, implementamos:
1 Uma troca de duas linhas, sistematizada pela pré-multplicação
por Pj (linhas j e p : p > j de I podem ter sido trocadas)
2 Eliminação propriamente, sistematizada pela pré-multiplicação
por Mj (Mj é uma matriz Identidade, com os multplicadores da
op j, nos elementos da sub-diagonal da coluna j)
Mn−1 Pn−1 . . . M1 P1 A = U

Prof. Alexandre Salles da Cunha Fatoração PA = LU 14 / 22


Sistematizando as operações de forma matricial

Vamos considerar o caso n = 4 antes de generalizar.

M 3 P3 M 2 P2 M 1 P1 A = U

Vamos definir matrizes Mj0 , que dependem de Mj e das matrizes


de permutação na op j e subsequentes, caso existam:
M30 = M3
M20 = P3 M2 P3−1
M10 = P3 P2 M1 P2−1 P3−1
Observe que Mj0 tem a mesma estrutura de Mj (diferem de I na
coluna j abaixo da diagonal), mas com elementos abaixo da
diagonal na coluna j permutados.
Veja que, dadas estas definições, temos:
M3 P3 M2 P2 M1 P1 = (M3 )(P3 M2 P3−1 )(P3 P2 M1 P2−1 P3−1 )P3 P2 P1
= M30 M20 M10 P3 P2 P1
= L−1 P

Prof. Alexandre Salles da Cunha Fatoração PA = LU 15 / 22


Generalizando

Mn−1 Pn−1 Mn−2 Pn−2 . . . M2 P2 M1 P1 A = U

Vamos definir:
0
Mn−1 = Mn−1
0 −1
Mn−2 = Pn−1 Mn−2 Pn−1
···
−1 −1
Mk0 = Pn−1 . . . Pk+1 Mk Pk+1 . . . Pn−1
···
M10 = Pn−1 . . . P2 M1 P2−1 . . . Pn−1
−1

Generalizando temos:
Mn−1 Pn−1 Mn−2 Pn−2 . . . M2 P2 M1 P1 A = U
0
(Mn−1 . . . M10 )(Pn−1 . . . P1 )A = U
L−1 PA = U
L−1 = (Mn−1
0
. . . M10 )
L = (M10 )−1 . . . (Mn−1
0
)−1
P = Pn−1 . . . P1
Prof. Alexandre Salles da Cunha Fatoração PA = LU 16 / 22
Ax = b, PA = LU, PAx = Pb, LUx = Pb, Ly = Pb, Ux = y

function [y] = SubsSucessivasPivot(L,pivot,b,n)


for i=1:n
soma = 0.0;
for k = 1:i-1
soma = soma + L(i,k)*y(k)
end
y(i) = b(pivot(i))-soma; // atencao aqui.
end
endfunction
function [x] = SubsRetroativas(U,y,n)
for i=n:-1:1
soma = 0.0;
for k = i+1:n
soma = soma + U(i,k)*x(k)
end
if (U(i,i) <> 0)
x(i) = (y(i) - soma)/U(i,i);
else
printf(’Matriz U e singular \n’);
end
end
endfunction

Prof. Alexandre Salles da Cunha Fatoração PA = LU 17 / 22


A implementação da fatoração e sua complexidade

1 Substituirá o conteúdo de A por U, na parte triangular superior


de A, e da parte inferior à diagonal de L, abaixo da diagonal de A.
2 Usa duas funções auxiliares:
Para identificar o elemento pivot p em cada coluna j.
Para trocar o conteúdo da linha j pelo conteúdo de p, caso p 6= j.

Prof. Alexandre Salles da Cunha Fatoração PA = LU 18 / 22


Funções auxiliares

function [A,pivot] = TrocaLinha(A,p,j,pivot,n)


for k = 1:n
aux = A(j,k);
A(j,k) = A(p,k);
A(p,k) = aux;
end
auxI = pivot(j);
pivot(j) = pivot(p);
pivot(p) = auxI;
endfunction

function p = EscolhePivot(A,j)
MAX = abs(A(j,j));
p = j;
for k = j+1:n
if (abs(A(k,j)) > MAX)
p = k;
MAX = abs(A(k,j));
end
end
endfunction

Prof. Alexandre Salles da Cunha Fatoração PA = LU 19 / 22


A implementação da fatoração e sua complexidade
Matriz Aj−1 obtida após a troca da linha j pela linha
p = pivot(j)
0 0 0
a11 a21 ... ... ... ... a1n
 
 −mpivot(2),1 1
−mpivot(2),2 ... ... ... ... a2n 
 
 . . .

. . .
 

 . . . ... ... ... ... 

 
 . . 
 . . j−1 j−1 j−1 


 . . −mpivot(j),j−1 ajj aj,j+1 ... ajn 
j−1  
A = . . . 
 . . . j−1 j−1 j−1


 . . . aj+1,j aj+1,j+1 ... aj+1,n 

 
 . . . . . . . 
 . . . . . . . 

 . . . . . . . 

. . . . . . .
 
 
 . . . . . . . 
 . . . . . . . 
j−1 j−1 j−1
−mpivot(n),1 −mpivot(n),2 −mpivot(n),j−1 an,j an,j+1 ... ann

Se ajjj−1 6= 0, faz para todo i = j + 1, . . . , n:

aijj−1 j−1
mpivot(i),j ← − e armazena ai,j = mpivot(i),j
ajjj−1
j−1 j−1
ai,k ← ai,k + mpivot(i),j aj,k : k = j + 1, . . . , n
Prof. Alexandre Salles da Cunha Fatoração PA = LU 20 / 22
Algoritmo PA = LU

function [A,pivot,Det] = DecomposicaoLU(A,n)


for i=1:n pivot(i) = i; end // inicializa pivot
Det = 1;
for j = 1:n-1 // laco principal: OP
[p] = EscolhePivot(A,j);
if (p <> j)
[A,pivot] = TrocaLinha(A,p,j,pivot);
Det = - Det;
end
Det = Det*A(j,j);
if (A(j,j) <> 0.0)
// operacao linha propriamente
for i = j+1:n
m = - A(i,j)/A(j,j);
for k = j+1:n
A(i,k) = A(i,k) + m * A(j,k);
end
A(i,j) = - m;
end // for i
end // if
end // for j
Det = Det*A(n,n);
endfunction

Prof. Alexandre Salles da Cunha Fatoração PA = LU 21 / 22


Complexidade computacional da fatoração PA = LU: O(n3 )

Pn n(n+1) Pn
Lembrando: i=1 i = 2 e i=1 i
2 = n6 (n + 1)(2n + 1).

n−1
X n
X n
X
1 =
j=1 i=j+1 k=j+1
n−1
X n
X
(n − j) =
j=1 i=j+1
n−1
X
(n − j)2 =
j=1
n−1
X n−1
X n−1
X
n2 − 2n j+ j2 =
j=1 j=1 j=1
n−1
X
j2 =
j=1
n−1 2n3 −3n2 +n
n(2n − 1) = 6
6

Prof. Alexandre Salles da Cunha Fatoração PA = LU 22 / 22