Matriz em banda
A = X
X

X

0
X

X
0

0
0

0
0

 0
X
X
X
X
0
0
0
0
0
0
X
0
X
0
0
0
0
0
0
0
X
X
X
X
X
X
0
0
0
0
X
X
X
X
0
X
0
0
0
0
0
X
X
X
X
X
X
X
0
0
0
X
X
0
X
X
0
X
X
0
X
0
X
0
X
X
X
0
X
0
X
X
X
X
X
X
X
X
X
0
0
0
X
X
X
X
X
X
0
X
0
0
0
0
0
X
X
0
X
X
0
0
0
0
0
X
X
X
X
X
0
0
0
0
0
X
0
X
X
X
0
0

0

0
0

0
0

0
X

X
X

X 
largura de banda superior: número
de diagonais não nulas, acima da
diagonal principal
largura de banda inferior: número de diagonais
não nulas, abaixo da diagonal principal
largura de banda = largura de banda superior + largura de banda inferior + 1
ou seja, largura de banda é o numero total de diagonais não nulas
Matemática Computacional, MEMec, LEAN, MEAer
Método de Gauss – escolha de Pivot
Resolva pelo método de Gauss o sistema de equações
4
0

0

0
1 −3
0
2
1
0   x1  2 
1 −1  x2  0 
 =  
2 4   x3  4 

0 1  x4  0 
i) Condensação
A(1)⏐b(1) = A(2)⏐b(2) =  4
0

m32 = 2 0 ?  0

m42 = 1 0 ?  0
A(2)⏐b(2) =  4
0

0

m42 = 1 2  0
1 −3
0
2
1
0 2
1 −1 0 
2 4 4

0 1 0
1 −3
2
0
1
0 2
2 4 4 
1 −1 0 

0 1 0
Troca de linhas
(ou seja de equações)
para que o pivot
não seja nulo
A(2)⏐b(2) =  4
0

0

0
A(3)⏐b(3) =  4
0

0

0
1 −3
2
0
1
0 2
2 4 4 
1 −1 0 

0 1 0
1 −3
2
2 2 4 4 
0 1 −1 0 

0 −1 −1 −2 
0
Matemática Computacional, MEMec, LEAN, MEAer
Método de Gauss – escolha de Pivot
A(3)⏐b(3) =  4
0

0

m43 = −1 1  0
1 −3
2
2 2 4 4 
0 1 −1 0 

0 −1 −1 −2 
0
A(4)⏐b(4) =  4
0

0

0
1 −3
2
0
0
2
2 4 4 
1 −1 0 

0 −2 −2 
0
ii) Substituição ascendente
4
0

0

0
1 −3
−2 ⋅ x4 = −2  x4 = 1
2
0
x3 − x 4 = 0  x3 = x 4 = 1
0
0   x1   2
2 4   x2   4 
 =  
1 −1  x3   0 

0 −2  x4  −2
4 − (2 ⋅ x3 + 4 ⋅ x4 )
= −1
2
2 − ( x2 − 3 ⋅ x 3 ) 3
=
4 ⋅ x1 + x2 − 3 ⋅ x3 = 2  x1 =
4
2
2 ⋅ x2 + 2 ⋅ x 3 + 4 ⋅ x 4 = 4  x2 =
Em aritmética em ponto flutuante, devido aos arredondamentos, em geral a escolha de
pivot é vantajosa mesmo quando o pivot não é nulo
Matemática Computacional, MEMec, LEAN, MEAer
Método de Gauss – importância da escolha de Pivot
Considere o sistema de equações
 0.0003 1.246   x1  1.249 
0.4370 −2.402   x  = 1.968 

 2 

Nota:
solução exacta,
x1=10, x2=1
a) Resolva o sistema pelo método de Gauss utilizando uma mantissa com 4 dígitos, ou seja,
simulando os cálculos em FP(10,4,2,A)
b) Resolva agora efectuando escolha de pivot (na mesma com uma mantissa com 4 dígitos)
a)
i) Condensação
A(1)⏐b(1) =  0.0003 1.246 1.249 


m21  0.4370 −2.402 1.968 
m21 =
A(2)⏐b(2) =  0.0003 1.246 1.249 
 0
(2)
a22
b2(2) 

0.4370
= 1456.6(6) → m21 = 1457
0.0003
(2)
(1)
(1)
a22
= a22
− m21 × a12
= −2.402 − 1457 × 1.246 = −2.402 − 1815. 422 = −2.402 − 1815 = −1817. 402
b2(2) = b2(1) − m21 × b1(1) = 1.968 − 1457 × 1.249 = 1.968 − 1819.793 = 1.968 − 1820 = −1818. 032
Matemática Computacional, MEMec, LEAN, MEAer
Método de Gauss – importância da escolha de Pivot
A(2)⏐b(2) =  0.0003 1.246 1.249 
 0
