Você está na página 1de 22

4

Sistemas lineares: métodos diretos

4.1 Introdução

Os métodos numéricos para solução de sistemas de equações lineares podem ser agrupados
em métodos diretos e métodos iterativos. Dentre os métodos diretos podemos citar a regra de
Cramer e o método de eliminação de Gauss que são bem conhecidos. Existem outros métodos
diretos que vamos estudar nesse capítulo, como o método de decomposição LU e o método de
decomposição Cholesky.

O método de decomposição LU é uma consequência do método de eliminação de Gauss. A


decomposição de Cholesky é uma particularização da decomposição LU . Os métodos de de-
composição são importantes na resolução de sistemas de equações lineares, como veremos a
seguir.

Os métodos iterativos, amplamente empregados para sistemas de grande porte, são resultados
importantes cujas demonstrações utilizam o teorema do ponto fixo de Banach. Estudaremos o
método de Gauss-Jacobi e o método de Gauss-Seidel no próximo capítulo.

55
56 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

4.2 O método de eliminação de Gauss


Consideremos o sistema de equações lineares dado por

a11 x1 + a12 x2 + a13 x3 + · · · + a1m xm = b1


a21 x1 + a22 x2 + a23 x3 + · · · + a2m xm = b2
a31 x1 + a32 x2 + a33 x3 + · · · + a3m xm = b3
.. .. .
. . = ..
an1 x1 + an2 x2 + an3 x3 + · · · + anm xm = bn .

O método de eliminação de Gauss é um método direto para resolver sistemas de equações lin-
eares, consiste em utilizar operações elementares sobre as linhas da matriz ampliada do sistema
para transformar essa matriz ampliada em uma outra equivalente que seja triangular superior.
Uma vez tendo o sistema na forma triangular superior, a solução é obtida pela substituição
inversa.
Dado o sistema Bx = b,
    
a11 a12 ... a1n ... a1m x1 b1
 a21 a22 ... a2n ... a2m   x2   b2 
 
  . = . 
 ... ... ... ... ... ...    ..   .. 
an1 an2 ... ann ... anm xm bn
| {z }
=B

seja A a matriz ampliada do sistema de dimensão n × (m + 1), dada por


 
a11 a12 ... a1n ... a1m b1
 a21 a22 ... a2n ... a2m b2 
A=  ... ... ... ... ... ... .. 

an1 an2 ... ann ... anm bn

Nas operações elementares a serem realizadas a seguir estamos supondo que é sempre possível
obter em cada coluna um elemento não nulo.
(0)
Para iniciar o processo vamos denotar A(0) = A e os seus elementos denotados por aij . Os
multiplicadores são dados por
(0)
ak1
mk1 = (0)
, k = 2, 3, .., n
a11
(0)
A fim de eliminar os elementos ak1 , k = 2, 3, ..., n realizamos as seguintes operações elementares
sobre as linhas

Lk ←− Lk − mk1 L1 , k = 2, 3, ..., n.
4.2. O MÉTODO DE ELIMINAÇÃO DE GAUSS 57

(1)
Após essa etapa obtemos a matriz A(1) cujos elementos são denotados por aij . Note que os
(1)
elementos ak1 = 0, k = 2, 3, ..., n.
(1)
A fim de eliminar os elementos ak2 , k = 3, ..., n precisaremos nessa etapa dos multiplicadores

(1)
ak2
mk2 = (1)
, k = 3, .., n
a22
e realizamos as seguintes operações

Lk ←− Lk − mk2 L2 , k = 3, ..., n.
(2)
Após essa operação obtemos a matriz A(2) cujos elementos são denotados por aij . Note que
(2)
ak2 = 0, k = 3, ..., n.
Continuando esse procedimento, ao final da (n−1)-ésima etapa obteremos uma matriz triangular
superior dada por
 (n−1) (n−1) (n−1) (n−1) (n−1) (n−1)

a11 a12 a13 ..... a1n ...... a1m b1
 (n−1) (n−1) (n−1) (n−1) (n−1) 
 0 a22 a23 ...... a2n ...... a2m b2 
 (n−1) (n−1) (n−1) (n−1) 
A(n−1)

= 0 0 a33 ...... a3n ...... a3m b3 


 0 0 0 ..... ... ...... ... ... 

 ... ... ... ..... ... ...... ... ... 
(n−1) (n−1) (n−1)
0 0 0 ...... ann ...... anm bn

O sistema original é equivalente ao sistema triangular superior obtido ao final desse processo.
Ambos os sistemas possuem o mesmo conjunto solução. Assim, o conjunto solução do sistema
original é a exatamente o conjunto solução do sistema triangular superior que pode ser obtido
por substituição inversa.
Note que um sistema triangular superior

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


