Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão Scilab

4.4 Fatoração LU


Considere um sistema linear Ax = b, onde a matriz A é densa5 . A fim de resolver o sistema, podemos fatorar a matriz A como o produto de uma matriz L triangular inferior e uma matriz U triangular superior, ou seja, A = LU.

Sendo assim, o sistema pode ser reescrito da seguinte forma: Ax = b (4.77) (LU)x = b (4.78) L(Ux) = b (4.79) Ly = b  e  Ux = y (4.80)

Isto significa que, ao invés de resolvermos o sistema original, podemos resolver o sistema triangular inferior Ly = b e, então, o sistema triangular superior Ux = y, o qual nos fornece a solução de Ax = b.

A matriz U da fatoração6 LU é a matriz obtida ao final do escalonamento da matriz A.

A matriz L é construída a partir da matriz identidade I, ao longo do escalonamento de A. Os elementos da matriz L são os múltiplos do primeiro elemento da linha de A a ser zerado dividido pelo pivô acima na mesma coluna.

Por exemplo, para zerar o primeiro elemento da segunda linha de A, calculamos

L21 = A21∕A11 (4.81)

e fazemos

A2,: ⇐ A2,: − L21A1,: (4.82)

Note que denotamos Ai,: para nos referenciarmos a linha i de A. Da mesma forma, se necessário usaremos A:,j para nos referenciarmos a coluna j de A.

Para zerar o primeiro elemento da terceira linha de A, temos

L31 = A31∕A11 (4.83)

e fazemos

A3,: ⇐ A3,: − L31A1,: (4.84)

até chegarmos ao último elemento da primeira coluna de A.

Repetimos o processo para as próximas colunas, escalonando a matriz A e coletando os elementos Lij abaixo da diagonal7 .

Exemplo 4.4.1. Use a fatoração LU para resolver o seguinte sistema linear:

x1 + x2 + x3 = −2 2x1 + x2 − x3 = 1 2x1 − x2 + x3 = 3 (4.85)

Solução. Começamos fatorando a matriz A dos coeficientes deste sistema: A = 1 1 1 2 1 −1 2 −1 1 . = 1 0 0 0 1 0 0 0 1 ︸ I3,3 1 1 1 2 1 −1 2 −1 1 ︸ A (4.86) = 1 0 0 2 1 0 2 0 1 1 1 1 0 −1 −3 0 −3 −1 (4.87) = 1 0 0 2 1 0 2 3 1 ︸ L 1 1 1 0 −1 −3 0 0 8 ︸ U (4.88) (4.89)

Completada a fatoração LU, resolvemos, primeiramente, o sistema Ly = b:

y1 = −2 2y1 + y2 = 1 2y1 + 3y2 + y3 = 3 (4.90)

o qual no fornece y1 = −2, y2 = 5 e y3 = −8. Por fim, obtemos a solução resolvendo o sistema Ux = y:

x1 + x2 + x3 = −2 − x2 − 3x3 = 5 8x3 = −8 (4.91)

o qual fornece x3 = −1, x2 = −2 e x1 = 1.

♢

4.4.1 Código Scilab: Fatoração LU


No Scilab, podemos implementar o algoritmo para fatoração LU da seguinte forma:

 
1function [L,A]=fatoraLU(A) 
2    n=size(A,1) 
3    L=eye(n,n) 
4    for j=1:n-1 
5        for i=j+1:n 
6            L(i,j    )=A(i,j)/A(j,j) 
7            A(i,j+1:n)=A(i,j+1:n)-L(i,j)*A(j,j+1:n) 
8            A(i,j    )=0 
9       end 
10    end 
11endfunction

Custo computacional

Podemos analisar o custo computacional, reduzindo o problema em problemas menores.

Na linha 4, iniciamos com j = 1. Desta forma i varia de 2 até n na linha 5.

A linha 6 terá sempre 1 flop.

A linha 7, com j = 1 tem um bloco de tamanho 2:n contabilizando n − 1 flops do produto e n − 1 flops da subtração.

Nas linhas 6-8 são feitas (2(n − 1) + 1) = 2n − 1 flops independente do valor de i. Como i varia de 2 até n, teremos que o bloco é repetido n − 1 vezes, ou seja, o custo das linhas 5-9 é

