M´
etodos Num´
ericos
Renato Martins Assun¸c˜ao
DCC - UFMG
Solu¸c˜
ao de sistema diagonal
O sistema definido por
A = 1 0 0 0 3 0 0 0 5 b = −1 6 −15 ´ e equivalente a 1x1 = −1 3x2 = 6 5x3 = −15
A solu¸c˜ao ´e muito simples x1 = −1 1 = −1 x2 = 6 3 = 2 x3 = −15 5 = −3
Algoritmo para sistema diagonal
Listagem 1: Solu¸c˜ao de sistema diagonal
dado A, b for i = 1, . . . , n
xi = bi/aii
end
Matrizes triangulares
Dois exemplos de matrizes triangulares 4 × 4:
L = 3 0 0 0 1 1 0 0 0 1 2 0 1 0 7 1 e U = 2 1 0 2 0 2 −4 3 0 0 1 −1 0 0 0 0
Triangular inferior: somente os elementos abaixo da diagonal principal podem ser 6= 0.
Triangular superior: somente aqueles acima podem ser 6= 0.
Matrizes triangulares
As matrizes triangulares inferior e superior (gen´ericas) s˜ao
L = l11 0 . . . 0 l21 l22 . . . 0 .. . ... . .. ... ln1 ln2 . . . lnn e U = u11 u12 . . . u1n 0 u22 . . . u2n .. . ... . .. ... 0 0 . . . unn
com lii 6= 0 e uii 6= 0 para todo i .
L: Lower
Matrizes triangulares
Sistemas triangulares tamb´em s˜ao resolvidos facilmente: O sistema triangular inferior
Ly = b e o sistema triangular superior
Ux = c s˜ao facilmente resolvidos por:
substitui¸c˜ao sucessiva (forward) (sistema inferior)
substitui¸c˜ao reversa (retroativa ou backward) (sistema superior)
Solu¸c˜
ao de sistemas triangulares
A = −2 1 2 0 3 −2 0 0 4 b = 9 −1 8 ´ e equivalente a Ax = b ou −2x1 + x2 + 2x3 = 9 3x2 + −2x3 = −1 4x3 = 8Solu¸c˜
ao de sistemas triangulares
−2x1 + x2 + 2x3 = 9 3x2 + −2x3 = −1 4x3 = 8 ou −2 1 2 0 3 −2 0 0 4 x1 x2 x3 = 9 −1 8 Resolva em ordem reversa, a ´ultima equa¸c˜ao sendo resolvida primeiro:
x3 = 8 4 = 2 x2 = 1 3(−1 + 2x3) = 1 3(−1 + 2 × 2) = 3 3 = 1 x1 = 1 −2(9 − x2− 2x3) = 1 −2(9 − 1 − 2 × 2) = 4 −2= −2
Solu¸c˜
ao de sistemas triangulares
Resolver um sistema triangular superior para obter x1, x2, . . . , xn:
substitui¸c˜ao reversa, retroativa ou backward.
Listagem 2: substitui¸c˜ao reversa
dado A (4 superior), b xn= bn/ann for i = n − 1, . . . , 1 s = bi for j = i + 1, . . . , n s = s − aijxj end xi = s/aii end
Backward Substitution no Scilab
−→ Melhor trocar para o Scilab←−
function x = TriSup(U,b)
// Sistema triangular superior: Substituicao retroativa // Input: Matriz triangular superior U, e vetor b // Output x = solucao de U*x = b.
n = length(b); x = zeros(n,1); x(n) = b(n)/U(n,n); for i = (n-1):-1:1 s = b(i); for j = (i+1):n s = s - U(i,j)*x(j); end
Usando a fun¸c˜
ao subsretro
A = [5 5 6; 0 4 3; 0 0 1];
b = [5; 3; 1]; // note: vetor coluna sol = TriSup(A,b)
sol = - 0.2 0. 1.
E se entrarmos com matriz A que tenha um zero na diagonal? Ou com matriz A que n˜ao seja quadrada?
Usando a fun¸c˜
ao subsretro
A = [5 5 6; 0 0 3; 0 0 1]; // Diagonal com elemento nulo b = [5; 3; 1];
sol = TriSup(A,b); !--error 27
Divis~A£o por zero...
at line 10 of function TriSup called by : sol = TriSup(A,b);
Acrescentando checks e mensagens de erro
function x = TriSup(U,b) ... n = length(b); [m,p] = size(U); if p ~= m,error("A matriz de entrada nao eh quadrada.") end
if n ~= m,
error("Matriz e vetor tem dimensoes incompativeis.") end
if prod(diag(U))==0
error("Diagonal da matriz tem elemento nulo.") end
x = zeros(n,1); x(n) = b(n)/U(n,n);
Acrescentando checks e mensagens de erro
-->A=[5 5 6; 0 0 3; 0 0 1]; b=[5; 3; 1; 4]; sol=TriSup(A,b); !--error 10000
Matriz e vetor tem dimensoes incompativeis. at line 12 of function TriSup called by : sol = TriSup(A,b);
-->A=[5 5 6; 0 4 3; 0 0 1]; b=[5; 3; 1; 4]; sol=TriSup(A,b); !--error 10000
Matriz e vetor tem dimensoes incompativeis. at line 12 of function TriSup called by : sol = TriSup(A,b);
-->A=[5 5 6; 0 4 3; 0 0 1; 3 2 1]; b=[5; 3; 4]; sol=TriSup(A,b); !--error 10000
Vetorizando em Scilab
Algoritmo e sua implementa¸c˜ao: explorando particularidades da linguagem Scilab
O la¸co (loop)
for j = (i+1):n vai embora e j vira um vetor!
...(omitindo cabecalho e mensagens de erro) n = length(b);
x = zeros(n,1); x(n) = b(n)/U(n,n); for k = (n-1):-1:1
j = k+1:n; // indice j eh um VETOR de indices x(k) = (b(k) - U(k,j)*x(j))/U(k,k);
Vetorizando em Scilab
Mesmo a instru¸c˜ao x(n) = b(n)/U(n,n); pode ser omitida.
Fazemos k come¸car em n.
Quando k=n, temos j = [], um objeto vazio, de efeito nulo e assim
U(n,j)*x(j) n˜ao acrescenta nada no numerador de x(k) quando
k=n.
...(omitindo cabecalho e mensagens de erro) x = zeros(n,1); for k = n:-1:1 j = k+1:n; x(k) = (b(k) - U(k,j)*x(j))/U(k,k); end endfunction
N´umero de opera¸c˜oes para resolver um sistema triangular
floating point operation = adi¸c˜ao, subtra¸c˜ao, multiplica¸c˜ao ou divis˜ao. FLOP
Considere um sistema com n equa¸c˜oes e n inc´ognitas. Quanto tempo (FLOPS) toma?
O tempo exato depende da m´aquina.
O que nos interessa ´e comparar diferentes algoritmos na mesma m´aquina: s´o nos interessam as diferen¸cas relativas, que ser˜ao as
mesmas em todas as m´aquinas.
Soma dos primeiros ´ımpares
De novo, soma dos primeiros ´ımpares
N´umero de opera¸c˜oes para resolver um sistema triangular superior
Comece no canto inferior: 1 div (ou floating point operation = FLOP) linha -2: 1 mult, 1 adi, 1 div, ou 3 FLOPS = (2 × 2 − 1)
linha -3: 2 mult, 2 adi, 1 div, ou 5 FLOPS = (2 × 3 − 1) linha -4: 3 mult, 3 adi, 1 div, ou 7 FLOPS = (2 × 4 − 1) ..
.
linha -n: 2n − 1 FLOPS
Total de FLOPS: soma dos primeiros ´ımpares: 1 + 3 + . . . + (2n − 1)
Pn j =1(2j − 1) = 2 Pn j =1j − Pn j =11 = 2 n(n+1)− n = n2.
FLOPS para resolver um sistema triangular com n equa¸cˆoes
Sistema triangular superior ou inferior com n equa¸cˆoes: precisamos de
n2 FLOPS.
Suponha que uma m´aquina toma x segundos para resolver um
sistema triangular com n equa¸c˜oes.
O que acontece se o sistema dobrar de tamanho passando a ter 2n equa¸c˜oes.
Ele vai tomar (2n)2 FLOPS, o que significa 22 = 4 vezes mais que o sistema com n.
Se o sistema tiver 10n equa¸c˜oes ele vai demorar 102n2 FLOPS, ou 102 = 100 vezes mais.
E quando A n˜
ao for triangular?
⇒ Elimina¸c˜ao gaussiana (ou m´etodo de escalonamento)
O objetivo ´e transformar um sistema quadrado arbitr´ario em um sistema
triangular superior equivalente, de modo que possa ser facilmente resolvido com substitui¸c˜ao reversa.
A solu¸c˜ao formal para Ax = b, em que A ´e uma matriz n × n ´e x = A−1b
Solucionar
x1+ 3x2 = 5
2x1+ 4x2 = 6
Vamos subtrair 2 vezes a primeira equa¸c˜ao da segunda equa¸c˜ao
x1+ 3x2 = 5
−2x2 = −4
Este novo sistema ´e equivalente ao primeiro.
Isto ´e, os dois sistemas possuem as mesmas solu¸c˜oes.
O segundo est´a na forma triangular superior, e pode ser resolvido por subs-titui¸c˜ao reversa.
Ao realizar a elimina¸c˜ao gaussiana `a m˜ao, podemos evitar copiar o xi usando
uma nota¸c˜ao abreviada. Por exemplo, para resolver:
A = −3 2 −1 6 −6 7 3 −4 4 b = −1 −7 −6
Forme o sistema aumentado
˜ A = [A b] = −3 2 −1 −1 6 −6 7 −7 3 −4 4 −6
A barra vertical dentro da matriz aumentada ´e apenas um lembrete de que
Some 2 vezes a linha 1 `a linha 2, e some (1 vez) a linha 1 `a linha 3 ˜ A(1) = −3 2 −1 −1 0 −2 5 −9 0 −2 3 −7
Subtraia (1 vez) a linha 2 da linha 3
˜ A(2) = −3 2 −1 −1 0 −2 5 −9 0 0 −2 2
O sistema transformado est´a agora na forma triangular superior ˜ A(2) = −3 2 −1 −1 0 −2 5 −9 0 0 −2 2
Solucione por substitui¸c˜ao reversa para obter
x3 = 2 −2 = −1 x2 = 1 −2(−9 − 5x3) = 2 x1 = 1 −3(−1 − 2x2+ x3) = 2
Resumo: Elimina¸c˜
ao gaussiana
Usamos elimina¸c˜ao gaussiana quando a matriz A do sistema A n˜ao for triangular.
Resolver um sistema via elimina¸c˜ao gaussiana implica em dar DOIS passos.
Primeiro: Elimine elementos para reduzir `a forma triangular superior. Segundo: Resolva o sistema triangular superior (que precisa de n2
flops).
Comece com a matriz aumentada [A|b]: x x x x x x x x x x x x x x x x x x x x
Os x ’s representam n´umeros, e n˜ao s˜ao necessariamente os mesmos valores. Comece a elimina¸c˜ao usando a primeira linha como a linha pivˆo e o primeiro
elemento da primeira linha como o elemento pivˆo:
x x x x x x x x x x x x x x x x x x x x
Elimine elementos abaixo do elemento pivˆo na primeira coluna. x0 indica um valor que foi alterado uma vez.
x x x x x x x x x x x x x x x x x x x x =⇒ x x x x x 0 x0 x0 x0 x0 x x x x x x x x x x =⇒ x x x x x 0 x0 x0 x0 x0 0 x0 x0 x0 x0 x x x x x =⇒ x x x x x 0 x0 x0 x0 x0 0 x0 x0 x0 x0 0 x0 x0 x0 x0
O elemento pivˆo ´e agora o elemento da diagonal na segunda linha. Elimine elementos abaixo do elemento pivˆo na segunda coluna. x00 indica um valor que foi alterado duas vezes.
x x x x x 0 x’ x0 x0 x0 0 x0 x0 x0 x0 0 x0 x0 x0 x0 =⇒ x x x x x 0 x’ x0 x0 x0 0 0 x00 x00 x00 0 x0 x0 x0 x0 =⇒ x x x x x 0 x’ x0 x0 x0 0 0 x00 x00 x00 0 0 x00 x00 x00
O elemento pivˆo ´e agora o elemento da diagonal na terceira linha. Elimine elementos abaixo do elemento pivˆona terceira coluna. x000 indica um valor que foi alterado trˆes vezes.
x x x x x 0 x0 x0 x0 x0 0 0 x” x00 x00 0 0 x00 x00 x00 =⇒ x x x x x 0 x0 x0 x0 x0 0 0 x” x00 x00 0 0 0 x000 x000
Resumo
Elimina¸c˜ao gaussiana ´e um processo ordenado para transformar uma matriz aumentada em uma forma triangular superior equivalente. A opera¸c˜ao de elimina¸c˜ao no k-´esimo passo ´e
˜
aij = ˜aij − (˜aik/˜akk)˜akj, i > k, j ≥ k
Elimina¸c˜ao requer trˆes loops aninhados.
O resultado da fase de elimina¸c˜ao ´e representada pela imagem a seguir. x x x x x x x x x x x x x x x x x x x x =⇒ x x x x x 0 x0 x0 x0 x0 0 0 x00 x00 x00 0 0 0 x000 x000
Listagem 3: elimina¸c˜ao sucessiva (forward) input A, b for k = 1, . . . , n − 1 for i = k + 1, . . . , n for j = k + 1, . . . , n aij = aij − (aik/akk)akj end bi = bi − (aik/akk)bk aik = 0 end end
N˜ao h´a necessidade de realmente calcular zeros: aik = 0 sempre. Esta ´e
uma das raz˜oes para tomarmos j = k + 1, . . . , n.
Listagem 4: elimina¸c˜ao sucessiva (forward) dado A, b for k = 1, . . . , n − 1 for i = k + 1, . . . , n xmult = aik/akk for j = k + 1, . . . , n aij = aij − (xmult)akj end bi = bi − (xmult)bk aik = 0 end end
Implementando em Scilab
−→ Melhor trocar para o Scilab←−
function x = ElimGauss(A,b)
... (cabecalho e mensagens de erro) ... Aum = [A,b]; // matriz aumentada
for j = 1:n-1 for i = j+1:n
xmult = Aum(i,j)/Aum(j,j); // pivo eh A(j,j) Aum(i,j:n+1) = Aum(i,j:n+1)-xmult*Aum(j,j:n+1); // alteramos toda a linha i de Aum
end end
x = TriSup(Aum(:,1:n), Aum(:,n+1)) endfunction
FLOPS para resolver um sistema via EG
Considere o sistema Ax = b onde A tem dimens˜ao n × n.
Para zerar o termo na posi¸c˜ao (2, 1) de A:
calcule o multiplicador xmult: 1 FLOP
multiplique cada um dos n − 1 termos da primeira linha de A por xmult e subtraia da segunda linha: 2 ∗ (n − 1) FLOPS
multiplique b1por xmult e subtraia de b2.
Total: 1 + 2(n − 1) + 2 = 2n + 1
Para zerar o termo na posi¸c˜ao (3, 1) de A: tamb´em 2n + 1 FLOPS O mesmo em todas as demais linhas.
Assim, para zerar os termos da primeira coluna na EG: (2n + 1)(n − 1) FLOPS.
FLOPS para zerar a segunda coluna em EG
Zeramos os termos da 1a. coluna na EG com (2n + 1)(n − 1) FLOPS. Para zerar os n − 2 termos da 2a coluna precisamos de
(2n − 1)(n − 2) FLOPS
Para zerar os n − 3 termos da 3a coluna precisamos de (2n − 3)(n − 3) FLOPS
Etc. at´e a pen´ultima quando vamos precisar de (2 ∗ 2 + 1)(1) FLOPS Total: n−1 X i =1 (n − i )(2n + 1 − 2(i − 1)) = 2 3n 3+1 2n 2−7 6n onde usamos que
n
X i2 = 1
FLOPS para resolver sistema via EG
Para reduzir o sistema a um sistema triangular via EG: 2 3n 3+1 2n 2− 7 6n
Para resolver o sistema triangular resultante: mais n2 FLOPS TOTAL: 2 3n 3+3 2n 2− 7 6n
RESUMO: FLOPS para resolver sistema via EG
Considere um sistema com n equa¸c˜oes e n inc´ognitas. Quanto tempo (FLOPS) toma?
Triangular superior ou inferior: n2 FLOPS. Matriz gen´erica: da ordem de n3 FLOPS.
Se matriz dobrar de tamanho passando a ter 2n equa¸c˜oes, n´umero de
Necessidade de pivotar
Resolver: A = 2 4 −2 −2 1 2 4 −3 −3 −3 8 −2 −1 1 6 −3 b = −4 5 7 7 N˜ao h´a nada errado com este sistema.
A ´e de posto completo → existe A−1 e portanto x = A−1b. A solu¸c˜ao existe e ´e ´unica: x = [1; 2; 3; 4].
O problema ´e que, no algoritmo de elimina¸c˜ao gaussiana, aparecem zeros nas posi¸c˜oes dos pivˆos e portanto n˜ao podemos us´a-los como divisores.
Necessidade de pivotar
Forme o sistema aumentado.
˜ A = 2 4 −2 −2 −4 1 2 4 −3 5 −3 −3 8 −2 7 −1 1 6 −3 7
Vamos proceder com a elimina¸c˜ao gaussiana e ver onde nos levar´a. Multiplicar 1/2 pela primeira linha e subtrair da segunda linha. Multiplicar −3/2 pela primeira linha e subtrair da terceira linha. Multiplicar −1/2 pela primeira linha e subtrair da quarta linha.
Resultado de zerar a primeira coluna da matriz aumentada com o pivˆo a11 ˜ A0 = 2 4 −2 −2 −4 0 0 5 −2 7 0 3 5 −5 1 0 3 5 −4 5
O pr´oximo passo da elimina¸c˜ao gaussiana n˜ao ir´a funcionar porque h´a um zero na posi¸c˜ao pivˆo, ˜a22.
Tentando elimina¸c˜
ao gaussiana em Scilab
−→ Melhor trocar para o Scilab←− Vamos usar a fun¸c˜ao ElimGauss(A,b)
-->A = [2, 4, -2, -2; 1, 2,4,-3;-3,-3,8,-2; -1,1,6,-3]; -->b = [-4; 5; 7; 7];
-->ElimGauss(A,b) !--error 27
Divisao por zero...
at line 17 of function ElimGauss called by : ElimGauss(A,b)
Vamos trocar a segunda e a quarta linhas da matriz aumentada. Isto n˜ao pode modificar a solu¸c˜ao do sistema.
˜ A = 2 4 −2 −2 −4 0 3 5 −4 5 0 3 5 −5 1 0 0 5 −2 7
Continue com a elimina¸c˜ao: multiplicar a linha 2 por 1 e a seguir subtrair da linha 3. ˜ A00= 2 4 −2 −2 −4 0 3 5 −4 5 0 0 0 −1 −4 0 0 5 −2 7
Outro zero apareceu na posi¸c˜ao pivˆo. Troque as linhas 3 e 4. ˜ A000 = 2 4 −2 −2 −4 0 3 5 −4 5 0 0 5 −2 7 0 0 0 −1 −4
O sistema aumentado agora est´a pronto para substitui¸c˜ao reversa.
A solu¸c˜ao do sistema reduzido pela elimina¸c˜ao gaussiana COM TROCA das
linhas da matriz AUMENTADA ´e a mesma solu¸c˜ao do sistema original: x
Tentando elimina¸c˜
ao gaussiana em Scilab
−→ Melhor trocar para o Scilab←− Vamos usar a fun¸c˜ao ElimGauss(A,b)
-->A = [2, 4, -2, -2; 1, 2,4,-3;-3,-3,8,-2; -1,1,6,-3]; -->b = [-4; 5; 7; 7];
-->ElimGauss(A,b) !--error 27
Divisao por zero...
at line 17 of function ElimGauss called by : ElimGauss(A,b)
No meio do processo de elimina¸c˜ao gaussiana, tivemos de trocar a 2a.linha pela 4a. e, a seguir, a 3a. pela 4a..
Isto ´e equivalente a trabalhar desde o in´ıcio com a matriz aumentada ORI-GINAL com as linhas na seguinte ordem: 1, 4, 2, 3.
Podemos usar uma matriz de permuta¸c˜ao P para colocar as linhas de A na ordem desejada.
Seja P a seguinte matriz de permuta¸c˜ao P = 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0
Se multiplicarmos ˜A por P teremos o sistema aumentado com as linhas na
ordem correta: P ˜A.
Este novo sistema aumentado est´a pronto para elimina¸c˜ao gaussiana usual, sem necessidade de trocar as linhas.
Opera¸c˜
oes elementares
A elimina¸c˜ao gaussiana ´e um m´etodo sistem´atico de realizar opera¸c˜oes elementares de linhas na matriz aumentada. O objetivo ´e terminar com uma matriz triangular superior. As opera¸c˜oes elementares por linhas s˜ao as seguintes:
(1) multiplicar uma linha por um escalar n˜ao nulo;
(2) somar a i -´esima linha multiplicada por algum escalar r ∈ R a j-´esima linha;
(3) intercambiar duas linhas.
Observa¸c˜ao. Linhas s˜ao somadas e multiplicadas por escalares como vetores (isto ´e, vetores linha).
Opera¸c˜
ao elementar e matrizes
Toda opera¸c˜ao elementar por linha ´e idˆentica a multiplicar pela esquerda por uma certa matriz.
Por exemplo, para multiplicar os elementos de uma linha da matriz A por um escalar r = 2 e deixar todas as outras linhas idˆenticas, podemos fazer o seguinte:
1 0 0 0 2 0 0 0 1 a1 a2 a3 b1 b2 b3 c1 c2 c3 = a1 a2 a3 2b1 2b2 2b3 c1 c2 c3
Matrizes elementares
Seja ˜A uma matriz aumentada n × (n + 1).
Considere a matriz E n × n dada por
E = 1 . .. O 1 r 1 O . .. 1 linha #i
O produto matricial E ˜A gera uma matriz idˆentica a ˜A exceto pela linha i .
Matrizes elementares
Para trocar duas linhas de lugar: 1 0 0 0 0 1 0 1 0 a1 a2 a3 b1 b2 b3 c1 c2 c3 = a1 a2 a3 c1 c2 c3 b1 b2 b3
Basta multiplicar por uma matriz de permuta¸c˜ao P.
Esta matriz de permuta¸c˜ao ´e a matriz identidade com suas linhas permutadas.
Matrizes elementares
Seja ˜A a matriz aumentada n × (n + 1) de um sistema linear. Seja P a matriz n × n dada por
P = 1 O . .. 0 · · · 1 .. . . .. ... 1 · · · 0 . .. O 1 1 1 linha #i 1 linha #j 1 1
P ´e a matriz identidade com as linhas i e j permutadas. A matriz P ˜A ´e a matriz aumentada ˜A com suas linhas i e j
Matrizes elementares
Finalmente, a ´ultima opera¸c˜ao elementar.
Criar uma nova matriz onde a segunda linha de A ´e substitu¨ı¿12da pela segunda linha somada a 3 vezes a primeira linha:
1 0 0 3 1 0 0 0 1 a1 a2 a3 b1 b2 b3 c1 c2 c3 = a1 a2 a3 b1+ 3a1 b2+ 3a2 b3+ 3a3 c1 c2 c3
Matrizes elementares
Seja ˜A a matriz aumentada n × (n + 1) de um sistema linear. Seja E a matriz n × n dada por
E = 1 .. . . .. O 0 · · · 1 .. . ... . .. 0 · · · r · · · 1 .. . ... ... . .. 0 · · · 0 · · · 0 · · · 1 1 1 linha #i 1 linha #j 1 1
Produto de matrizes elementares
A elimina¸c˜ao gaussiana pode ser vista como um processo de multiplica¸c˜ao da matriz aumentada por matrizes elementares. Seja ˜A a matriz n × (n + 1) aumentada de um sistema linear. A matriz escalonada final (a matriz triangular superior) ´e a matriz B obtida como B = EkEk−1. . . E2E1A˜
Um exemplo
Considere o sistema linear Ax = b onde
A = −3 2 −1 6 −6 7 3 −4 4 b = −1 −7 −6
Forme o sistema aumentado
˜ A = [A b] = −3 2 −1 −1 6 −6 7 −7 3 −4 4 −6
Come¸cando com a matriz aumentada ˜ A = [A b] = −3 2 −1 −1 6 −6 7 −7 3 −4 4 −6
Some 2 vezes a linha 1 `a linha 2, e some (1 vez) a linha 1 `a linha 3 ˜ A(1)= −3 2 −1 −1 0 −2 5 −9 0 −2 3 −7
Isto pode ser obtido da seguinte maneira: Sejam E1 = 1 0 0 2 1 0 0 0 1 E2= 1 0 0 0 1 0 1 0 1
Assim ˜ A(1) = −3 2 −1 −1 0 −2 5 −9 0 −2 3 −7 = E2E1A˜
Queremos agora zerar o elemento 32 de ˜A(1).
Para isto, some (−1 ∗ linha 2) `a linha 3.
Vamos representar isto como uma matriz elementar multiplicando ˜
Multiplicando ˜ A(1)= −3 2 −1 −1 0 −2 5 −9 0 −2 3 −7 por E3= 1 0 0 0 1 0 0 −1 1 teremos ˜ A(2)= −3 2 −1 −1 0 −2 5 −9 0 0 −2 2 = E3A˜(1) = E3E2E1A˜
Se temos Ax = b, e efetuamos EG, acabamos com A = x x x x x x x x x x x x x x x x =⇒ x0 x0 x0 x0 0 x0 x0 x0 0 0 x0 x0 0 0 0 x0
A elimina¸c˜ao gaussiana ´e obtida por meio da multiplica¸c˜ao de uma s´equˆencia de matrizes elementares:
EkEk−1. . . E1Ax = EkEk−1. . . E1b
MAx = Mb
Ux = Mb
MA ´e uma matriz triangular superior e denotada por U.
O truque LU
Vamos agora fazer algo bizarro.
Vamos reverter a opera¸c˜ao de elimina¸c˜ao gaussiana que deu tanto trabalho!!
Transformamos o sistema Ax = b no sistema equivalente Ux = Mb onde M ´e a matriz resultante das opera¸c˜oes elementares.
Vamos agora reverter multiplicando os dois lados da equa¸c˜ao
matricial Ux = Mb por M−1.
Com isto teremos M−1Ux = M−1Mb.
Ou seja, temos M−1Ux = b.
Como todos estes sistemas s˜ao equivalentes, isto quer dizer que voltamos ao sistema original:
Ax = b
A fatora¸c˜
ao LU
Vamos pensar sobre o que fizemos. Come¸camos com o sistema Ax = b
Ap´os a elimina¸c˜ao gaussiana, terminamos com Ux = Mb.
Invertemos M e com isto voltamos ao sistema original (Ax = b) mas
agora escrito como M−1Ux = b.
Isto ´e, n´os FATORAMOS A no produto de duas matrizes, M−1 e U.
Isto ´e, escrevemos A = M−1U.
Parece muito trabalho para simplesmente voltar ao ponto de partida ligeiramente modificado.
Para quˆ
e a fatora¸c˜
ao LU?
Existe uma raz˜ao muito importante e pr´atica para fazer a decomposi¸c˜ao LU.
Quando quisermos resolver v´arios sistemas lineares com a mesma matriz A mas diferentes b’s, a decomposi¸c˜ao LU ser´a muito mais eficiente que a elmina¸c˜ao gaussiana simples.
Mas, alto l´a: quando algu´em estaria interssado num problema desses?
Simples: toda vez que quisermos achar a inversa A−1 teremos de
O produto AB em colunas
Suponha que A e B sejam matrizes com dimens˜oes compat´ıveis.
Seja AB = C .
Podemos mostrar que a 1a coluna de C ´e o resultado de Ax onde x ´e a 1a coluna de B.
Do mesmo modo, a 2a coluna de C ´e Ax onde x ´e a 2a coluna de B.
Em geral, ABj = Cj onde Bj e Cj s˜ao as colunas j de B e C .
C´
alculo da inversa de A
Por defini¸c˜ao, A−1 ´e a matriz B tal qu AB = BA = I
Podemos encontrar A−1= B obtendo-a coluna por coluna.
A primeira coluna de A−1 deve ser a (´unica) solu¸c˜ao x de Ax = I1
onde I1 = (1, 0, 0, . . . , 0)t ´e a primeira coluna da matriz identidade I
de dimens˜ao n × n.
A segunda coluna de B deve ser a (´unica) solu¸c˜ao x de Ax = (0, 1, 0, 0, . . . , 0)t. E assim sucessivamente.
Temos de resolver n sistemas lineares, todos da forma Ax = bi, onde
Resumo da utilidade de LU
LU ser´a melhor que a elimina¸c˜ao gaussiana quando tivermos v´arios sistemas Ax = bi
Isto ´e, a mesma matriz A mas diferentes bi’s
Isto ocorre principalmente quando queremos A−1.
Uma pergunta que responderemos em breve ´e: LU ´e muito mais
eficiente, um pouco mais ou s´o um pouquinho mais eficiente que EG?
A fatora¸c˜
ao LU
Entretanto, existe uma raz˜ao muito importante e pr´atica para isto. M−1 tem uma estrutura muito especial, t˜ao simples que n˜ao temos trabalho algum em calcular esta matriz inversa.
Sempre teremos M−1 da seguinte forma
L = M−1 = 1 0 0 0 m21 1 0 0 m31 m32 1 0 m41 m42 m43 1
M−1 ser´a uma matriz triangular inferior.
Al´em disso, os elementos n˜ao-nulos ser˜ao os MULTIPLICADORES da
elimina¸c˜ao gaussiana.
Estes elementos s˜ao os inversos dos n´umeros usados nas matrizes de elimina¸c˜ao.
Fatora¸c˜
ao LU
Como um exemplo, tome um passo da EG. A torna-se
A = 6 −2 2 4 12 −8 6 10 3 −13 9 3 −6 4 1 −18 =⇒ B = 6 −2 2 4 0 −4 2 2 0 −12 8 1 0 2 3 −14
utilizando a matriz elimina¸c˜ao
M1 = 1 0 0 0 −2 1 0 0 −1 2 0 1 0 1 0 0 1
Isto ´e, M1A = A∗ e o sistema Ax = b torna-se ∗
Fatora¸c˜
ao LU
Vamos dar mais passo na EG. A∗ torna-se
A∗ = M1A = 6 −2 2 4 0 −4 2 2 0 −12 8 1 0 2 3 −14 =⇒ A∗∗= 6 −2 2 4 0 −4 2 2 0 0 2 −5 0 0 4 −13
utilizando a matriz elimina¸c˜ao
M2 = 1 0 0 0 0 1 0 0 0 −3 1 0 0 1/2 0 1
Fatora¸c˜
ao LU
Vamos dar o ´ultimo passo na EG. A matriz A∗∗ torna-se uma matriz trian-gular superior U. Isto ´e,
A∗∗= M2M1A = 6 −2 2 4 0 −4 2 2 0 0 2 −5 0 0 4 −13 =⇒ U = 6 −2 2 4 0 −4 2 2 0 0 2 −5 0 0 0 −3
utilizando a matriz elimina¸c˜ao
M3 = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 −2 1
Fatora¸c˜
ao LU
Terminamos a elimina¸c˜ao gaussiana com a express˜ao Ux = M3M2M1b
em que U ´e triangular superior (U vem de Upper) e cada Mi era uma
matriz de elimina¸c˜ao.
O que fazemos agora ´e retornar ao sistema original Ax = b mas escrevendo A como um produto LU = A de duas matrizes triangulares L (inferior) e U (superior)
Para isto, basta inverter a matriz do lado direiro da equa¸c˜ao acima (se esta inversa existir). Isto ´e, multiplicando por (M3M2M1)−1 dos
dois lados da equa¸c˜ao, temos
(M3M2M1)−1Ux = (M3M2M1)−1M3M2M1b = b
Fatora¸c˜
ao LU
Terminamos com
LUx = b onde L = (M3M2M1)−1.
Precisamos verificar que L ´e triangular inferior e os elementos n˜ao nulos s˜ao os inversos dos elementos n˜ao nulos nas Mi’s.
N˜ao faremos a demonstra¸c˜ao matem´atica deste fato.
Fatora¸c˜
ao LU
Para escalonar a matriz
A = 6 −2 2 4 12 −8 6 10 3 −13 9 3 −6 4 1 −18 =⇒ U = 6 −2 2 4 0 −4 2 2 0 0 2 −5 0 0 0 −3
usamos trˆes matrizes de elimina¸c˜ao:
Ux = M3M2M1Ax = M3M2M1b onde M1= 1 0 0 0 −2 1 0 0 −1/2 0 1 0 1 0 0 1 , M2= 1 0 0 0 0 1 0 0 0 −3 1 0 0 1/2 0 1 , M3= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 −2 1
Fatora¸c˜
ao LU
Temos Ux = M3M2M1b onde M1= 1 0 0 0 −2 1 0 0 −1 2 0 1 0 1 0 0 1 , M2= 1 0 0 0 0 1 0 0 0 −3 1 0 0 1/2 0 1 , M3= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 −2 1 ´E f´acil verificar que L = (M3M2M1)−1 = M1−1M −1 2 M −1 3 ´e dada por L = 1 0 0 0 2 1 0 0 1/2 3 1 0 −1 −1/2 2 1
A fatora¸c˜
ao LU
Assim, conclu´ımos que o sistema Ax = b pode ser escrito como
LUx = b onde:
L ´e uma matriz triangular inferior com elementos abaixo da diagonal iguais aos multiplicadores da elimina¸c˜ao gaussiana.
U ´e a matriz triangular superior resultante do processo de elimina¸c˜ao gaussiana.
E da´ı? O que fazer com isto?
Uma vez que L e U s˜ao triangulares, ´e f´acil resolver o sistema original Ax = b resolvendo dois sistemas triangulares, um envolvendo L e
Fatora¸c˜
ao LU
´
E muito f´acil resolver um sistema linear envolvendo uma matriz triangular. Considere a solu¸c˜ao para Ax = b.
A = LU =⇒ (LU)x = b Reagrupe, pois a multiplica¸c˜ao de matrizes ´e associativa
L(Ux ) = b Seja Ux = y . Ent˜ao
Ly = b
Como L ´e triangular, ´e f´acil (sem elimina¸c˜ao gaussiana) calcular y = L−1b
substi-Fatora¸c˜
ao LU
Como y agora ´e conhecido, resolvemos o sistema Ux = y para x .
Como L ´e triangular, ´e f´acil (sem elimina¸c˜ao gaussiana e sem de fato inverter a matriz) calcular
x = U−1y
Isto ´e, a express˜ao acima deve ser interpretada como “solucione Ux = y com substitui¸c˜ao reversa.”
Fatora¸c˜
ao LU
Listagem 5: Solu¸c˜ao LU
Fatore A em L e U
Resolva Ly = b para y utilize substitui¸c~ao forward
Fatora¸c˜
ao LU
Listagem 5: LU dado A for k = 1, . . . , n − 1 for i = k + 1, . . . , n xmult = aik/akk aik = xmult for j = k + 1, . . . , n aij = aij − (xmult)akj end end endLU: obtendo a A
−1Como dissemos anteriormente, uma das principais motiva¸c˜oes para a decomposi¸c˜ao LU ´e o c´alculo da inversa A−1 de uma matriz n × n. Achar a invesa se resume a encontrar cada uma das colunas que forma A−1.
A coluna i de A−1 ´e o vetor x que resolve o sistema Ax = bi onde bi
´
e o vetor com todas as entradas iguais a 0 exceto a entrada i , que possui valor 1.
Assim, precisamos resolver n sistemas lineares da forma Ax = bi onde
A ´e a mesma e apenas o vetor de coeficientes b muda.
Vamos mostrar que a solu¸c˜ao LU para este conjunto de n sistemas ´e mais eficiente (requer menos FLOPS) que resolver por elimina¸c˜ao gaussiana.
LU versus EG
Para resolver UM ´UNICO sistema linear Ax = b, elimina¸c˜ao gaussiana requer menos opera¸c˜oes que LU.
EG requer dois passos:
Forward elimination (ou elimina¸c˜ao sucessiva) para criar a matriz triangular superior U: precisamos de 2n3/3 + n2/2 − 7n/6 FLOPS. Backward substitution para resolver o sistema triangular resultante: n2 FLOPS
TOTAL = 2n3/3 + 3n2/2 − 7n/6 FLOPS.
LU decomposition requer trˆes passos:
Forward elimination (ou elimina¸c˜ao sucessiva) para criar a fatora¸c˜ao A = LU: 2n3/3 + n2/2 − 7n/6 FLOPS. Veja que s˜ao exatamente AS
MESMAS opera¸o˜oes do passo 1 da EG, apenas guardando os multiplicadores abaixo da diagonal da matriz L.
Forward substitution para achar z como solu¸c˜ao de Lz = b: n2FLOPS
Backward substitution para resolver Ux = z: n2 FLOPS
LU versus EG para calcular A
−1Para calcular A−1 devemos resolver n sistemas lineares Ax = bi onde
b1= (1, 0, . . . , 0), b2= (0, 1, 0, . . . , 0), . . ., bn= (0, 0, . . . , 0, 1).
Se usarmos a elimina¸c˜ao gaussiana em todos eles precisaremos de EGn= n × (2n3/3 + 3n2/2 − 7n/6) FLOPS.
Se usarmos LU, a decomposi¸c˜ao A = LU ter´a de ser feita apenas um ´
unica vez no in´ıcio.
Os outros dois passos ser˜ao repetidos n vezes.
Dessa forma, LUn= 2n3/3 + n × (5n2/2 − 7n/6) FLOPS.
Comparando:
Com n = 10, temos GE10≈ 3LU10.
Com n = 100, temos GE100≈ 25LU100.
Fatora¸c˜
ao LU de Doolittle
Listagem 6: Doolittle dado A sa´ıda L, U for k = 1, . . . , n lkk = 1 for j = k, . . . , n ukj = akj−Pk−1i =1 lkiuij end for j = k + 1, . . . , n ljk = ajk− Pk−1 i =1 ljiuik /ukk end endLU em Scilab
Com a EG, LU necessita pivotar. Com pivota¸c˜ao, a fatora¸c˜ao LU sempre existe, mesmo se A ´e singular. Com pivota¸c˜ao, obtemos LU = PA
Decomposi¸c˜
ao de Cholesky
Quando A n × n for sim´etrica e definida positiva: Cholesky.
Por Cholesky, existe uma matriz L triangular inferior tal que podemos escrever
A = LLt
A decomposi¸c˜ao de Cholesky ´e um caso especial da decomposi¸c˜ao LU com U = Lt.
´
E como se L fosse a raiz quadrada de A: L =
√ A
Por que Cholesky e n˜
ao LU?
Encontra apenas L (n˜ao precisa de U). Evita pivota¸c˜ao.
Decomposi¸c˜
ao de Cholesky
Para Cholesky precisamos de A sim´etrica e definida positiva. ´
E comum termos um sistema Ax = b onde A ´e sim´etrica?
Sim, ´e muito comum. Por exemplo,...
No modelo de regress˜ao linear, temos que resolver um sistema da forma Ax = b onde A = DtD ´e uma matriz sim´etrica e definida positiva.
Decomposi¸c˜
ao de Cholesky
O fato de A ser definida positiva garante que os elementos aii da
diagonal s˜ao > 0 Prova: tome x = (1, 0, . . . , 0). Ent˜ao 0 < xtAx = a11. Agora tome x = (0, 1, 0, . . . , 0). Ent˜ao 0 < xtAx = a22. Etc.
Algoritmo para decomposi¸c˜
ao de Cholesky
A = LLt = l11 0 0 l21 l22 0 l31 l32 l33 l11 l21 l31 0 l22 l32 0 0 l33 = l112 l21l11 l31l11 l21l11 l212 + l222 l31l21+ l32l22 l31l11 l31l21+ l32l22 l312 + l322 + l332 O que deve ser o valor l11?
Iguale o elemento 11 da matriz A e o elemento 11 da matriz produto LLt.
Vemos que l2
11= a11, ou seja, l11=
√ a11.
Algoritmo para decomposi¸c˜
ao de Cholesky
A = LLt = l11 0 0 l21 l22 0 l31 l32 l33 l11 l21 l31 0 l22 l32 0 0 l33 = l112 ∗ ∗ l21l11 l212 + l222 ∗ l31l11 l31l21+ l32l22 l312 + l322 + l332 Iguale o elemento 21 de A com o elemento 21 de LtL.
Temos l21l11= a21. Como j´a obtivemos l11=
√
a11, encontramos
l21= a21/
√ a11.
Algoritmo para decomposi¸c˜
ao de Cholesky
A = LLt = l11 0 0 l21 l22 0 l31 l32 l33 l11 l21 l31 0 l22 l32 0 0 l33 = l2 11 l21l11 l212 + l222 l31l11 l31l21+ l32l22 l312 + l322 + l332 De maneira idˆentica, obtemos l31= a31/
√ a11.
Primeira coluna de L est´a pronta. Vamos agora obter a segunda
coluna de L.
Iguale o elemento a22 e o elemento 22 do produto LLt:
a22= l212 + l222 ).
Algoritmo para decomposi¸c˜
ao de Cholesky
A = LLt = l11 0 0 l21 l22 0 l31 l32 l33 l11 l21 l31 0 l22 l32 0 0 l33 = l112 l21l11 l212 + l222 l31l11 l31l21+ l32l22 l312 + l 2 32+ l 2 33 Tendo obtido l11, l21, l31, l22 , passamos agora a l32
Iguale o elemento a32 e o elemento 32 do produto LLt
25 15 −5 15 18 0 −5 0 11 = l11 0 0 l21 l22 0 l31 l32 l33 l11 l21 l31 0 l22 l32 0 0 l33 primeira coluna de L 25 15 −5 15 18 0 −5 0 11 = 5 0 0 3 l22 0 −1 l32 l33 5 3 −1 0 l22 l32 0 0 l33
conclus˜ao: 25 15 −5 15 18 0 −5 0 11 = 5 0 0 3 3 0 −1 1 3 5 3 −1 0 3 1 0 0 3
Decomposi¸c˜
ao de Cholesky em Scilab
A deve ser definida positiva.
Sen˜ao,Scilabmostra uma mensagem de erro.
Sintaxe R=chol(A) L=chol(A,’lower’) [R,p]=chol(A) [L,p]=chol(A,’lower’) [R,p,S]=chol(A) [R,p,s]=chol(A,’vector’) [L,p,s]=chol(A,’lower’,’vector’)
Decomposi¸c˜
ao de Cholesky
Exemplo:
Os coeficientes binomiais dispostos em uma matriz sim´etrica criar uma matriz positiva definida interessante.
n=5 X=pascal(n) X= 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70
Decomposi¸c˜
ao de Cholesky
Exemplo: ´
E interessante porque o seu fator de Cholesky consiste nos mesmos coeficientes, dispostos em uma matriz triangular superior.
R=chol(X) R= 1 1 1 1 1 0 1 2 3 4 0 0 1 3 6 0 0 0 1 4 0 0 0 0 1
Decomposi¸c˜
ao de Cholesky
Exemplo:
Destru´ımos a propriedade de ser definida positiva ao subtrair 1 do ´ ultimo elemento. X(n,n)=X(n,n)-1 X= 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 69