a22 x2 + a23 x3 + · · · + a2n xn = b2
a33 x3 + · · · + a3n xn = b3
··· ··· = ···
ann xn = bn

com matriz ampliada dada por


 
a11 a12 a13 . . . a1n | b1

 0 a22 a23 . . . a2n | b2 

M = 0 0 a33 . . . a3n | b3 
.. .. .. . .. 
. . . ..

 . . . | . 
0 0 0 . . . ann | bn
58 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

vemos que a solução, obtida por substituição inversa, é dada por


bn
xn =
ann
bn−1 − an−1,n xn
xn−1 =
an−1,n−1
··· = ···
b1 − a12 x2 − a13 x3 − · · · − a1n xn
x1 =
a11
Analogamente, em um sistema triangular inferior a solução é obtida por substituição direta.
Deixamos como exercício para o leitor:
• Exemplo 4.2.1
Considere o sistema de equações lineares

10x + 5y + 2z + 1w = 1
2x + 8y − 2z + 1w = 2
4x + 5y + 20z + 1w = 3
2x − 3y + 22z + 2w = 1
A matriz ampliada desse sistema é
 
10 5 2 1 1
 2 8 −2 1 2 
A=
 4 5 20 1 3 

2 −3 22 2 1
Vamos triangularizar a matriz ampliada A utilizando o procedimento apresentado acima.
Os multiplicadores são
2
m21 = = 0.2,
10
4
m31 = = 0.4,
10
2
m41 = = 0.2.
10
As operações elementares para anular as entradas de posição a21 , a31 , a41 são as seguintes:

2
L2 ← L2 − m21 L1 = L2 − L1 ,
10
4
L3 ← L3 − m31 L1 = L3 − L1 ,
10
2
L4 ← L4 − m41 L1 = L4 − L1 .
10
4.2. O MÉTODO DE ELIMINAÇÃO DE GAUSS 59

Após essas operações teremos a seguinte matriz A(1)


 
10 5 2 1 1
 0 7 −2.4 0.8 1.8 
A(1) = 
 0 3 19.20 0.6 2.6 

0 −4 21.6 −0.2 0.8


Para o próximo passo os multiplicadores são
3
m32 = = 0.42857,
7
−4
m42 = = −0.5714
7
(1) (1)
As operações elementares para anular as entradas de posição a32 , a42 são as seguintes:
3
L3 ← L3 − m32 L2 = L3 − L2 ,
7
4
L4 ← L4 − m42 L2 = L4 + L2 .
7
Após essas operações teremos a seguinte matriz A(2)
 
10 5 2 1 1
 0 7 −2.4 0.8 1.8 
A(2) = 
 0 0

20.2286 0.25714 1.82857 
0 0 20.2286 2.25714 1.82857
Finalmente, para o próximo e último passo o multiplicador é
20.2286
m43 = = 1.
20.2286
(2)
As operações elementares para anular as entradas de posição a43 são as seguintes:
L4 ← L4 − m43 L3 = L4 − L3 .
Após essas operações teremos a seguinte matriz A(3)
 
10 5 2 1 1
 0 7 −2.4 0.8 1.8 
A(3) = 
 0 0 20.2286 .25714 1.82857


0 0 0 2 0
Esse é um sistema triangular superior:

10x + 5y + 2z + 1w = 1
7y − 2.4z + 0.8w = 1.8
20.2286z + 0.25714w = 1.82857
2w = 0
60 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

Donde obtemos que

w = 0
1.82857 − 0.25714w
z = = 0.090395
20.2286
1.8 + 2.4z − 0.8w
y = = 0.288136
7
1 − 5y + 2z − w
x = = −0.0621469
10
Resumo:
(k)
Em cada passo k denotamos por A(k) = (aij ) a matriz obtida após este passo.
Os passos são os seguintes:
ak1
Passo 1: eliminar ak1 , k = 2, 3, . . . , n, utilizando os multiplicadores mk1 = , k = 2, 3, . . . , n
a11
obtendo a matriz A(1)
(1)
Passo 2: eliminar na matriz A(1) , os elementos ak2 , k = 3, 4, . . . , n utilizando os multiplicadores
(1)
ak2
mk2 = (1) , k = 3, . . . , n.
a22
Prosseguindo até atingir o passo (n − 1) cujo objetivo é eliminar an,n−1
(1) (2) (n−1)
Os elementos a11 , a22 , a33 , . . . , ann são chamados de pivot e os números
(k−1)
aki
mki = (k−1)
, k = 1, 2, . . . , n − 1, i = k + 1, . . . , n (4.2.1)
akk
são chamados de multiplicadores.

