Você está na página 1de 6

Decomposição de Cholesky

• Matriz definida positiva

Definição: Se 𝐴𝑛×𝑛 é uma matriz quadrada e 𝑣𝑛×1 é um vetor coluna não nulo, dizemos
que 𝐴 é uma matriz definida positiva se satisfaz ambas as condições abaixo:

(i) A é simétrica
(ii) 𝑣 𝑇 𝐴𝑣 > 0, ∀𝑣 não nulo

Obs1. Note que 𝑣 𝑇 ∙ 𝐴 ∙ 𝑣 é um escalar, pois


𝑇
𝑣1×𝑛 ∙ 𝐴𝑛×𝑛 ∙ 𝑣𝑛×1 = 𝑐1×1

Obs2. Se 𝑣 𝑇 = [𝑥1 , 𝑥2 , ⋯ , 𝑥𝑛 ] é um vetor não nulo, então 𝑥12 + 𝑥22 + ⋯ + 𝑥𝑛2 ≠ 0

Exemplo: Mostre, matematicamente, que a matriz abaixo é definida positiva.

2 1
𝐴=[ ]
1 2

(i) Verificar se é simétrica

2 1
𝐴𝑇 = [ ]=𝐴
1 2

(ii) Verificar se 𝑣 𝑇 𝐴𝑣 > 0

𝑥 2𝑥 + 𝑦
[𝑥 𝑦] ∙ [2 1] ∙ [ ] = [𝑥 𝑦] ∙ [ ]
1 2 𝑦 𝑥 + 2𝑦

= 2𝑥 2 + 𝑥𝑦 + 𝑦𝑥 + 2𝑦 2

= 𝑥 2 + 2𝑥𝑦 + 𝑦 2 + 𝑦 2 = 𝑥 2 + (𝑥 + 𝑦)2 + 𝑦 2 > 0

Obs3. Na demonstração matemática todas as potências devem ser pares e todas as


parcelas devem ter sinal positivo.

Exercício: Mostrar que a matriz é definida positiva pela definição matemática.

1 2
𝑀=[ ]
2 5

Exemplo: Mostrar que a matriz é definida positiva pela definição matemática

2 1 1
𝐴 = [1 2 1]
1 1 1

(i) Verificar se é simétrica


2 1 1
𝑇
𝐴 = [1 2 1 ] = 𝐴
1 1 1

(ii) Verificar se 𝑣 𝑇 𝐴𝑣 > 0

2 1 1 𝑥 2𝑥 + 𝑦 + 𝑧
[𝑥 𝑦 𝑧 ] ∙ [1 2 1] ∙ [𝑦] = [𝑥 𝑦 𝑧] ∙ [𝑥 + 2𝑦 + 𝑧]
1 1 1 𝑧 𝑥+𝑦+𝑧

= (2𝑥 2 + 𝑥𝑦 + 𝑥𝑧) + (𝑥𝑦 + 2𝑦 2 + 𝑦𝑧) + (𝑥𝑧 + 𝑦𝑧 + 𝑧 2 )

= 2𝑥 2 + 2𝑥𝑦 + 2𝑥𝑧 + 2𝑦𝑧 + 2𝑦 2 + 𝑧 2

Obs.
(𝑥 + 𝑦 + 𝑧)2 = 𝑥 2 + 𝑦 2 + 𝑧 2 + 2(𝑥𝑦 + 𝑥𝑧 + 𝑦𝑧)

Logo:

2 1 1 𝑥
[𝑥 𝑦 𝑧 ] ∙ [1 2 1] ∙ [𝑦] = (𝑥 + 𝑦 + 𝑧)2 + 𝑥 2 + 𝑦 2 > 0
1 1 1 𝑧

Computacionalmente a definição matemática se torna inviável de ser implementada,


porém, existem definições alternativas de fácil aplicação. Vamos ver uma delas.

Definição alternativa 1: 𝐴𝑛×𝑛 é definida positiva se,


além de simétrica, os determinantes de todas as 𝑛
submatrizes principais (menores principais), 𝐴𝑖×𝑖 , 𝑖 =
1,2, ⋯ , 𝑛, forem positivos.

Obs. O determinante da submatriz 𝐴1×1 é o próprio


elemento 𝑎11 , ou seja, 𝑑𝑒𝑡(𝐴1×1 ) = 𝑎11

Exemplo: Verificar se 𝐴 é definida positiva.

2 −1 0
𝐴 = [−1 2 −1]
0 −1 2
2 −1 0
𝑇
𝐴 = [−1 2 −1] = 𝐴
0 −1 2

𝑑𝑒𝑡(𝐴1×1 ) = 2 > 0

2 −1
𝑑𝑒𝑡(𝐴2×2 ) = | |= 4−1= 3> 0
−1 2
2 −1 0
𝑑𝑒𝑡(𝐴3×3 ) = |−1 2 −1| = 8 − 2 − 2 = 4 > 0
0 −1 2

Logo, a matriz é definida positiva.

Exemplo: Verificar se 𝐴 é definida positiva.

−2 −1 0
𝐴 = [−1 2 −1]
0 −1 2

A matriz não é definida positiva, pois 𝑎11 = −2 < 0

A Definição 1, embora de fácil aplicação, é caracterizada, computacionalmente, por uma


verificação lenta se aplicada em matrizes de grande porte. Vejamos:

Matlab

clear
clc

A=input('Entre com uma matriz quadrada:');

[i,j]=size(A);

tic

for n=1:i
if det(A(1:n,1:n))>0
if n==i
disp('MATRIZ DEFINIDA POSITIVA')
end
else
disp('NÃO É DEFINIDA POSITIVA')
break
end
end

toc

• Decomposição de Cholesky