−1817 −1818 

ii) Substituição ascendente
0.0003 1.246   x1   1.249 
 =

 0

1817
1818
−
−
x

 2 

x2 =
−1817
= 1.00065 → x2 = 1.001
−1818
0.0003 ⋅ x1 + 1.246 ⋅ x2 = 1.249  x1 =
1.249 − 1.246 ⋅ x2
0.0003
x1 =
=
1.249 − 1.246 × 1.001
0.0003
1.249 − 1.247 246
0.02
= 6.666(6) = 6.667
=
0.0003
0.0003
A solução obtida é x1=6.667, x2=1.001, enquanto a solução exacta é x1=10, x2=1.
Comparando com a solução exacta verifica-se que o valor obtido para x1 possui 33% de erro.
Matemática Computacional, MEMec, LEAN, MEAer
Método de Gauss – importância da escolha de Pivot
b) Uma forma de minimizar os problemas numéricos é efectuar escolha de pivot
i) Condensação
A ⏐b =  0.0003 1.246 1.249 
 0.4370 −2.402 1.968 


(1)
(1)
Troca de linhas
(ou seja de equações)
para que o pivot
tenha maior
valor absoluto
A(1)⏐b(1) =  0.4370 −2.402 1.968 


m21  0.0003 1.246 1.249 
m21 =
A(1)⏐b(1) =  0.4370 −2.402 1.968 
 0.0003 1.246 1.249 


A(2)⏐b(2) =  0.4370 −2.402 1.968 
 0
a2(2)2
b2(2) 

0.0003
= 6.8649886 × 10 −4 → m21 = 6.865 × 10 −4
0.4370
(2)
(1)
(1)
a22
= a22
− m21 × a12
= 1.246 − 6.865 × 10 −4 × −2.402 = 1.246 + 0.001648973 = 1.246 + 0.001649
= 1.247649 = 1.248
b2(2) = b2(1) − m21 × b1(1) = 1.249 − 6.865 × 10 −4 × 1.968 = 1.249 − 0.001351 032 = 1.249 − 0.001351
= 1.247649 = 1.248
Matemática Computacional, MEMec, LEAN, MEAer
Método de Gauss – importância da escolha de Pivot
A(2)⏐b(2) =  0.4370 −2.402 1.968 
 0
1.248 1.248 

ii) Substituição ascendente
0.4370 −2.402   x1  1.968 
 =

 0

1.248
x
1.248

 2 

x2 =
1.248
= 1 → x2 = 1.000
1.248
0.4370 ⋅ x1 − 2.402 ⋅ x2 = 1.968  x1 =
x1 =
1.968 + 2.402 ⋅ x2
1.968 + 2.402 × 1.000
=
0.4370
0.4370
1.968 + 2.402
0.4370
=
4.370
0.4370
= 10
A solução obtida é x1=10, x2=1, igual à solução exacta
Matemática Computacional, MEMec, LEAN, MEAer
Tipos de Pivot
Tipos de pivot: - pivot parcial
- pivot total
- pivot diagonal
(k )

a
1,
1
A =

 0
 

 0

 
 0

 
 0

 

 0
(k )






- pivot parcial com patamar
a1,(k )k −1
a1,(k )k  a1,(k )p  a1,(k )q  a1,(k )n 





 
ak(k−)1, k−1 ak(k−)1, k  ak(k−)1, p  ak(k−)1, q  ak(k−)1, n 

0
ak(k, )k  ak(k, )p  ak(k, )q  ak(k, )n 






 
0
ap(k, )k  ap(k,)p  ap(k, )q  ap(k,)n 






 
0
aq(k, )k  aq(k, )p  aq(k, )q  aq(k, )n 





 

0
an(k, )k  an(k, )p  an(k, )q  an(k, )n 
submatriz
activa
Os candidatos a pivot encontram-se na submatriz activa
Matemática Computacional, MEMec, LEAN, MEAer
Pivot parcial
A(k ) =  a1, 1

 0
 

 0

 
 0

 
 0

 

 0
(k )






a1,(k k) −1
a1,(k )k  a1,(k )p  a1,(k q)  a1,(k n) 





 
ak(k−)1, k −1 ak(k−)1, k  ak(k−)1, p  ak(k−)1, q  ak(k−)1, n 

0
ak(k, )k  ak(k, )p  ak(k, )q  ak(k, )n 






 
0
ap(k, )k  ap(k,)p  ap(k,)q  ap(k,)n 






 
0
aq(k, )k  aq(k, )p  aq(k, )q  aq(k, )n 





 