4.3 Usando Maple: sistema triangular


O seguinte exemplo em Maple determina a solução de um sistema de equações lineares trian-
gular superior Bx = b. A sintaxe é subinversa(A), onde A é matriz ampliada do sistema. O
procedimento testa se o sistema é triangular superior ou não.

> restart:
> with(linalg):
> subinversa:=proc(a)
local n, x, i, j, t, soma:
n:=rowdim(a): # dimensão do espaço linhas.
# Teste para sistema triangular.
for i from 2 to n do
for j from 1 to i-1 do
if a[i,j]<>0 then ERROR(‘Este sistema não é triangular superior‘) fi
od:
od:
4.4. ESTRATÉGIAS DE PIVOTEAMENTO 61

# Substituição inversa.
x[n]:=a[n,n+1]/a[n,n]:
for j from 1 to n-1 do
soma:=0:
for t from n-j+1 to n do
soma:=soma+a[n-j,t]*x[t]:
od:
x[n-j]:=(a[n-j,n+1]-soma)/a[n-j,n-j]:
od:
# Escrevendo vetor solução.
vector( [seq(x[s], s=1..n)] ):
end:
## Exemplo
> A:=matrix([ [2,1,3,2], [0,3,-5,8] , [0,0,2,-2] ]);
> subinversa(A);

4.4 Estratégias de pivoteamento


(k)
Supomos até agora que em cada etapa do processo de eliminação de Gauss os elementos aii
(k−1)
fossem não nulos. Se em algum passo akk = 0 deve-se então procurar na coluna k, dentre os
elementos que ainda atuam no processo (os elementos ajk , j = k + 1, . . . , n), um elemento não
(0) (1) (n−2)
nulo e efetuar a permutação entre as linhas. Os elementos a11 , a22 , . . . , an−1,n−1 são chamados
de elementos pivot.
Há dois problemas neste método que é instável:
(1i) o pivot nulo (a divisão nesse caso é impossível) e
(2i) pivot próximo de zero (a divisão nesse caso aumenta o erro de arredondamento drastica-
mente).
Nestes casos deve-se adotar uma estratégia de pivoteamento. Essa estratégia reduz erros de
arredondamento nas operações realizadas com as linhas da matriz.

A estratégia de pivoteamento parcial consiste em tomar para pivot o maior elemento (em mó-
dulo) dentre os elementos da coluna que ainda atuam no processo. No pivoteamento
completo ou total, toma-se, em cada passo, como pivot o maior elemento (em módulo) den-
tre os elementos da matriz que ainda atuam no processo de eliminação de Gauss. O
pivoteamento completo é pouco utilizado, pois envolve muitas comparações que o torna com-
putacionalmente trabalhoso, consumindo tempo e memória da máquina.
Pode-se provar que as estratégias de pivoteamento parcial e pivoteamento completo minimizam
erros.
Para ilustrar essa técnica, vejamos um exemplo em que a estratégia de pivoteamente não é
empregada e a solução obtida é absurda. Em seguida, a estratégia de pivoteamente é empregada
e a solução obtida é mais próxima do valor exato.
É claro que se utilizarmos precisão infinita, não haverá erros de arredondamento, por isso nesse
62 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

exemplo trabalhamos com 4 dígitos na casa decimal.

0.0001x − 1y = −0.9999
1.4142x + y = 2.4142

Vemos claramente que x = y = 1 é a solução. Mas utilizando eliminação de Gauss (sem


estratégias de pivoteamento), obtemos
" #
0.0001 −1 −0.9999
0.0 14100.0 14100.0

cuja solução y = 1.0, x = 20000 não satisfaz ao sistema original.


Agora realizando pivoteamento, que nesse caso, resume-se em permutar as duas linhas, obtemos
o sistema de matriz ampliada " #
1.4142 1 2.4142
0.0001 −1 −0.9999
donde obtemos a matriz triangular superior
" #
1.4142 1 2.4142
0.0 −1.0 −1.0

cuja solução é x = y = 1.
Esse exemplo simples mostra a necessidade da utilização de estratégias de pivoteamento.

Exercício 4.4.1 1. O sistema de equações lineares

x1 + x2 + 3x4 = 4,
−x2 − x3 − 5x4 = −7,
3x3 + 13x4 = 13,
−13x4 = −13

é triangular superior, use substituição inversa para obter a solução.

