Notas Fatbasicas
Notas Fatbasicas
Fatorações Básicas
Prof. Alexandre Salles da Cunha e Profa. Ana Paula Couto
2024/2
1 Introdução
Nesta seção apresentamos algumas fatorações matriciais básicas. Independen-
temente da forma de A ∈ Rm×n (quadrada, quando m = n, ou retangular
esbelta se n < m ou larga se n > m), fatorar uma matriz consiste no processo
algorı́tmico que permite escrever A como produto de outras matrizes com al-
guma propriede ou mesmo topologia particular, mais convenientes para algum
propósito especı́fico.
Por topologia queremos dizer padrão de esparsidade, ou seja, a localização de
uma região da matriz onde são autorizados a estarem localizados seus elementos
não nulos. Para uma dada topologia, fora dessa região especı́fica, todos os
elementos da matriz devem ser nulos. Dois exemplos de topologias de matrizes
são matrizes triangulares inferiores e superiores, definidas como as matrizes
que tem zeros em todas suas entradas acima e abaixo da diagonal principal,
respectivamente. Algumas propriedades de interesse dos fatores podem ser: ter
posto completo, terem colunas ou linhas ortonormais, por exemplo.
Ao longo de todo o curso de ALC, vamos discutir diversas fatorações e algo-
ritmos para computá-las. São elas:
1
V T V = In , U T U = Im e a matriz Σ é uma matriz de zeros, exceto pe-
las r primeiras entradas de sua diagonal, que guarda valores positivos
σ1 ≥ σ2 ≥ · · · σr , sendo r o posto de A.
2
1. Resolver um ou vários sistemas lineares, possivelmente definidos pela mesma
matriz de coeficientes A.
2. Analisar a existência e unicidade das soluções de sistemas lineares.
3. Calcular o determinante de uma matriz quadrada.
4. Conhecer espaços vetoriais associados à matriz: C(A), C(AT ), N (A), N (AT ).
Eventualmente, podemos desejar que as bases para estes espaços sejam
ortonormais. Para tanto, as fatorações empregadas devem levar estes as-
pectos em consideração.
5. Obter o espectro de A, ou seja seus autovetores e, eventualmente, seus
autovetores.
6. Conhecer os valores singulares de A, assim como seus vetores singulares,
de fundamental utilidade para o item abaixo.
7. Aproximar matrizes com muitas colunas ou muitas linhas por matrizes de
posto baixo. Com isso podemos resolver problemas aplicados da Ciência
da Computação em Otimização, em Inteligência Artificial, em Processa-
mento de Imagens e de Sinais, apenas para citar algumas aplicações.
8. As fatorações de matrizes nos permitem reformular problemas de Ma-
temática Aplicada, de uma forma mais conveniente, desde que o pro-
blema seja representado ou aproximado por um sistema linear.
Ax = b
P Ax = P b
LU x = P b
L(U x) = P b
Ly = P b (1)
Ux = y (2)
3
de encontrar Ax = b, onde A é uma matriz quadrada sem nenhuma topologia
particular, no problema de resolver dois sistemas lineares, todos os dois definidos
por matrizes triangulares: primeiro (1) e depois (2).
Vamos mostrar ao longo desta seção que o custo computacional de se fatorar
P A = LU é O(n3 ) e o custo de se resolver um sistema linear onde a matriz
de coeficientes é triangular (inferior ou superior, não importa) é O(n2 ). Então
suponha agora, que precisemos resolver k << n sistemas lineares distintos, de-
finidos pela mesma A. Fatoramos a matriz uma vez, pagando o custo de O(n3 ).
Para resolver os k sistemas lineares, resolvemos dois sistemas triangulares (1) e
(2), para cada um. Então somamos k(O(n2 ) + O(n2 )) ao custo computacional.
Ao fim, o custo computacional total é O(n3 + 2kn2 ) que é O(n3 ) para 2k << n.
Com a discussão acima, mostramos que podemos usar as fatorações do tipo
P A = LU e A = RT T (Cholesky) para resolvermos sistemas lineares de forma
eficiente.
Na próxima seção, vamos apresentar o algoritmo que resolve sistmas linea-
res triangulares inferiores e superiores, ingrediente importante para resolvermos
sistemas lineares mais gerais.
4
lij = 0 : j > i para uma linha i do sistema linear Lx = b, temos:
n
X
lij xj = bi i = 1, . . . , n
j=1
i
X n
X
lij xj + lij xj = bi i = 1, . . . , n
j=1 j=i+1
i−1
X
lij xj + lii xi = bi i = 1, . . . , n
j=1
Pi−1
bi − j=1 lij xj
xi = k = 1, . . . , n
lii
Portanto, se calcularmos x1 , x2 , . . . , xi−1 nesta ordem, usando a expressão
(3) para k = i
Pk−1
bk − j=1 lkj xj
xk = , (3)
lkk
podemos calcular xi com as entradas já calculadas anteriormente x1 , x2 , . . . , xi−1 ,
necessárias na expressão (3). Este algoritmo, conhecido como Algoritmo de
Substituições Sucessivas, é apresentado abaixo na Figura 1.
5
3. 1. -1. 0.
4. 1. -3. 3.
b =
2.
3.
2.
9.
--> [y] = SubsSucessivas(L,b,size(L,1));
--> y’
ans =
1. 2. 3. 4.
Vamos agora mostrar que a complexidade do algoritmo de Substituições
Sucessivas é O(n2 ). O trecho de interesse do algoritmo, isto é, aquele que define
sua complexidade é indicado na Figura (2).
for i=1:n
soma = 0.0;
for k = 1:i-1
soma = soma + L(i,k)*y(k)
end
y(i) = (b(i)-soma)/L(i,i)
end
6
soma = soma + L(i,k)*y(k)
precisamos avaliar g(1) + g(2) + · · · + g(n). Isso porque a estrutura mais interna
será executada tantas vezes quantos forem os valores assumidos de i. Então
podemos escrever a função de complexidade f (n) do algoritmo como:
n
X
f (n) = 2 g(i)
i=1
n X
X i−1
=2 1
i=1 k=1
0 0 0 4
Observe que de forma análoga ao caso triangular inferior, U é triangular
superior significa que uij = 0 : j < i. Feita esta observação, vamos deduzir a
7
expressão do termo xi que nos permite construir o algoritmo de resolução. Para
tanto, considere uma linha i fixa do sistema:
n
X
uij xj = yi i = n, n − 1, . . . , 1
j=1
i−1
X n
X
uij xj + uij xj = yi i = n, n − 1, . . . , 1
j=1 j=i
n
X
uii xi + uij xj = yi i = n, n − 1, . . . , 1
j=i+1
3. 2. 1. 0.
0. 1. 2. 3.
0. 0. -2. 1.
8
0. 0. 0. 4.
ans =
--> x = SubsRetroativas(U,y,size(y,1));
--> x’
ans =
-3. -1. 1. 3.
9
L =
1. 0. 0. 0.
-0.25 1. 0. 0.
0.5 -0.2222222 1. 0.
0.75 0.1111111 1. 1.
U =
12. 9. 12. 12.
0. 2.25 6. 9.
0. 0. -2.6666667 -4.
0. 0. 0. -4.
P =
0. 0. 0. 1.
0. 1. 0. 0.
1. 0. 0. 0.
0. 0. 1. 0.
3 Fatoração A = LU e P A = LU
3.1 Eliminação de Gauss e Fatoração A = LU
Nesta seção, vamos recordar o método de Eliminação de Gauss, assumindo que
não seja necessário efetuar trocas de linhas do sistema linear. Vamos mostrar
que a Eliminação de Gauss produz os fatores desejados U e L que desejamos.
Por razões didáticas, de inı́cio não faremos uso de trocas de linhas do sistema
linear. Esta é uma hipótese não realista, é adotada aqui apenas para facilitar a
exposição inicial. Com isso, faremos a fatoração A = LU de A e, posteriormente,
ao permitirmos a troca de linhas de A, faremos a fatoração P A = LU .
A ideia da Eliminação de Gauss é transformar o sistema linear Ax = b em
outro sistema linear, U x = y, equivalente ao primeiro. Dois sistemas lineares
equivalentes são indicados como
Ax = b ∼ U x = y,
(T3) Substituição de uma linha do sistema pela soma da própria linha mais um
múltiplo de outra linha do sistema linear.
10
Sendo i a linha que será substituı́da e j a linha que será multiplicada por
m, temos que
Xn
aik xk = bi
k=1
é substituı́da por
n
X
(aik + majk )xj = bi + mbj .
k=1
11
[Aj−1 |bj−1 ] seja transformada em uma coluna de uma triangular superior. Essa
é a ideia da operação T3 que faremos sobre as linhas do sistema.
6 7 9 8 3
op 0 , j = 0 (representação
do sistema original)
2 1 1 0 1
4 3 3 1 3
[A|b] = [A0 |b0 ] =
8
7 9 5 7
6 7 9 8 3
op 1 , j = 1, primeira operação de pivoteamento.
Veja que para j = 1 precisamos multiplicar a linha 1 do sistema por
m2,1 = −2, m3,1 = −4, m4,1 = −3, respectivamente, para criarmos ze-
ros nas posições a02,1 , a03,1 , a04,1 , respectivamente. Empregando estes mul-
tiplicadores, ao finalda primeira operação de pivoteamento (op) temos o
2 1 1 0 1
0 1 1 1 1
sistema: [A1 |b1 ] = 0 3 5 5 3 . A primeira coluna de A é uma
1
0 4 6 8 0
0 0 2 4 −4
2
primeiras colunas de A são colunas de uma triangular superior.
op 3 , j = 3. Para estaterceira operação, temos
m4,3 = −1. Ao fina da op 3,
2 1 1 0 1
0 1 1 1 1
temos: [A3 |b3 ] = 0 0 2 2 0 .
0 0 0 2 −4
Veja que ao final de n − 1 = 3 operações, obtivemos o sistema linear
triangular superior acima. Para resolver o sistema linear, resolvemos por
T
substituições sucessivas e encontramos x = −1 1 2 −2
12
A matriz Mj , chamada de matriz de multiplicadores na j−ésima op, é uma
matriz que difere da matriz identidade apenas pela sua j−ésima coluna, nos
elementos das linhas i : i > j, isto é (abaixo da diagonal principal), que recebem
os multiplicadores mij calculados através de (4). A tı́tulo de ilustração, veja a
j−1
forma da matriz de multiplicadores na primeira op, para uma matriz A , com
1 0 0 0
m21 1 0 0
4 linhas M1 = m31 0 1 0
m41 0 0 1
No caso do exemplo que ilustramos, a instanciação da matriz M1 corresponde
à matriz
1 0 0 0
−2 1 0 0
M1 = −4 0 1 0 .
−3 0 0 1
Observe que a matriz Mj é uma triangular inferior, com diagonal unitária.
Seu determiante corresponde ao produto dos elementos em sua diagoanal, de
forma que det(Mj ) = 1 e a matriz admite inversa.
Exercı́cio 3.1 Verifique que a matriz inversa de Mj , Mj−1 é uma matriz iden-
tifidade, exceto pela j− ésima coluna, que recebe o simétrico das entradas de
Mj , nas linhas
abaixo da diagonal principal:
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 ...
0 0 0 0
Mj−1 =
0 0 0 1 0 0 0
0 0 0 −mj+1,j 1 0 0
.. ..
0 0 0 . 0 . 0
0 0 0 −mn,j 0 0 1
13
1 0 0 0 1 0 0 0 1 0 0 0 2 1 1 0 1
0 1 0 0 0 1 0 0 −2 1 0 0 4 3 3 1 3
=
0 0 1 0 0 −3 1 0 −4 0 1 0 8 7 9 5 7
0 0 −1 1 0 −4 0 1 −3 0 0 1 6 7 9 8 3
2 1 1 0 1
0 1 1 1 1
.
0 0 2 2 0
0 0 0 2 −4
14
−1 −1
Mn−2 Mn−1 =
1 0 0 0 0 1 0 0 0 0
.. 0 1 0 0 0
0 . 0 0 0
= 0
..
0 1 0 0
0 0 . 0 0
0 0 −mn−1,n−2 1 0 0 0 0 1 0
0 0 −mn,n−2 0 1 0 0 0 −mn,n−1 1
1 0 0 0 0
..
0 . 0 0 0
= 0
0 1 0 0
0 0 −mn−1,n−2 1 0
0 0 −mn,n−2 −mn,n−1 1
−1 −1
Observe que a matriz resultante do produto Mn−2 Mn−1 tem a seguinte forma:
• Suas primeiras n − 3 colunas são colunas de uma identidade de ordem n.
A mesma observação se aplica para a última coluna, que também é uma
coluna de uma identidade.
15
−1 −1 −1
resultado de Mn−3 Mn−2 Mn−1 :
−1 −1 −1
Mn−3 Mn−2 Mn−1 =
1 0 0 0 0 0 1 0 0 0 0 0
.. ..
0 . 0 0 0 0
0 . 0 0 0 0
=
0 0 1 0 0 0
0 0 1 0 0 0
0 0 −mn−2,n−3 1 0 0
0 0 0 1 0 0
0 0 −mn−1,n−3 0 1 0 0 0 0 −mn−1,n−2 1 0
0 0 −mn,n−3 0 0 1 0 0 0 −mn,n−2 −mn,n−1 1
1 0 0 0 0 0
..
0 . 0 0 0 0
=
0 0 1 0 0 0
0 0 −mn−2,n−3 1 0 0
0 0 −mn−1,n−3 −mn−1,n−2 1 0
0 0 −mn,n−3 −mn,n−2 −mn,n−1 1
A = LU
uT1
| | ... | uT2
A = L1 L2 ... Ln
...
| | ... |
uTn
n
X
= Lj uTj ,
j=1
16
por en uTn (recorde-se de nossa notação que utiliza ei para representar um vetor
n−dimensional de zeros, exceto pela i−ésima entrada que é 1). Veja que para
todo ı́ndice j = 1, . . . , n, as linhas uTj são as linhas pivotais: a linha j da matriz
Aj−1 obtida ao longo da Eliminação de Gauss. Já as colunas de Lj satisfazem:
lij = 0 para i < j, ljj = 1, lij = −mij .
Naturalmente, quando aplicarmos a Eliminação, não temos todos os termos
Lj uTj para j = 1, . . . , n. Estes termos são descobertos ao longo do processo.
Porém, veja que para um determinado ı́ndice j de op, por exemplo, j = 1,
temos
n
X
A= Lk uTk
k=1
n
X
= L1 uT1 + Lk uTk
k=2
n
X
A − L1 uT1 = Lk uTk
k=2
= A2
Pn
A matriz A2 = k=2 Lk uTk é uma soma de n − 2 matrizes de posto 1. Nova-
mente salientamos que, só ao final da Eliminação de Gauss é que dispomos dos
demais termos L2 uT2 , . . . , Ln uTn na fatoração. Mas podemos aplicar a mesma
ideia agora à matriz A2. Veja que a matriz A2 corresponde às últimas n − 1
colunas e linhas da matriz A1 que obtivemos ao final da primeira op na Eli-
minação de Gauss. Então, a linha uT2 é a linha 2 de A1 e a coluna L2 é obtida
calculando-se os multiplicadores pertinentes à segunda op. Incorporando mais
uma op ao processo temos:
n
X
A − L1 uT1 = Lk uTk
k=2
= A2
Xn
A − L1 uT1 − L2 uT2 = Lk uTk
k=3
= A3
Pj−1
Então, a matriz Aj para j = 1, . . . , n é simplesmente A − k=1 Lk uTk , onde
A1 = A. Repetindo o processo por n − 1 ops, temos que
n−1
X
A− Lj uTj = en uTn ,
j=1
Pn−1
o que nos permite escrever A = j=1 Li uTi + en uTn , sendo a fatoração final.
Exemplo 8 Vamos ilustrar a visão de colunas da Fatoração, por meio do exem-
plo da seção anterior, interpretando agora cada op como a subtração de uma
17
matriz de posto 1 que é dada pelo produto externo de uma coluna de L por uma
linha de U (a linha pivotal de Aj−1 ).
1. primeira op
1 vez a linha pivot 1 1 vez a linha pivot 1
l21 vez a linha pivot 1 l21 vez a linha pivot 1
• A=
+A2 = +
l31 vez a linha pivot 1 l31 vez a linha pivot 1
l41 vez a linha pivot 1 l41 vez a linha pivot 1
0 0 0 0
0 × × ×
0 × × ×
0 × × ×
• A3 = L3 uT3 + A4.
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
• A3 =
= 0 0 2 2 +
0 0 2 2 1 0 0 0 0
0 0 2 4 1 0 0 0 2
4. o quarto termo, referente à uma quarta op não necessária na visão por
linhas, mas necessária na visão colunas, corresponde a:
18
0
0
• A4 = L4 uT4 = e4 uT4 =
0 0 0 0 2
L(i,j)*U(j,j:n)
na instrução em estudo corresponde ao produto de um escalar por um vetor n−j
dimensional. Portanto, requer n − j operações aritméticas de ponto flutuante.
Vamos analisar apenas P a complexidadePnadicionada por esta instrução, que é
n−1 Pn
dada então pela soma j=1 i=j+1 k=j+1 1. Para o desenvolvimento que
segue, recorde-se do valor das somas
n
X n(n + 1)
i=
i=1
2
e também
n
X n
i2 = (n + 1)(2n + 1).
i=1
6
Então, a função que determina o número de vezes que a instrução
19
será executada pode ser obtida desenvolvendo-se
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
3 2
Veja que a complexidade adicionada pela instrução é 2n −3n 3
+n
, pois cada
vez que a instrução for executada, serão realizadas uma subtração e uma soma.
Portanto, a fatoração A = LU custa O(n3 ) operações aritméticas, e a constante
do termo cúbico na função de complexidade é 23 .
20
Gauss produziria os seguintes
−17 fatores exatos(sem erros numéricos) L, U abaixo.
1 0 10 1
L= ,U=
1017 1 0 1 − 1017
Considere agora uma condição realista, em que empregamos aritmética de
precisão finita e a precisão da máquina é ϵ ≈ 10−16 . A grandeza 1 − 1017 na
entrada de L não seá representada de forma exata. Ao invés disso, obteremos
o resultado −1017 . Desta forma, os fatores obtidos com ϵ ≈ 10−16 são L̃, Ũ
−17
1 0 10 1
dados por L̃ = , Ũ = , cujo produto é L̃Ũ =
1017 1 0 −1017
−17
10 1
, uma matriz substancialmente distinta de A. Se agora desejarmos
1 0
resolver o sistema linear Ax = b para b = (1, 0)T via L̃Ũ x = b, obteremos
x̃ = (0, 1)T . Porém, a solução verdadeira do sistema linear é x = (−1, 1)T . Ou
seja, a solução numérica e a solução verdadeira são muito distantes. Verifique
o resultado deste experimento numérico no seguinte código scilab.
-->Ltilde = [1 0;1E17 1]
Ltilde =
1. 0.
1.000D+17 1.
-->Utilde = [1E-17 1;0 1-1E17]
Utilde =
1.000D-17 1.
0. -1.000D+17
-->[y] = SubsSucessivas(Ltilde,b,2)
y =
1.
-1.000D+17
-->[x] = SubsRetroativas(Utilde,y,2)
x =
0.
1.
Entretanto, observe que implementarmos o pivoteamento parcial, teremos o re-
sultado correto. Veja o resultado com o uso da função lu do scilab.
-->[x,L,U,P] = ResolveParTriangulares(A,b)
x =
-1.
1.
L =
1. 0.
1.000D-17 1.
U =
1. 1.
0. 1.
P =
0. 1.
1. 0.
A resposta do procedimento ResolveParTriangulares(A,b), ilustrado na Fi-
gura 4, é composta pela solução x, a matriz de permutação P e os fatores L, U ,
21
de forma que P A = LU . A matriz P mostra que, alterando a ordem das li-
nhas da matriz A, o problema foi resolvido. Observe que, diante da troca de
linhas, os fatores L, U foram calculados sem que os erros numéricos inerentes
à computação digital produzissem uma resposta muito diferente da verdadeira.
3.5.2 Fatoração P A = LU
O instrumento que usaremos para representar a troca de linhas de A visando
reduzir os erros numéricos e divisão por zero é o de matriz de permutação.
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 . Duas propriedades importantes
das matrizes de permutação devem ser recordadas aqui. Se P é matriz de
permutação, sua inversa é sua transposta, isto é: P −1 = P T . Uma matriz de
permutação é um caso particular de uma ortogonal (ou unitária). A segunda
propriedade é que o determinante de uma matriz de permutação é (−1)p , onde
p é o número de trocas de linhas necessárias realizadas em P , para que a matriz
resultante destas trocas seja a identidade de mesma ordem.
Defina  como uma matriz que contém as mesmas linhas de A, apenas
apresentadas em ordem diferente. Assuma que as linhas em que são apresentadas
em  seja dada por uma permutação π dos ı́ndices das linhas de A. Então
existe uma matriz de permutação P tal que  = P A. Se A é não singular (logo,
det(A) ̸= 0), então existe uma matriz de permutação P tal que podemos aplicar
o Método de Eliminação de Gauss à matriz P A, sem que ocorra divisão por
zero, no cálculo dos multiplicadores. Logo P A = LU . Assim, a permutação de
linhas resolve o primeiro problema que identificamos, que é a divisão por zero.
Resta-nos eleger algum bom critério para permutar as linhas de A, obtendo P e
P A. Essa matriz P será descoberta ao longo do processo, ao longo da Eliminação
de Gauss.
O critério para definir uma boa P é o seguinte. Desejamos uma P tal que
a matriz L obtida ao se fatorar P A tenha entradas cujos módulos sejam no
máximo iguais a 1. Para garantir esta propriedade, em cada op de ı́ndice j,
a linha pivotal não será necessariamente a linha j de Aj−1 . Vamos comparar
as entradas na coluna j, nas linhas j, j + 1, . . . , n de Aj−1 , e eleger como linha
pivotal p aquela que contiver o maior elemento em módulo naquela coluna. O
pivoteamento é chamado de parcial pois envolve a comparação dos módulos
apenas nas linhas e não na matriz toda, sem que haja troca de colunas de
A também. O 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. Isso implicaria em trocar a ordem de colunas e linhas
e pesquisar o maior elemento dentre O((n − j + 1)2 ) alternativas, elevando o
custo total. Também seriam necessárias duas matrizes de permutação, uma para
troca de linhas, P , e outra para troca de colunas, P̂ , de forma que P AP̂ = LU .
A permutação total não será empregada aqui.
22
Resumindo então o que fazemos na permutação parcial, com troca de linhas:
na j−ésima op, escolhemos como elemento pivô o valor
aj−1 j−1
p,j = max{|ak,j | : k = j, . . . , n}
23
• 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 = 72 , m12 = 3
7
8 7 9 5 7 (E3)
0 7
4
9
4
17
4 − 49 (E4′ )
M2 P2 M1 P1 [A|b] =
(E1′′ )
0 0 − 27 4
7 − 12
7
0 0 − 67 − 27 − 78 (E2′′ )
8 7 9 5 7 (E3)
0 7
4
9
4
17
4 − 94 (E4′ )
4. (op3) j = 3, M2 P2 M1 P1 [A|b] =
(E1′′ )
0 0 − 72 4
7 − 12
7
0 0 − 67 − 27 − 87 (E2′′ )
• ap3 = − 67 , 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 (E3)
0 7
4
9
4
17
4 − 94 (E4′ )
M3 P3 M2 P2 M1 P1 [A|b] =
(E2′′ )
0 0 − 76 − 27 − 87
0 0 0 2
3 − 43 (E1′′′ )
Agora, vamos resolver o sistema linear Ax = b. Observe que a solução de
Ly = P b já é disponı́vel, pois operamos sobre [A|b] e não apenas sobre b. Bas-
taria, portanto, resolvermos U x = y. Entretando, vamos explicitar todos os
fatores obtidos com a fatoração e a resolução dos dois sistemas lineares trian-
gulares, recalculando y.
Os fatores já disponı́veis são P (pois dispomos de pivot) e U .
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
24
• m11 = − 14 , m21 = − 12 , m41 = − 43 , m22 = 27 , m12 = 37 , m13 = − 31 .
1
3
1
• L=
4
1
2 − 27 1
1
4 − 37 1
3 1
25
0
forma triangular (inferior) para eles. uT1 = 2 4 8 L̃1 = 0.5
1
0 1 1
A = L̃1 uT1 + A2 → A2 = 0 1 3
0 0 0
0
0 0 0
A3 = 0 0 2
0 0 0
Veja que neste momento, já podemos escrever a A como soma de matrizes
de rank-1 que acumulamos:
0 1 0 2 4 8
• A = 0.5 1 1 0 1 1
1 0 0 0 0 2
4 Fatoração de Cholesky
A fatoração de Cholesky A = LLT é uma forma particular da fatoração A = LU ,
na qual L = U T e as entradas na diagonal de L são positivas. Isto é, L é
26
triangular inferior e lii > 0 para todo i = 1, . . . , n. A fatoração é possı́vel se e
somente se a matriz A ∈ Sn++ , isto é, se A é simétrica e positiva definida.
A caracterização da positividade de uma matriz simétrica pode ser realizada
de diversas formas. Uma delas consiste em empregar o algoritmo de fatoração de
Cholesky apresentado nesta seção. Se o algoritmo for bem sucedido, chegando
ao final sem efetuar divisão por zero ou radiciação de argumento negativo, o
fator L é produzido e a positividade é caracterizada. Caso contrário, conclui-se
que a fatoração não é possı́vel e que a matriz não é positiva.
Duas são as vantagens da fatoração de Cholesky em relação à Fatoração LU .
A positividade da matriz garante não haver divisão por zero, ou pivot nulo, de
forma que a fatoração é bastante estável numericamente. A segunda é que, em
função de se explorar a simetria de A, o número de operações aritméticas en-
volvidas é aproximadamente a metade das necessárias na Eliminação de Gauss.
De igual forma, há apenas um fator a ser armazenado, L, de forma que a com-
plexidade de memória também é a metade da fatoração LU .
O algoritmo de Fatoração de Cholesky é baseado no seguinte Teorema.
A = LLT
onde L ∈ Rn×n é uma matriz triangular inferior com diagonal positiva. Esta
fatoração é única.
aij = liT lj : i, j = 1, . . . , n
27
ajj =ljT lj
X n
2
= ljk
k=1
j
X n
X
2 2
= ljk + ljk
k=1 k=j+1
j
X
2
= ljk
k=1
j−1
X
2 2
=ljj + ljk
k=1
Veja que o método pode falhar (e com ele a hipótese de positividade) quando
ljj ≤ 0. Se não for esse o caso, para um determinado ı́ndice i > j, temos:
aij =liT lj
X n
= lik ljk
k=1
j
X n
X
= lik ljk + lik ljk
k=1 k=j+1
j
X
= lik ljk
k=1
j−1
X
=lij ljj + lik ljk
k=1
Assim sendo, a ideia pode ser sistematizada da seguinte forma. Para todo
2
j = 1, . . . , n, calculamos o elemento ljj de acordo com (8). Se ljj > 0, calculamos
os elementos lij , para todos os valores de i = j+1, . . . , n, de acordo com (9). Esta
ideia é sistematizada na implementação em scilab, apresentada na Figura 6.
Algumas implementações de Cholesky, por exemplo aquela disponı́vel no pacote
scilab retorna a matriz triangular superior. A implementação apresentada na
Figura 6 retorna a triangular inferior.
28
function [L] = Cholesky(A)
n = size(A,1)
L = zeros(n,n)
for j = 1:n
soma = A(j,j)
for k = 1:j-1
soma = soma - L(j,k)*L(j,k)
end
if soma > 0.0
L(j,j) = sqrt(soma)
else
print("Matriz nao e SPD \n")
end
for i = j+1:n
soma = A(i,j)
for k = 1:j-1
soma = soma - L(i,k)*L(j,k)
end
L(i,j) = soma / L(j,j)
end
end
endfunction
29
4.1 Complexidade da Fatoração de Cholesky
A instrução mais custosa do Algoritmo de Cholesky apresentado na Figura 6 é
n
X n
X j−1
X n
X n
X
1= (j − 1)
j=1 i=j+1 k=1 j=1 i=j+1
Xn
= (n − j)(j − 1)
j=1
Xn
= ((n + 1)j − n − j 2 )
j=1
n(n + 1)2 n
= − n2 − (n + 1)(2n + 1)
2 6
n3 2
= + O(n )
6
Pn Pn
Para a dedução acima, fizemos uso de i=1 i = n(n+1)2 e de i=1 i2 = n6 (n+
1)(2n+1). Veja que o total de operações aritméticas incorridas na instrução deve
ser multiplicado por 2. Portanto, a constante do termo cúbico na complexidade
adicionada pela instrução é 31 .
Quando comparada à complexidade da fatoração A = LU , discutida na
Seção 3.4, verificamos que o termo cúbico na função de complexidade de Cho-
lesky é 13 , enquanto que em LU é 23 . Assim sendo, embora sejam assinton-
ticamente equivalentes (ambos são O(n3 )), para um dado valor de n, o custo
computacional da fatoração de Cholesky é aproximadamente a metade do custo
da Fatoração LU .
30
gulares em blocos):
wT sT
a11 r11 0 r11
A= = (10)
w K s R̂T 0 R̂
Veja que podemos calcular r11 e s facilmente. Na verdade, o conjunto de
operações que apresentamos anteriormente (na versão produto escalar ou linha
da Fatoração de Cholesky) para computar a primeira coluna de L ou (primeira
linha de LT ) corresponde a calcular estas entradas. Veja:
√
r11 = a11
w
s= .
r11
Além disso, sabemos que
R̂T R̂ = K − ssT , (11)
já que o segundo bloco K de A é o produto da segunda linha de blocos do
primeiro fator pela segunda coluna de blocos no segundo fator em (10): K =
R̂T R̂ + ssT . Veja que, ao calcularmos R̂T R̂ = K − ssT estamos essencialmente
subtraindo de A uma matriz de posto 1, L1 LT1 , o produto externo da primeira
coluna de L pela primeira linha de LT , para então fatorarmos o bloco não nulo
da diferença.
Assim, para completar a fatoração, aplicamos a mesma ideia recursivamente,
ao bloco de dimensão (n − 1) R̂T R̂ = K − ssT e assim por diante, até que o
bloco a ser fatorado seja um escalar positivo.
Cabe destacar que podemos adotar esta abordagem pois
++ ++
A ∈ Sn++ → K ∈ Sn−1 ⇐⇒ R̂T R̂ ∈ Sn−1 .
Exemplo 13 Computar a Fatoração de Cholesky A = LLT = RT R de A dada
abaixo por meio da visão de produtos externos, outer Cholesky.
1 −1 3 −4
−1 5 −1 2
A= 3 −1 14 −9
−4 2 −9 22
1. Primeira op, determinamos a primeira linha de LT = R.
√
r11 = a11 = 1
wT
sT = = (−1, 3, −4)
r11
31
4 2 −2
2. Segunda op, desejamos a fatoração de Cholesky de 2 5 3 , ou
−2 3 6
seja, desejamos a segunda linha de LT = R.
√
r22 = 4 = 2
wT
sT = = (1, −1)
2
R̂T R̂ = 5 − (2)(2)T = 1
Compondo
as linhaque calculamos, podemos escrever o fator LT = R =
1 −1 3 −4
2 1 −1 .
2 2
1
32
Entretanto, há limitações para o uso destas fatorações. Quando os sistemas
lineares são malcondicionados, outras fatorações devem ser empregadas. Estas
outras fatorações, seja para a resolução de sistemas lineares ou para outros
propósitos, e a base matemática que as fundamenta é o foco do restante do
curso de ALC.
Porém, antes de apresentarmos estas outras fatorações, devemos definir quais
são estes tipos de sistemas lineares que não devemos esperar que as fatorações
básicas sejam capazes de resolver. Devemos caracterizar os sistemas lineares
Ax = b malcondidicionados, que são definidos por matrizes de coeficientes A
malcondicionadas. Na apresentação desta seção, salvo menção contrária, assu-
mimos que A é não singular e que b é diferente de zero. Assim sendo, o sistema
linear Ax = b admite solução única não nula.
O bom ou o mau condicionamento de um sistem linear Ax = b depende
de uma grandeza associada à matriz de coeficientes: o número de condição da
matriz A, κ(A).
Dada uma norma matricial ∥·∥ induzida por uma norma vetorial p, definimos
o número de condição na norma p como
∥Ai ∥p
κp (A) ≥ , 1 ≤ p ≤ ∞. (13)
∥Aj ∥p
Veja que para i = j, a desigualdade (13) indica que κp (A) ≥ 1, para qualquer
norma matricial induzida por norma vetorial.
33
Para definirmos uma matriz de Vandermonde, precisamos definir um vetor
de pontos ou de dados x = (x1 , . . . , xm )T , com entradas distintas par a par:
xi ̸= xj para qualquer par i ̸= j. Já a expressão do termo geral da matriz de V
associada a este conjunto de dados é vij = xj−1
i para i = 1, . . . , m e j = 1, . . . , n.
Veja o caso quadrado:
1 x1 x21 . . . xn−1
1
1 x2 x22 . . . xn−1
2
V = .
.. .. ..
..
. . .
1 xn x2n ... xn−1
n
Note que para qualquer diferença de magnitude entre a mı́nima e a máxima das
entradas em {x1 , . . . , xm }, a potenciação destas entradas aumenta a diferença
de escala. Usando a expressão (13), fica evidente que tanto H quando V são
malcondicionadas.
34
b + δ(b). Como Ax = b, o sistema anterior pode ser escrito como Aδ(x) =
δ(b) ou equivalentemente δ(x) = A−1 δ(b). Recordamos que sempre usaremos
normas matriciais induzidas por normais matriciais. Assim sendo, usando as
propriedades de normas matriciais induzidas por normas vetoriais, temos que
∥δ(x)∥ ≤ ∥A−1 ∥|δ(b)∥. Aplicando a mesma relação ao sistema não perturbado
1 1
por erros, b = Ax, temos ∥b∥ ≤ ∥A∥|x∥ → ∥x∥ ≤ ∥A∥ ∥b∥ . Combinando as duas
desigualdades obtemos:
∥δ(x)∥ ∥δ(b)∥
≤ ∥A∥∥A−1 ∥
∥x∥ ∥b∥
∥δ(x)∥ ∥δ(b)∥
≤ κ(A) . (14)
∥x∥ ∥b∥
Veja que a expressão acima mostra que κ(A) é uma grandeza que surge
naturalmente quando tentamos relacionar a perturbação relativa nos dados,
∥δ(b)∥ ∥δ(x)∥
∥b∥ , em função da perturbação observada na solução do sistema linear, ∥x∥ .
Daı́ decorre a definição e utilidade do número de condição.
Observe agora que a desigualdade (14) indica que κ(A) funciona como uma
trava: se κ(A) é pequeno e ∥δ(b)∥ ∥δ(x)∥
∥b∥ também é pequeno, não há como esperar ∥x∥
grande. Por outro lado, mesmo que ∥δ(b)∥ ∥b∥ seja pequeno, se κ(A) é grande, a
perturbação da resposta pode ser grande. E o fato de usarmos normas matriciais
induzidas por normas vetoriais, sempre haverá, para uma matriz A e um b, uma
perturbação δ(b) que faça a desigualdade (14) ser satisfeita de forma justa, na
igualdade (o lado direito e esquerdo da desigualdade assumindo valores iguais).
Usando argumentos semelhantes, podemos demonstrar a validade da se-
guinte desigualdade, caso as perturbações ocorram apenas em A e o vetor b
não seja perturbado:
∥δ(x)∥ ∥δ(A)∥
≤ κ(A)
∥x + δ(x)∥ ∥A∥
1
A solução de Ax = b é x = . Por outro lado, a solução do
−1
2 × 10−3
sistema linear perturbado Ax = (b + δb ) é x̂ = . Veja que
−1 × 10−3
−0.998
δx = . Portanto ∥δb∥1 = 1.0 × 10−3 , ∥δx∥1 = 1.997, ∥δx∥ 1
∥δb∥1 =
0.999
1.997 × 10+3 . A perturbação na resposta é cerca de 2000 vezes maior que a
perturbação nos dados.
35
A matriz A do exemplo não é singular, pois det(A) = 1. Porém, verificamos
também que as duas restrições do sistema linear são praticamente linearmente
dependentes. E esse fato nos motiva a produzir uma discussão adicional.
Observe que o número de condição κ(A) é uma propriedade da matriz e
nada tem a ver com a precisão da máquina onde eventualmente resolveremos
a solução do sistema linear. É uma propriedade inexorável da matriz. É dela,
não depende da máquina.
Então por que afirmamos que sistemas lineares malcondicionados são difı́ceis
de serem resolvidos ou de serem fatorados ? Se usarmos aritmética de precisão
infinita, um sistema linear malcondicionado (em que A é inversı́vel) não é pior
do que outro bem condicionado. Porém, no processo de fatoração das ma-
trizes, inevitavelmente calculamos fatores sujeitos a erros numéricos. E estas
perturbações levam a perturbações grandes nas respostas.
No caso de matrizes malcondicionadas, esses erros numéricos são grandes
o suficiente para, muitas vezes, introduzir dependência linear onde não há,
matematicamente, de forma exata, depedência linear. Para ser mais preciso,
recorde-se do exemplo (9) que apresentamos. A matriz A daquele exemplo é
bem condicionada, κ(A)1 = 4. Naquele exemplo, empregamos a fatoração LU
sem troca de linhas e diante disso, o fator Ũ que foi obtido é uma matriz onde as
duas linhas são praticamente linearmente dependentes, quando a matriz A origi-
nal é uma matriz em que suas linhas são claramente linearmente independentes.
E em função disso, sugerimos a troca de linhas, que para matrizes bem condici-
onadas é uma ideia numérica eficaz para produzir soluções com boa qualidade
numérica.
Porém, o potencial de redução de erros numéricos da permutação de linhas
quando a matriz é malcondicionada é limitado. Para uma matriz malcondi-
cionada, mesmo a introdução de mecanismos de pivoteamento resulta na in-
trodução de dependência linear no sistema equivalente U x = y a ser resolvido.
Isso porque as entradas das matrizes Aj−1 : j = 1, . . . , n − 1 que competem
para definir a linha pivotal já são substancialmente diferentes daquelas que se-
riam obtidas se aritmética de precisão infinita tivesse sido empregada. Isso faz
com que mecanismos distintos da Eliminação de Gauss sejam empregados. Os
mecanismos empregados na Eliminação de Gauss para produzir um sistema tri-
angular superior U x = y equivalente a Ax = b, qual seja, empregar combinações
lineares das linhas do sistema e troca de linhas, são propensos a erros.
36
variável t:
n−1
X
p(t) = ai ti
i=0
n−1
X (1 + i)n − 1
p(i + 1) = (i + 1)j =
j=0
i
37
function [A,b] = GeraVandermonde(n)
for i = 1:n
for j = 0:n-1
A(i,j+1) = (1 + i)^j;
end
b(i) = ((1 + i)^n - 1)/i;
end
endfunction
38
-->valoresden’
ans =
5. 8. 10. 15. 20.
-->normas = GeraExperimento(valoresden)
n = 5 1.0000000E+00
n = 8 1.0000001E+00
n = 10 1.0003594E+00
n = 15 5.3951429E+05
n = 20 2.0111339E+18
normas =
1.
1.0000001
1.0003594
539514.29
2.011D+18
39