0
an(k, )k  an(k, )p  an(k, )q  an(k, )n 
linha k
linha p
coluna k
pivot parcial – os candidatos a pivot são os elementos da coluna k da submatriz activa
(k )
→ Escolher: max aik(k ) = apk
i≥k
→ Trocar linha p com linha k
Matemática Computacional, MEMec, LEAN, MEAer
Algoritmo pivot parcial
para k = 1 até n − 1
# para todas as colunas a condensar
 # 1. escolher pivot
 # inicialização
p = k
# linha pivot = k

 pivot = akk
 # escolha do elemento pivot
para i = k + 1 até n
# para todos as entradas abaixo de akk

se aik > pivot então



# linha pivot = k
p = i


 pivot = a

ik



 # troca de linhas
se p ≠ k então
# se p ≠ k , então trocar linha p com a linha k

# para todas as entradas não nulas das linhas a trocar
para j = k até n


aux = akj





akj = apj


apj = aux



 # 2. condensação

# para todas as linhas abaixo da linha k
para i = k + 1 até n
mik = aik / akk

# factor multiplicativo


para j = k + 1 até n
# para todos as entradas não nulas dessa linha


 aij = aij − mik akj



Matemática Computacional, MEMec, LEAN, MEAer
Pivot total
A(k ) =  a1, 1

 0
 

 0

 
 0

 
 0

 

 0
(k )






a1,(k k) −1
a1,(k )k  a1,(k )p  a1,(k q)  a1,(k n) 





 
ak(k−)1, k −1 ak(k−)1, k  ak(k−)1, p  ak(k−)1, q  ak(k−)1, n 

0
ak(k, )k  ak(k, )p  ak(k, )q  ak(k, )n 






 
0
ap(k, )k  ap(k,)p  ap(k,)q  ap(k,)n 






 
0
aq(k, )k  aq(k, )p  aq(k, )q  aq(k, )n 





 

0
an(k, )k  an(k, )p  an(k, )q  an(k, )n 
coluna k
linha k
linha p
coluna q
pivot total – os candidatos a pivot são todos os elementos da submatriz activa
(k )
→ Escolher: max aik(k ) = apq
i , j ≥k
→ Trocar linha p com linha k e trocar coluna q com coluna k
Matemática Computacional, MEMec, LEAN, MEAer
Pivot diagonal
A(k ) =  a1, 1

 0
 

 0

 
 0

 
 0

 

 0
(k )






a1,(k k) −1
a1,(k )k  a1,(k )p  a1,(k q)  a1,(k n) 





 
ak(k−)1, k −1 ak(k−)1, k  ak(k−)1, p  ak(k−)1, q  ak(k−)1, n 

0
ak(k, )k  ak(k, )p  ak(k, )q  ak(k, )n 






 
0
ap(k, )k  ap(k,)p  ap(k,)q  ap(k,)n 






 
0
aq(k, )k  aq(k, )p  aq(k, )q  aq(k, )n 





 

0
an(k, )k  an(k, )p  an(k, )q  an(k, )n 
coluna k
Com pivot diagonal, a
simetria duma matriz
simétrica é mantida
linha k
linha q
coluna q
pivot diagonal – os candidatos a pivot são os elementos da diagonal da submatriz activa
(k )
→ Escolher: max aii(k ) = aqq
i ≥k
→ Trocar linha q com linha k e trocar coluna q com coluna k
Matemática Computacional, MEMec, LEAN, MEAer
Pivot parcial com patamar
A(k ) =  a1, 1

 0
 

 0

 
 0

 
 0

 

 0
(k )






a1,(k k) −1
a1,(k )k  a1,(k )p  a1,(k q)  a1,(k n) 





 
ak(k−)1, k −1 ak(k−)1, k  ak(k−)1, p  ak(k−)1, q  ak(k−)1, n 

0
ak(k, )k  ak(k, )p  ak(k, )q  ak(k, )n 






 
0
ap(k, )k  ap(k,)p  ap(k,)q  ap(k,)n 






 
0
aq(k, )k  aq(k, )p  aq(k, )q  aq(k, )n 





 

0
an(k, )k  an(k, )p  an(k, )q  an(k, )n 
Com patamar, a
troca só é efectuada
se “valer a pena”,
i.e., se apk for
francamente
superior a akk
linha k
linha p
coluna k
pivot parcial – os candidatos a pivot são os elementos da coluna k da submatriz activa
(k )
→ Escolher: max aik(k ) = apk
i≥k
(k )
→ Trocar linha p com linha k se: τ apk
> akk(k )
, 0 ≤τ ≤ 1
τ é o valor
do patamar
Matemática Computacional, MEMec, LEAN, MEAer
Normas de matrizes
Normas de vectores
x 1 = x1 + x2 +  + xn
x 2 = ( x1 + x2 +  + xn
2
x
∞
2
norma 1
2
)
= max xi
2
norma Euclideana
norma do máximo (ou do infinito)
i = 1, , n
Normas de matrizes (mxn)
1