2. Use o método de eliminação de Gauss para obter a solução do sistema de equações


lineares

x1 + x2 + 3x4 = 4,
2x1 − x2 − x3 + x4 = 1,
3x1 − x2 − x3 + 2x4 = −3,
−x1 + 2x2 + 3x3 − x4 = 4.
4.5. USANDO MAPLE: O MÉTODO DE ELIMINAÇÃO DE GAUSS 63

3. O sistema de equações lineares tem solução exata x1 = 10.000 e x2 = 1.000,

0.003000x1 + 59.14x2 = 59.17,


5.291x1 − 6.130x2 = 46.78.

Use o processo de eliminação de Gauss (sem pivoteamento) para obter a solução deste
sistema usando aritmética com quatro dígitos e arredondamento.
Agora use estratégia de pivoteamento para resolver o sistema e compare as soluções
obtidas.

4.5 Usando Maple: o método de eliminação de Gauss


O seguinte procedimento em Maple, EGauss− pivot, para o método de eliminação de Gauss usa
estratégia de pivoteamento parcial para determinar a solução de um sistema de equações lineares
Ax = b. A sintaxe é EGauss− pivot(A,b), onde A é matriz do sistema e b é o vetor independente.

> EGauss_pivot :=
proc(A,b)
local i,j,k,n,pivot,ind_pivot,ratio,x,Ab;
# i,j,k são indices.
# n é a dimensão da matriz.
# pivot é o pivot.
# ind_pivot é o índice da linha que contém o pivot.
# ratio - usado para armazenar a razão entre dois elementos da matriz
# quando realizar a eliminação.
# Ab é a matriz aumentada.
n := rowdim(A);
Ab := augment(A,b);
for i from 1 to n do
pivot := abs(Ab[i,i]);
ind_pivot := i;
for j from i+1 to n do
if (abs(Ab[j,i]) > pivot) then
pivot := abs(Ab[j,i]);
ind_pivot := j;
fi;
od;
if (pivot = 0) then
#Todos os elementos abaixo RETURN(‘Matriz singular‘); #da linha
atual são nulos.
fi;
if (ind_pivot <> i) then #devemos trocar as linhas.
troca(Ab,i,ind_pivot); #troca linhas.
64 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

fi;
# Eliminação dos elementos na coluna i de todas as linhas
# abaixo do atual.
for j from i+1 to n do
ratio := Ab[j,i]/Ab[i,i];
for k from i to n+1 do
Ab[j,k] := Ab[j,k] - ratio*Ab[i,k];
od;
od;
od;
# a matriz agora é triangular superior e podemos calcular
# a solução por substituição inversa
x := vector(n);
for i from n by -1 to 1 do
x[i] := Ab[i,n+1];
for j from i+1 to n do
x[i] := x[i] - Ab[i,j]*x[j];
od;
x[i] := x[i]/Ab[i,i];
od;
print(‘Matriz aumentada reduzida a triangular superior ‘,
‘é:‘, Ab);
print(‘A solução é :‘, x);
end:
#Exemplo
> A := matrix(3,3,[[-1.414214,2,0],[1,-1.414214,1],[0,2,-1.414214]]);
> b := vector(3,[1,1,1]);
> z := EGauss_pivot(A,b);

4.6 Decomposição LU
A decomposição LU é uma variante do método de eliminação de Gauss. Dizemos que uma
matriz An×n admite uma decomposição LU , se existem matrizes L e U , triangulares inferior e
superior, respectivamente, tais que A = LU. Conhecer a decomposição em LU de uma matriz A
é útil e facilita na resolução de sistemas de equações lineares Ax = b. Esta é a grande utilidade
dos métodos de decomposição ou fatoração.
Vejamos como isso acontece, é muito simples.
Suponha que desejamos obter a solução do sistema de equações lineares Ax = b, mas sabendo
que A se fatora como A = LU . Então resolvemos dois sistemas de equações lineares mais
simples:
Ly = b (4.6.2)
U x = y. (4.6.3)
4.6. DECOMPOSIÇÃO LU 65

Note que o sistema (4.6.2) é simples (pois é um sistema triangular inferior) e o sistema (4.6.3)
é também simples (pois é um sistema triangular superior). Para a solução do sistema (4.6.2)
usamos substituição direta, enquanto que para a solução do sistema (4.6.3) usamos substituição
inversa.

Como saber se uma matriz admite decomposição LU ? Para responder a essa questão precisamos
de alguns conceitos.
Dizemos que uma matriz An×n é diagonalmente dominante se
n
X
|aii | ≥ |aij |, i = 1, 2, .., n.
j=1,j6=i