(n − 1) × (2(n − 1) + 1) = 2(n − 1)2 + (n − 1) (4.92)

Voltamos a linha 4 quando j = 2. Das linhas 6-8 teremos n − 2 flops (o bloco terá um elemento a menos) que será repetido n − 2 vezes, pois i=3:n, ou seja,

(n − 2) × (2(n − 2) + 1) = 2(n − 2)2 + (n − 2) (4.93)

Para j = 3, temos 2(n − 3)2 + (n − 3).

Para j = n − 2, temos 2(2)2 + 2.

Finalmente, para j = n − 1, temos 2 ⋅ 12 + 1.

Somando todos esses custos, temos (n − 1) + 2(n − 1)2 + (n − 2) + 2(n − 2)2 + ... + (2) + 2(2)2 + 1 + 2 ⋅ 1 (4.94) = ∑ k=1n−12k2 + k (4.95) = 2 ∑ k=1n−1k2 + ∑ k=1n−1k (4.96) = 2(n − 1)n(2n − 1) 6 + n(n − 1) 2 (4.97) = 2n3 3 − n2 2 − n 6 flops. (4.98)

4.4.2 Custo computacional para resolver um sistema linear usando fatoração LU


Para calcularmos o custo computacional de um algoritmo completo, uma estratégia é separar o algoritmo em partes menores, mais fáceis de analisar.

Para resolver o sistema, devemos primeiro fatorar a matriz A nas matrizes L e U. Vimos que o custo é

2n3 3 − n2 2 − n 6 flops. (4.99)

Depois devemos resolver os sistemas Ly = b e Ux = y. O custo de resolver os dois sistemas é (devemos contar duas vezes)

2n2 flops. (4.100)

Somando esses 3 custos, temos que o custo para resolver um sistema linear usando fatoração LU é

2n3 3 + 3n2 2 − n 6 flops. (4.101)

Quando n cresce, prevalessem os termos de mais alta ordem, ou seja,

O(2n3 3 + 3n2 2 − n 6) = O(2n3 3 + 3n2 2 ) = O(2n3 3 ) (4.102)

4.4.3 Custo para resolver m sistemas lineares


Devemos apenas multiplicar m pelo custo de resolver um sistema linear usando fatoração LU, ou seja, o custo será

m(2n3 3 + 3n2 2 − n 6) = 2mn3 3 + 3mn2 2 − mn 6 (4.103)

e com m = n temos

2n4 3 + 3n3 2 − n2 6 . (4.104)

Porém, se estivermos resolvendo n sistemas com a mesma matriz A (e diferente lado direito b para cada sistema) podemos fazer a fatoração LU uma única vez e contar apenas o custo de resolver os sistemas triangulares obtidos.

Custo para fatoração LU de A: 2n3 3 − n2 2 − n 6 .

Custo para resolver m sistemas triangulares inferiores: mn2.

Custo para resolver m sistemas triangulares superiores: mn2.

Somando esses custos obtemos

2n3 3 − n2 2 − n 6 + 2mn2 (4.105)

que quando m = n obtemos

8n3 3 − n2 2 − n 6 flops. (4.106)

4.4.4 Custo para calcular a matriz inversa de A


Como vemos em Álgebra Linear, um método para obter a matriz A−1 é realizar o escalonamento da matriz [A|I] onde I é a matriz identidade. Ao terminar o escalonamento, o bloco do lado direito conterá A−1.

Isto é equivalente a resolver n sistemas lineares com a mesma matriz A e os vetores da base canônica ei = [0,...,0,1,0,....0]T tal que

Axi = ei,i = 1 : n (4.107)

onde xi serão as colunas da matriz A inversa, já que AX = I.

O custo para resolver esses n sistemas lineares foi calculado na seção anterior como

8n3 3 − n2 2 − n 6. (4.108)

Exemplo 4.4.2. Qual o melhor método para resolver um sistema linear: via fatoração LU ou calculando a inversa de A e obtendo x = A−1b?

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:36:32.

Informe erros ou edite você mesmo!