✓ Ao contrário da fatoração LU, Cholesky tem decomposição única.

✓ Somente para matrizes definidas positivas (método muito restritivo)

Cholesky

Se 𝐴 é uma matriz definida positiva, então ela pode ser fatorada por:

𝐴 = 𝐿𝐿𝑇 𝑜𝑢 𝑈 𝑇 𝑈
Obs. Para os exemplos ilustrativos utilizaremos sempre a decomposição pela matriz
triangular superior (𝐴 = 𝑈 𝑇 𝑈) para fins de conferência com o Matlab.

Exemplo: Aplicar a decomposição de Cholesky.

9 6
𝐴=[ ]
6 5

Primeiro, verificamos que 𝐴 é definida positiva, pois a matriz é simétrica, e 𝐴1×1 = 9 >
0 e 𝑑𝑒𝑡(𝐴) = 45 − 36 = 9 > 0

Matriz 𝑈 genérica:

𝑎 𝑏
𝑈=[ ]
0 𝑐

Aplicando o método:

𝑎 0 𝑎 2
𝑈𝑇 𝑈 = [ ][
𝑏
] = [𝑎 𝑎𝑏 ] = [9 6] = 𝐴
𝑏 𝑐 0 𝑐 𝑎𝑏 𝑏 + 𝑐2
2 6 5

ATENÇÃO: Na extração da raiz quadrada considerar somente o valor positivo.

𝑎2 = 9 ⇒ 𝑎 = 3

𝑎𝑏 = 6 ⇒ 𝑏 = 2

𝑏2 + 𝑐 2 = 5 ⇒ 𝑐 = 1

3 2
𝑈=[ ]
0 1

Checando:
3 0 3 2 9 6
𝑈𝑇 𝑈 = [ ][ ]=[ ]=𝐴
2 1 0 1 6 5

Matlab:

chol(A): Apresenta a matriz 𝑈 da decomposição de Cholesky.

Solução de sistemas lineares

𝐴𝑥 = 𝑏 𝑇 𝑈𝑇 𝑦 = 𝑏
{ ⇒ 𝑈 𝑈𝑥 = 𝑏 ⇒ {
𝐴 = 𝑈𝑇 𝑈 𝑦 = 𝑈𝑥

Note que criamos o vetor auxiliar 𝑦. Vai ser necessário resolver 2 sistemas, mas como
eles são triangulares, são rápidos de resolver (igual à Fatoração LU). Devemos seguir os
seguintes passos:
1º passo: Obter a matriz 𝑈

2º passo: Calcular o vetor 𝑦 com a relação 𝑈 𝑇 𝑦 = 𝑏

3º passo: Calcular o vetor 𝑥 com a relação 𝑦 = 𝑈𝑥

Exemplo: É possível resolver o sistema 𝐴𝑥 = 𝑏, pelo método de Cholesky? Em caso


afirmativo, resolva.

25 15 −5 70
𝐴 = [ 15 18 0 ]; 𝑏 = [ 48 ]
−5 0 11 −21

Primeiramente, precisamos mostrar que 𝐴 é simétrica e definida positiva (fica como


exercício!). Sendo assim:

1º passo: Calcular 𝑈

𝑎 0 0 𝑎 𝑏 𝑐 𝑎2 𝑎𝑏 𝑎𝑐 25 15 −5
𝑇
𝑈 𝑈 = [𝑏 𝑑 0 ] [0 𝑑 𝑒 ] = [𝑎𝑏 𝑏2 + 𝑑2 𝑏𝑐 + 𝑑𝑒 ] = [ 15 18 0 ] = 𝐴
𝑐 𝑒 𝑓 0 0 𝑓 𝑎𝑐 𝑏𝑐 + 𝑑𝑒 𝑐2 + 𝑒2 + 𝑓2 −5 0 11

𝑎 = 5; 𝑏 = 3; 𝑐 = −1; 𝑑 = 3; 𝑒 = 1; 𝑓 = 3

5 3 −1
𝑈 = [0 3 1]
0 0 3

2º passo: 𝑈 𝑇 𝑦 = 𝑏

5 0 0 𝑦1 70 𝑦1 = 14
[ 3 3 0] [𝑦2 ] = [ 48 ] ⇒ 𝑦2 = 2
−1 1 3 𝑦3 −21 𝑦3 = −3

Note que o sistema é triangular, e é resolvido de forma rápida.

3º passo: 𝑦 = 𝑈𝑥

5 3 −1 𝑥1 14 𝑥1 = 2
[0 3 1 ] [𝑥2 ] = [ 2 ] ⇒ 𝑥2 = 1
0 0 3 𝑥3 −3 𝑥3 = −1

Solução: (2,1, −1)


O Matlab não tem um comando específico para resolver sistemas lineares por Cholesky,
apenas realiza a decomposição. É necessário, além de implementar os 3 passos acima,
implementar uma rotina de checagem para verificar se a matriz é definida positiva.

Matlab (sem rotina de checagem)

A=[25 15 -5;15 18 0;-5 0 11];


b=[70;48;-21];

U = chol(A); % 1o Passo

y = U'\b; % 2o Passo
sol = U\y % 3o Passo

Exercício: Mostre que o sistema pode ser resolvido pelo método de Cholesky e resolva-
o usando Cholesky.

9𝑥1 + 6𝑥2 − 3𝑥3 + 3𝑥4 = 12


6𝑥1 + 20𝑥2 + 2𝑥3 + 22𝑥4 = 64
{
−3𝑥1 + 2𝑥2 + 6𝑥3 + 2𝑥4 = 4
3𝑥1 + 22𝑥2 + 2𝑥3 + 28𝑥4 = 82

Você também pode gostar