A matriz A é estritamente diagonalmente dominante se


n
X
|aii | > |aij |, i = 1, 2, .., n.
j=1,j6=i

Teorema 4.6.1 Toda matriz estritamente diagonalmente dominante tem inversa. Além disso,
o processo de eliminação de Gauss pode ser realizado sem a necessidade de permutação de linhas
ou colunas.

Lembramos que a cada operação elementar sobre as linhas de uma matriz A, corresponde uma
matriz chamada elementar E tal que EA é o resultado desta operação. A matriz elementar E
é obtida da matriz identidade realizando sobre ela a mesma operação elementar realizada sobre
a matriz A.
No método de eliminação de Gauss, realizamos operações elementares sobre a matriz A com
o objetivo de triangularizá-la, obtendo em cada passo as matrizes

A = A(0) , A(1) , ..., A(n−1)


sendo A(n−1) triangular superior. Logo, podemos notar do processo de eliminação de Gauss, que
a matriz triangular superior A(n−1) é obtida por meio de um produto de matrizes elementares:

A(n−1) = En−1 En−2 ...E2 E1 A.


Ou seja,
A = (En−1 En−2 ...E2 E1 )−1 A(n−1) = (E1−1 E2−1 ...En−1
−1
)A(n−1) .
Note que A(n−1) é triangular superior. Se evitarmos permutações de linhas ou colunas sobre A,
a matriz dada por (E1−1 E2−1 ...En−1
−1
) é triangular inferior com 1 na diagonal principal (produto
de triangulares inferiores com 1 na diagonal é uma matriz triangular inferior com 1 na diagonal).
Estas observações são a base para a demonstração desse resultado.
O teorema acima na verdade dá um processo para construir as matrizes L e U : a matriz L é
obtida a partir dos multiplicadores mij que você armazena durante o processo de eliminação de
Gauss, sendo mii = 1; a matriz U é a matriz triangular superior obtida ao final do processo de
eliminação de Gauss.
66 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

Uma versão mais simples do teorema acima é a seguinte:

Teorema 4.6.2 Se o método de eliminação de Gauss pode ser realizado sobre An×n sem trocas
de linhas ou colunas, então A pode ser escrita como A = LU, onde L = (mij ) é triangular
inferior com mii = 1, e U = (uij ) em que U = A(n−1) matriz triangular superior.

Outro importante resultado é o seguinte teorema.

Teorema 4.6.3 Se An×n é uma matriz com todos os determinantes de suas submatrizes prin-
cipais diferentes de zero, então, existe uma única matriz triangular inferior L = (mij ) (estes são
os multiplicadores dados em (4.2.1)) com mii = 1, e uma matriz triangular superior U = (uij )
em que U = A(n−1) tal que A = LU.

Demonstração: A demonstração é por indução sobre a dimensão n da matriz A. Primeira-


mente vamos provar que o resultado vale para n = 1.Nesse caso, A = [a11 ] , e portanto L = [1]
, U = [u11 ] e a11 = u11 .

Suponha que a decomposição seja válida para toda matriz até ordem k = n − 1 que tenha
subdeterminantes
 principais
 não nulos, isto é, An−1 = Ln−1 Un−1 .   
An−1 s Ln−1 0 Un−1 y
Seja A = e de modo análogo sejam L = eU= .
r a x 1 0 unn
 nn 
Ln−1 × Un−1 Lk−1 y
O produto LU = deve ser igual a A. Isso só é possível se,
xUn−1 xy + unn

An−1 = Ln−1 × Un−1


s = Lk−1 y
r = xUn−1
ann = xy + unn

Como An−1 = Ln−1 × Un−1 por hipótese e Ln−1 , Un−1 são não-singulares, então temos

y = L−1
k−1 s
−1
x = rUn−1
unn = ann − xy.

Isso conclui a prova. 


Veja [10] para outros resultados.
Reforçando: (i) Nas matrizes estritamente diagonalmente dominantes A, os sistemas Ax = b
podem ser resolvidos pelo método de eliminação de Gauss sem a necessidade de permutar linhas
ou colunas.
(2i) Se An×n é uma matriz com todos os determinantes de suas submatrizes principais diferentes
de zero, então o método de eliminação de Gauss pode ser aplicado sem a necessidade de permutar
linhas ou colunas.
4.6. DECOMPOSIÇÃO LU 67

• Exemplo 4.6.4 A matriz dada por


 
7 1 2 2
 
 1 4 0 1 
A=
 2 1 8 1


 
1 1 1 7