ai j

ai j
m
A 1 = max
1≤ j ≤n
i =1
n
A
∞
= max
1≤i ≤m
j =1

A F =


(
m
i =1
n
j =1

2
ai j 


)
1
2
norma de Frobenius
Matemática Computacional, MEMec, LEAN, MEAer
Número de condição (de matrizes)
Admitindo que existem perturbações nos valores da matriz A e do vector b, então resultam
perturbações na solução do sistema x
[ A] ⋅{x} = {b}
A ⋅ x = b ⇔
→ A⋅ x = b
( A + δ A) ⋅ ( x + δ x ) = b + δ b
(i) Admitir que apenas existem perturbações no 2º membro (e consequentemente na solução)
A⋅( x + δ x) = b + δ b
A⋅ x = b

 A ⋅ x + A ⋅δ x = b + δ b
b = A⋅ x ≤ A ⋅ x
A ⋅δ x = δ b  δ x = A ⋅δ b 
−1

b
A
≤ x
 A⋅ x = b
 
A ⋅δ x = δ b
(*)
δ x = A−1 ⋅ δ b ≤ A−1 ⋅ δ b

δx
x
≤ A−1 ⋅
δb
x
Matemática Computacional, MEMec, LEAN, MEAer
Número de condição (de matrizes)
Tendo em atenção (*),
δx
x
≤ A−1 ⋅
δb
x
b
A
≤ A−1 ⋅
≤ x
δb
b
A

δx
−1
δb
≤ A⋅ A ⋅


 b
x

cond A
O número de condição duma matriz traduz, em termos relativos,
a relação entre as perturbações na solução x e as perturbações
no segundo membro b.
δx
x
≤ cond A ⋅
δb
b
cond A = A ⋅ A−1
Um número de condição elevado indica que as perturbações do segundo membro são
ampliadas sobre a solução do sistema
(ii) Perturbações na matriz A (e consequentemente na solução)
Analogamente se demonstra que a relação entre as perturbações na solução x e as
perturbações da matriz A também dependem do número de condição da matriz
Matemática Computacional, MEMec, LEAN, MEAer
Efeito dos erros de arredondamento
Na resolução dum sistema (de dimensão n) em ponto flutuante, devido aos
arredondamentos, a factorização obtida não é exactamente igual à matriz original
L ⋅ U = A + E
↑
matriz
dos
erros
Pode demonstrar-se que os elementos da matriz erro são majorados por:
eij ≤ n ⋅ u ⋅ γ ⋅ α1
u - constante da ordem da unidade de arredondamento
α1 - maior elemento (em módulo) de Aij
γ - factor de crescimento dos coef. de A durante factorização
(i) Pivot parcial – em certos casos patológicos γ pode ser muito elevado podendo atingir o
valor máximo de 2n – 1. Contudo, estes casos patológicos são raros e na prática a factorização
com pivot parcial é em geral numericamente estável
(ii) Pivot total – o majorante de γ cresce lentamente (com o aumento da dimensão do
sistema) não se conhecendo casos para os quais seja superior a n. Logo a utilização de pivot
total é numericamente estável.
Matemática Computacional, MEMec, LEAN, MEAer
Efeito dos erros de arredondamento
Introduzindo o conceito de resíduo, r = b − A ⋅ x (de fácil cálculo após se obter x)
r = b − A ⋅ x = A ⋅ x − A ⋅ x = A ⋅ ( x − x ) = A ⋅ δ x
r = A ⋅δ x  δ x = A ⋅ r
−1
A⋅ x = b 
Atendendo a que
Então
Ou seja
δx
x
≤ A−1 ⋅
δx
x

r
x
δx

≤ cond A ⋅
x
r
b
δ x = A ⋅r
−1
A⋅ x ≥ b
≤ A−1 ⋅
r
b
A



δx ≤ A
x ≥
−1
⋅r

δx
x
≤ A
−1
r
⋅
x
b
A
δx
r
≤ A−1 ⋅ A ⋅


 b
x
cond A
onde o número de condição surge novamente
como factor de ampliação
Resumindo, o número de condição da matriz desempenha um papel fundamental nos erros
existente na solução do sistema de equações
Matemática Computacional, MEMec, LEAN, MEAer
Download

número de diagonais