É estritamente diagonalmente dominante. Segue que existem matrizes triangular inferior L e


superior U tais que A = LU . De fato,
  
1 0 0 0 7 1 2 2
  27 
 1/7 1 0 0  0 7
−2/7 5/7 
A=
 2/7 5

202 8 

 27
1 0  
 0 0 27 27 
21 659
1/7 2/9 202
1 0 0 0 101

• Exemplo 4.6.5 A matriz do exemplo 4.2.1 não é estritamente diagonalmente dominante,


mas os seus subdeterminates principais são 10.0, 70.0 e 1416.0 e portanto admite decomposição
LU . De fato,
    
10.0 5.0 2.0 1.0 1 0 0 0 10.0 5.0 2.0 1.0
    
 2 8 −2 1   0.20 1 0 0  0 7.0 −2.4 0.8 
 =  
 4 5 20 1   0   20.2286 0.257143 
   0.4 0.428571 1  0 0 
2 −3 22 2 0.2 −0.571429 1.0 1 0 0 0 2.0

Exercício 4.6.6 1. Verifique se A admite decomposição LU. Em caso afirmativo, deter-


mine esta decomposição, onde
 
7 1 2 2
 
 1 4 0 1 
A=
 2 1 3 1


 
1 1 1 7

2. Resolva o sistema de equações lineares usando decomposição LU,

x1 + x2 + 3x4 = 4,
2x1 + x2 − x3 − 5x4 = −7,
3x1 − x2 − x3 + 2x4 = −3,
−x1 + 2x2 + 3x3 − x4 = 4.
68 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

3. A matriz A abaixo tem a11 = 0, então não tem uma decomposição LU,
 
0 1 −1 1
 1 1 −1 2 
A= 
 −1 −1 1 2 
1 2 0 2

mas permutando as linhas E1 com E2 e E3 com E4 obtemos uma matriz à que admite
uma decomposição LU. Determine P tal que à = P A, decomponha à = LU e finalmente
escreva A = P −1 LU.

4.7 Usando Maple: decomposição LU


Exemplo de procedimento em Maple para a decomposição LU .

> restart:with(linalg):
> LU := proc(A,L,U)
local i,j,k,n,razao;
# i,j,k são índices.
# n é a dimenão da matriz
# razao usado para armazenar os multiplicadores
n := rowdim(A);
L := matrix(n,n,0);
U := matrix(n,n);
U := copy(A);for i from 1 to n do
if (U[i,i] = 0) then RETURN(‘Não existe decomposição LU para A‘);
fi;
L[i,i] := 1;
for j from i+1 to n do
razao := U[j,i]/U[i,i];
L[j,i] := razao;
for k from i to n do
U[j,k] := U[j,k] - razao*U[i,k];
od;
od;
od;
print(‘A matriz L é:‘, L);
print(‘A matriz U é:‘, U);
end:
#exemplo
> A := matrix(3,3,[[3,2,1],[1,-1,-1],[4,-3,-3]]);
> LU(A,L,U);
4.8. DECOMPOSIÇÃO CHOLESKY 69

4.8 Decomposição Cholesky


A decomposição de Cholesky procura decompor uma matriz A na forma A = LLT , onde L
é uma matriz triangular inferior com elementos da diagonal principal estritamente positivos.
Para tanto, exige-se muito mais da matriz A.
Uma matriz A é dita definida positiva se A é simétrica e se xT Ax > 0, para todo x 6= 0.
Por exemplo, a matriz
 
2 1 0
 
A=  1 2 1 

0 1 2

é simétrica e além disso


  
2 1 0 x
[xyz] 1 2 1
   y  = x2 + y 2 + z 2 + (x + y)2 + (y + z)2 > 0.
0 1 2 z

mostrando que é positiva definida.


Também a matriz simétrica " #
2 1
A=
1 3

é definida positiva, pois disso


  
2 1 x
[xy] = x2 + 2y 2 + (x + y)2 > 0.
1 3 y

O seguinte resultado dá um critério que ajuda a decidir se uma matriz é positiva definida.

Teorema 4.8.1 (a) Se An×n é uma matriz simétrica, então A possui n autovalores reais e n
autovetores ortonormais.
(b) Uma matriz simétrica A é definida positiva se, e somente se, seus autovalores são reais e
positivos.
(c) Uma matriz simétrica A é definida positiva se, e somente se, cada uma de suas submatrizes
principais têm determinante positivo.
(d) Uma matriz simétrica A é definida positiva se, e somente se, o processo de eliminação de
Gauss pode ser realizado sem permutação de linhas ou colunas e tem todos os elementos pivots
positivos.

Teorema 4.8.2 (Cholesky) Uma matriz simétrica A é definida positiva se, e somente se,
pode ser fatorada como LLT , onde L é uma matriz triangular inferior com elementos positivos
na diagonal.
70 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

Como obter a matriz L do método de Cholesky? Tomemos uma matriz simétrica e impomos
que ela se decomponha como LLt .
    
a11 a21 ... an1 l11 0 0 0 ... 0 l11 l21 ... lk1 ... ln1
 a21 a22 ... an2   l21 l22 0 0 ... 0  0 l22 ... lk2 ... ... ln2 
 . .. .. .. 
  . .. .. ..
  
 .
.   .. 0  0 0 ... ... ... ... 

 . . . . . 0 . 
=
... 0   0. 0 ... lkk ... ... lnk 
 
ak1 ak2 ... akn  lk1 lk2 ... lkk 
 . .. .. ..   . .. .. .. ..   .. .. .. .. .. .. 
 .. . . .   .. . . . . 0  . . . . . . 
an1 an2 ... ann ln1 ln2 .. lnk ... lnn 0 0 ... 0 0 lnn

A maneira mais prática para obter os coeficientes (lij ) é começando pela primeira coluna, depois
para a a segunda coluna e assim por diante.
Coluna 1: (aj1 ). Efetuando o produto acima obtemos:
   
2
a11 l11
 a21   l21 l11 
   
 ..  =  .. 
 .   . 
an1 ln1 l11

então

l11 = a11
aj1
lj1 = , j = 2, 3, ..., n
l11

Coluna 2: (aj2 ). De modo análogo.


   
a21 l11 l21
 a22   l2 + l2 
   21 22 
 a32   l31 l21 + l32 l22 
 = 
 ..   .. 
 .   . 
an2 ln1 l21 + ln2 l22

então obtemos (já conhecemos l21 e l11 )


q
2
l22 = a22 − l21
aj2 − lj1 l21
lj2 = , j = 3, 4, ..., n
l22

Coluna k: (ajk ).
Note que nesse passo já são conhecidos todos os elementos lik , i = 1, 2, . . . , k − 1. Efetuando o
4.9. O ALGORITMO PARA A DECOMPOSIÇÃO CHOLESKY 71

produto obtemos
   
ak1 l11 l1k
 ak2   l21 l1k + l22 l2k 
   
 ..   .. 
 .   . 
   2 2 2 2 
akk   lk1 + lk2 + lk3 + ... + lkk 
 . = .. 
 ..   . 
   
 a   l l + l l + ... + l l 
 kj   j1 k1 j2 k2 jk kk 
 .   . 
 ..   .. 
ank ln1 lk1 + ln2 lk2 + ... + lnk lkk
donde obtemos
2 2 2 2
akk = lk1 + lk2 + lk3 + ... + lkk
akj = lj1 lk1 + lj2 lk2 + ... + ljk lkk , j = k + 1, k + 2, . . . , n

ou ainda,
v
q u k−1
u X
2 2 2 2 2
lkk = akk − (lk1 + lk2 + lk3 + ... + lk,k−1 ) = takk − lki
i=1
h Pk−1 i
ajk− i=1 lji lki
lkj = , j = k + 1, k + 2, ...n.
lkk

4.9 O Algoritmo para a decomposição Cholesky


Apresentamos a seguir o algoritmo para a decomposição Cholesky.

Dados: dimensão n, entradas ai,j , 1 ≤ i ≤ n, 1 ≤ j ≤ n.



Passo 1: Seja l11 = a11
aj1
Passo 2: Para j = 2, . . . , n seja lj1 = l11
.

Passo 3: Para i = 2, . . . , n − 1 faça passo 4 e passo 5.

Passo 4: Seja
i−1
! 12
X
2
lii = aii − lik
k=1
72 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

Passo 5: Para j = i + 1, . . . , n seja


 Pi−1 
aji − k=1 ljk lik
lji =
lii
Passo 6: Seja
n−1
! 12
X
2
lnn = ann − lnk .
k=1

Passo 7: Imprima lij , i = 1, . . . , n; j = 1, . . . , n.

4.10 Usando Maple: decomposição Cholesky


Vejamos um exemplo de procedimento em Maple para o método de decomposição Cholesky.
Como vimos, resolver um sistema de equações lineares Ax = b via decomposição LU pode ser
simplificado quando A é uma matriz simétrica e positiva definida. Dizemos que uma matriz A
é positiva definida se para todo vetor não nulo x de Rn tem-se xAxT > 0. Se além disso, A for
simétrica, isto é, aij = aji , então existe uma única matriz triangular inferior L, com diagonal
positiva, tal que A = LLt . Dessa peculiaridade podemos deduzir um algoritmo mais simples
para resolver um sistema Ax = b. O procedimento Cholesky abaixo verifica apenas a simetria da
matriz A. A sintaxe do programa é: Cholesky( A ). Se A for uma matriz quadrada (simétrica
positiva definida) então o programa calcula a matriz triangular inferior L. Se A for uma matriz
ampliada de um sistema, com parte principal simétrica positiva definida, o procedimento calcula
a solução do sistema via decomposição Cholesky.
> restart:with(linalg):
> Cholesky:=proc(a)
local i, j, k, s, t, n, soma, c, x, y:
n:=rowdim(a):
# Verificando se é simétrica
for i from 1 to n do
for j from 1 to n do
if a[i,j]<>a[j,i] then ERROR(‘A matriz não é simétrica‘) fi:
od:
od:
c:=matrix(n,n):
# Determinando a coluna j
for j from 1 to n do
soma:=0:
for k from 1 to j-1 do
soma:=soma+c[j,k]^2
od:
c[j,j]:=sqrt(a[j,j]-soma):
4.10. USANDO MAPLE: DECOMPOSIÇÃO CHOLESKY 73

for i from j+1 to n do


soma:=0:
for k from 1 to j-1 do
soma:=soma+c[i,k]*c[j,k]
od:
c[i,j]:=(a[i,j]-soma)/c[j,j]
od:
od:
# Decompor A ou resolver Ax=b ?
if rowdim(a)=coldim(a) then
# Completando os zeros
for i from 1 to n do
for j from i+1 to n do
c[i,j]:=0:
od
od:
# Escrevendo a matriz triangular inferior C.
print(‘A matriz L é: ‘,op(c)):
else
# Resolvendo Cy=b por substituição direta.
y:=vector(n):
y[1]:=a[1,n+1]/c[1,1]:
for s from 2 to n do
soma:=0:
for t from 1 to s-1 do
soma:=soma+c[s,t]*y[t]:
od:
y[s]:=(a[s,n+1]-soma)/c[s,s]:
od:
# Resolvendo C^Tx=y por substituição inversa.
x:=vector(n):
x[n]:=y[n]/c[n,n]:
for s from 1 to n-1 do
soma:=0:
for t from n-s+1 to n do
soma:=soma+c[t,n-s]*x[t]:
od:
x[n-s]:=(y[n-s]-soma)/c[n-s,n-s]:
od:
# Escrevendo a solução x.
print(‘a solução é: ‘,op(x)):
fi:
end:
74 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

#Exemplos
> A:=matrix([[1, 2, 3], [2, 5, 7], [3, 7, 26]]);Cholesky(A);

Exercício 4.10.1 1. Determine se a matriz admite a decomposição de Cholesky, em caso


afirmativo determine esta decomposição.
 
4 2 −4
A =  2 10 4 
−4 4 9

2. Determine se a matriz admite a decomposição de Cholesky, em caso afirmativo determine


esta decomposição.  
1 1 0
B = 1 2 −1
0 −1 3

3. Use decomposição de Cholesky para obter as soluções dos sistemas Ax = b e Bx = b,


1
onde A e B são as matrizes acima e b = 2 .
5

4. Use o método de Cholesky para decompor a matriz A como um produto LLt , onde L é
triangular inferior,  
4 −1 1
A = −1
 4.25 2.75 
1 2.75 3.75

5. Use o método de Cholesky para decompor A, onde:


   
  4 1 1 1 6 2 1 −1
2 −1 0  1 3 −1 1   2 4 1 0 
a) A =  −1 2 −1  b) A =   1
 c) A =  
−1 2 0   1 1 4 −1 
0 −1 2
−1 0 −1 3 −1 0 −1 3

6. Seja A uma matriz simétrica de ordem n. Verifique que


X n
n X n
X X
xT Ax = aij xi xj = aii x2i + 2 aij xi xj .
i=1 j=1 i=1 i>j

4.11 Resumo do capítulo


Neste capítulo apresentamos os principais métodos diretos para resolução de sistemas de
equações lineares.
4.11. RESUMO DO CAPÍTULO 75

1. Método de eliminação de Gauss;

2. Estratégia de pivoteamento;

3. Método de decomposição LU;

4. Método de decomposição Cholesky.


76 CAPÍTULO 4. SISTEMAS LINEARES: MÉTODOS DIRETOS

Você também pode gostar