introdução aos métodos numéricos - núcleo de análise
TRANSCRIPT
Introdução aos Métodos Numéricos
Instituto de Computação UFFDepartamento de Ciência da Computação
Otton Teixeira da Silveira Filho
Conteúdo temático
● Sistemas de Equações Lineares. Métodos diretos
Conteúdo específico
● Pivotamento parcial e total
Pivotamento
Pivotamento parcial e total
São procedimentos que podem diminuir o ruído numérico da eliminação gaussiana e da fatoração LU
Pivotamento
Pivotamento parcial e total
São procedimentos que podem diminuir o ruído numérico da eliminação gaussiana e da fatoração LU
Só será apresentado o caso da eliminação gaussiana
Pivotamento parcial
● Começando pela primeira coluna, ache o maior elemento em módulo desta coluna
● Troque a linha na qual está este valor como a primeira linha
● Faça a eliminação
Pivotamento parcial
● Ache o maior elemento em módulo da segunda coluna abaixo da primeira linha
● Troque a linha na qual está este valor como a segunda linha
● Faça a eliminação
Pivotamento parcial
● Ache o maior elemento em módulo da terceira coluna abaixo da segunda linha
● Troque a linha na qual está este valor como a terceira linha
● Faça a eliminação
Pivotamento parcial
Faça o equivalente para as demais colunas
Pivotamento parcial
Faça o equivalente para as demais colunas
Qual é a ideia por trás disto?
Pivotamento parcial
A maior fonte de ruído numérico é a divisão pelo pivô pois se o pivô for menor que o termo a ser eliminado teremos potencialmente um elevado ruído numérico
Pivotamento parcial
A maior fonte de ruído numérico é a divisão pelo pivô pois se o pivô for menor que o termo a ser eliminado teremos potencialmente um elevado ruído numérico
Ao escolhermos o maior em módulo da coluna a ser eliminada, reduzimos o ruído numérico
Pivotamento parcial
A maior fonte de ruído numérico é a divisão pelo pivô pois se o pivô for menor que o termo a ser eliminado teremos potencialmente um elevado ruído numérico
Ao escolhermos o maior em módulo da coluna a ser eliminada, reduzimos o ruído numérico
Não há garantia mas funciona bem em muitas situações
Pivotamento parcial
O custo computacional é basicamente o custo da busca do maior elemento em módulo.
Um exemplo do algoritmo para um vetor coluna da matriz
Pivotamento parcial
Seja o vetor de n elementos
● Afirmarmos que o primeiro elemento é o maior em módulo e o guardamos numa variável M, valor provisoriamente de máximo e em IM a linha deste máximo provisório.
v⃗
Pivotamento parcial
Seja o vetor de n elementos
● Afirmarmos que o primeiro elemento é o maior em módulo e o guardamos numa variável M, valor provisoriamente de máximo e em IM a linha deste máximo provisório.
● Se M < |v2| , façamos M=|v2| e IM = 2. Caso não, avançamos para o próximo elemento
v⃗
Pivotamento parcial
Seja o vetor de n elementos
● Afirmarmos que o primeiro elemento é o maior em módulo e o guardamos numa variável M, valor provisoriamente de máximo e em IM a linha deste máximo provisório.
● Se M < |v2| , façamos M=|v2| e IM = 2. Caso não, avançamos para o próximo elemento
● Se M < |v3|, faremos M=|v3|e IM = 3. Caso não, avançamos para o próximo elemento.
v⃗
Pivotamento parcial
Seja o vetor de n elementos
● Afirmarmos que o primeiro elemento é o maior em módulo e o guardamos numa variável M, valor provisoriamente de máximo e em IM a linha deste máximo provisório.
● Se M < |v2| , façamos M=|v2| e IM = 2. Caso não, avançamos para o próximo elemento
● Se M < |v3|, faremos M=|v3|e IM = 3. Caso não, avançamos para o próximo elemento.
● Faremos isto até o último elemento
● Custo computacional por coluna: O(n), custo total O(n2)
v⃗
Pivotamento parcial
Façamos um exemplo para esclarecer a questão de acharmos o maior elemento de um vetor.
Dado o vetor
v⃗=(13
−428
)
Pivotamento parcial
● M = 1, IM = 1
● M <|3|, portanto M = 3, IM = 2
● M < |-4|, portanto M = 4, IM = 3
● M > |2|
● M < |8|, portanto M = 8, IM = 5
v⃗=(13
−428
)
Pivotamento parcial
● M = 1, IM = 1
● M <|3|, portanto M = 3, IM = 2
● M < |-4|, portanto M = 4, IM = 3
● M > |2|
● M < |8|, portanto M = 8, IM = 5. Obtivemos a posição do valor maior em módulo do vetor
v⃗=(13
−428
)
Pivotamento parcial
● Vemos que o custo computacional para a primeira coluna será de n – 1 comparações e no máximo n – 1 trocas.
● Para a segunda coluna serão n – 2 comparações e no máximo n – 2 trocas
Pivotamento parcial
Fica claro que ao aplicar o pivotamento parcial teremos que fazer
comparações
e
no máximo trocas de linhas.
(n−1)+(n−2)+⋯+2+1=n(n−1)
2=O (n2
)
O(n2)
Pivotamento parcial
Fica claro que ao aplicar o pivotamento parcial teremos que fazer
comparações
e
no máximo trocas de linhas.
O custo adicional é relativamente pequeno.
(n−1)+(n−2)+⋯+2+1=n(n−1)
2=O (n2
)
O(n2)
Pivotamento parcial – Um exemplo
O exemplo que será apresentado é ilustrativo da técnica mas é, claramente, desnecessário (sob o ponto de vista numérico) fazer pivotamento deste sistema:
O sistema contém números inteiros e será resolvido com números racionais...
Pivotamento parcial
Comecemos com o sistema
Observe que o maior valor em módulo da primeira coluna está na segunda linha. Troquemos
(4 1 −2 16 2 1 23 −1 9 −11 4 2 −3
) x⃗= (49 /1247 /621 /435 /12
)
Pivotamento parcial
Primeiro pivotamento
Façamos a eliminação
(6 2 1 24 1 −2 13 −1 9 −11 4 2 −3
) x⃗= (47 /649 /1221 /435 /12
)
Pivotamento parcial
Primeiro pivotamento
que resulta em
(6 2 1 24 1 −2 13 −1 9 −11 4 2 −3
) x⃗= (47 /649 /1221 /435 /12
)m21=−a21 /a11=−4 /6=−2/3m31=−a31 /a11=−3 /6=−1/2m41=−a41 /a11=−1 /6
Pivotamento parcial
Primeiro pivotamento
O maior valor em módulo da segunda coluna abaixo da primeira linha está na quarta linha
(6 2 1 20 −1 /3 −8 /3 −1/30 −2 17 /2 −20 11/3 11/6 −10 /3
) x⃗=(47 /6
−41 /364 /3
29 /18)
Pivotamento parcial
Segundo pivotamento
Façamos a eliminação
(6 2 1 20 11/3 11/6 −10 /30 −2 17 /2 −20 −1 /3 −8 /3 −1/3
) x⃗=(47 /6
29 /184 /3
−41 /36)
Pivotamento parcial
Segundo pivotamento
que resulta em
(6 2 1 20 11/3 11/6 −10 /30 −2 17 /2 −20 −1 /3 −8 /3 −1/3
) x⃗=(47 /6
29 /184 /3
−41 /36)
m32=−−2
11 /3=6 /11
m42=−−1 /311/3
=1 /11
Pivotamento parcial
Segundo pivotamento
Observe que o maior valor em módulo da terceira coluna abaixo da segunda linha está na posição correta. Façamos a eliminação
(6 2 1 20 11/3 11/6 −10 /30 0 19 /2 −42/110 0 −5 /2 −7 /11
) x⃗=(47 /6
29 /1873 /33
−131/132)
Pivotamento parcial
Eliminação
que resulta em
(6 2 1 20 11/3 11/6 −10 /30 0 19 /2 −42/110 0 −5 /2 −7 /11
) x⃗=(47 /6
29 /1873 /33
−131/132) m43=−
−5 /219 /2
=5
19
Pivotamento parcial
Eliminação
que a resolução deste sistema triangular nos dará
(6 2 1 20 11/3 11/6 −10 /30 0 19/2 −42/110 0 0 −343 /209
) x⃗=(47 /6
29 /1873/33
−343 /836)
Pivotamento parcial
a solução
(6 2 1 20 11/3 11/6 −10 /30 0 19/2 −42/110 0 0 −343 /209
) x⃗=(47 /6
29 /1873/33
−343 /836)
x 4=−343836
×(−209343 )= 1
4x3=
219 ( 73
33+
4211
×14 )= 1
3 x2=311 ( 11
6×
13−
103
×14 )=1
2
x1=16 (47 /6−2×
12+
1×13
+2×14 )=1
Pivotamento parcial
Solução
x⃗=(1
1/21/31/4
)
Pivotamento parcial e algoritmo de eliminação
Repare que:
O uso do pivotamento parcial resolve a possibilidade de aparecer valores nulos para algum pivô na eliminação gaussiana.
Pivotamento parcial e algoritmo de eliminação
Repare que:
O uso do pivotamento parcial resolve a possibilidade de aparecer valores nulos para algum pivô na eliminação gaussiana.
Conjugar o algoritmo ingênuo com o pivotamento parcial soluciona de forma simples a questão e aumenta a estabilidade do algoritmo simultaneamente
Pivotamento total
A busca do maior valor da matriz agora é feita em toda matriz ou submatriz que ainda não passou pelo processo de eliminação
Pivotamento total
A busca do maior valor da matriz agora é feita em toda matriz ou submatriz que ainda não passou pelo processo de eliminação
Isto exigirá:
● troca de linhas e de colunas
● um algoritmo que compute as mudanças de colunas
● Custo computacional por submatriz O(n2), total O(n3)
Pivotamento total
Pivotamento total
Devido à estas características (aumento de complexidade de algoritmo, aumento de custo computacional) este pivotamento é usado em situações especiais.
Não aprofundaremos o estudo sobre este item.
Casos especiais
Vimos algoritmos genéricos para a resolução de sistemas de equações lineares mas é comum termos sistemas com estruturas particulares que podem ser exploradas para conseguirmos maior eficiência
Casos especiais
Ilustraremos o uso inteligente destas estruturas usando um único exemplo com aplicação da eliminação gaussiana
Sistemas tridiagonais
Um sistema tridiagonal tem a estrutura
e há várias situações onde aparecem sistemas com esta simetria.
(a1 b1 0 0 0 ⋯ 0 0 0c2 a2 b2 0 0 ⋯ 0 0 00 c3 a3 b3 0 ⋯ 0 0 00 0 c4 a4 b4 ⋯ 0 0 0⋮ ⋮ ⋮ ⋮ ⋮ ⋯ ⋮ ⋮ ⋮0 0 0 0 0 ⋯ cn−1 an−1 bn−1
0 0 0 0 0 ⋯ 0 cn an
) x⃗=(d1
d2
d3
d4
⋮dn−1
dn
)
Sistemas tridiagonais
Um sistema tridiagonal tem a estrutura
e há várias situações onde aparecem sistemas com esta simetria.
Observe que teremos que fazer uma única eliminação em cada coluna
(a1 b1 0 0 0 ⋯ 0 0 0c2 a2 b2 0 0 ⋯ 0 0 00 c3 a3 b3 0 ⋯ 0 0 00 0 c4 a4 b4 ⋯ 0 0 0⋮ ⋮ ⋮ ⋮ ⋮ ⋯ ⋮ ⋮ ⋮0 0 0 0 0 ⋯ cn−1 an−1 bn−1
0 0 0 0 0 ⋯ 0 cn an
) x⃗=(d1
d2
d3
d4
⋮dn−1
dn
)
Sistemas tridiagonais
O fator de eliminação do elemento é que aplicado a segunda linha só afetará da seguinte forma
(a1 b1 0 0 0 ⋯ 0 0 0c2 a2 b2 0 0 ⋯ 0 0 00 c3 a3 b3 0 ⋯ 0 0 00 0 c4 a4 b4 ⋯ 0 0 0⋮ ⋮ ⋮ ⋮ ⋮ ⋯ ⋮ ⋮ ⋮0 0 0 0 0 ⋯ cn−1 an−1 bn−1
0 0 0 0 0 ⋯ 0 cn an
) x⃗=(d1
d2
d3
d4
⋮dn−1
dn
)−c2/a1c2
a2 e d2
a2←a2−c2
a1
b1 ;d2←d2−c2
a1
d1
Sistemas tridiagonais
Com isto temos o processo de eliminação na primeira coluna concluído com custo de duas divisões (podendo ser uma), uma soma e uma multiplicação.
Façamos o mesmo procedimento para a segunda linha
Sistemas tridiagonais
O fator de eliminação do elemento é que aplicado a segunda linha só afetará da seguinte forma
(a1 b1 0 0 0 ⋯ 0 0 0c2 a2 b2 0 0 ⋯ 0 0 00 c3 a3 b3 0 ⋯ 0 0 00 0 c4 a4 b4 ⋯ 0 0 0⋮ ⋮ ⋮ ⋮ ⋮ ⋯ ⋮ ⋮ ⋮0 0 0 0 0 ⋯ cn−1 an−1 bn−1
0 0 0 0 0 ⋯ 0 cn an
) x⃗=(d1
d2
d3
d4
⋮dn−1
dn
)−c3 /a2c3
a3 e d3
a3←a3−c3
a2
b2 ;d3←d3−c3
a2
d2
Sistemas tridiagonais
Observe que a generalização do procedimento para as demais linhas é bem simples.
Na enésima linha teremos
Sistemas tridiagonais
O fator de eliminação do elemento é que resulta em
(a1 b1 0 0 0 ⋯ 0 0 0c2 a2 b2 0 0 ⋯ 0 0 00 c3 a3 b3 0 ⋯ 0 0 00 0 c4 a4 b4 ⋯ 0 0 0⋮ ⋮ ⋮ ⋮ ⋮ ⋯ ⋮ ⋮ ⋮0 0 0 0 0 ⋯ cn−1 an−1 bn−1
0 0 0 0 0 ⋯ 0 cn an
) x⃗=(d1
d2
d3
d4
⋮dn−1
dn
)−cn /an−1cn
an←an−cn
an−1
bn−1 ;dn←dn−cn
an−1
dn−1
Sistemas tridiagonais
O algoritmo ficará como
ai←ai−ci
ai−1
bi−1 ;d i←di−c i
ai−1
d i−1 ;i=2,3,⋯n
Sistemas tridiagonais
Sendo este o resultado final da eliminação
Partamos agora para a retrosubstituição adaptada a este caso
(a1 b1 0 0 0 ⋯ 0 0 00 a2 b2 0 0 ⋯ 0 0 00 0 a3 b3 0 ⋯ 0 0 00 0 0 a4 b4 ⋯ 0 0 0⋮ ⋮ ⋮ ⋮ ⋮ ⋯ ⋮ ⋮ ⋮0 0 0 0 0 ⋯ 0 an−1 bn−1
0 0 0 0 0 ⋯ 0 0 an
) x⃗=(d1
d2
d3
d 4
⋮dn−1
dn
)
Sistemas tridiagonais
Teremos o que se segue
xn=dn
an
an−1 xn−1+bn−1 xn=dn−1⇒ xn−1=dn−1−bn−1 xn
an−1
an−2 xn−2+bn−2 xn=dn−2⇒ xn−2=dn−2−bn−2 xn−1
an−2
a1 x1+b1 x2=d1⇒ x1=d1−b1 x2
a1
⋮
Sistemas tridiagonais
O algoritmo tomará a forma
com custo computacional O(n)
xn=dn
an
xi=di−bi x i+1
ai
; i=n−1,⋯,1
Sistemas tridiagonais
A própria maneira que o algoritmo é apresentado nos mostra que este tipo de sistema pode ser armazenado em vetores.
Sistemas tridiagonais
Representarmos este sistema na forma matricial é um inconveniente:
Existem apenas 3n -2 elementos potencialmente não nulos e o restante, n(n-3) – 2 elementos, são nulos.
Ao usamos a estrutura de dados vetor, comum nas linguagens de programação, iremos utilizar de 3n espaços de memória.
Sistemas tridiagonais
Por exemplo:
um sistema com 100 variáveis a determinar, se conservársemos a notação matricial, ocuparíamos 9700 posições com zeros, informação irrelevante para a resolução do sistema.
Sistemas tridiagonais – Um exemplo
Seja o sistema abaixo. Resolva-o pelo uso do algoritmo apresentado
(4 1 0 0 0 01 3 2 0 0 00 2 6 3 0 00 0 −1 5 2 00 0 0 2 3 20 0 0 0 1 7
) x⃗=(61334273547
)
Sistemas tridiagonais – Um exemplo
Passemos da representação matricial para a forma de armazenamento vetorial
(4 1 0 0 0 01 3 2 0 0 00 2 6 3 0 00 0 −1 5 2 00 0 0 2 3 20 0 0 0 1 7
) x⃗=(61334273547
) a⃗=(436537
) ; b⃗=(123220
) ; c⃗=(012
−121
) ; d⃗=(61334273547
)
Sistemas tridiagonais
Apliquemos o algoritmo de eliminação dado por
ai←ai−ci
ai−1
bi−1 ;d i←di−c i
ai−1
d i−1 ;i=2, 3,⋯n
Sistemas tridiagonais – Um exemplo
Façamos a eliminação:
c2
a1
=14
; a2←3−14
1⇒ a2=114
; d2←13−14
6⇒d 2=232
ai← ai−ci
ai−1
bi−1; d i←d i−ci
ai−1
d i−1 ;i=2,3,⋯n
a⃗=(436537
) ; b⃗=(123220
) ; c⃗=(012
−121
) ; d⃗=(6
1334273547
)⇒ a⃗=(4.....); d⃗=(
6.....)
Sistemas tridiagonais – Um exemplo
Façamos a eliminação:
c2
a1
=14
; a2←3−14
1⇒ a2=114
; d2←13−14
6⇒d 2=232
c3
a2
=2
11/4=
811
; a3←6−811
2⇒a3=5011
;d3←34−811
232
⇒ d3=28211
ai← ai−ci
ai−1
bi−1; d i←d i−ci
ai−1
d i−1 ;i=2,3,⋯n
a⃗=(436537
) ; b⃗=(123220
) ; c⃗=(012
−121
) ; d⃗=(6
1334273547
)⇒ a⃗=(4
11 /4....
); d⃗=(6
23 /2....
)
Sistemas tridiagonais – Um exemplo
Façamos a eliminação:
c2
a1
=14
; a2←3−14
1⇒ a2=114
; d2←13−14
6⇒d 2=232
c3
a2
=2
11/4=
811
; a3←6−811
2⇒a3=5011
;d3←34−811
232
⇒ d3=28211
ai← ai−ci
ai−1
bi−1; d i←d i−ci
ai−1
d i−1 ;i=2,3,⋯n
c 4
a3
=−1
50/11=−
1150
; a4←5+1150
3⇒a4=28350
;d 4←27+1150
28211
⇒ d4=81625
a⃗=(436537
) ; b⃗=(123220
) ; c⃗=(012
−121
) ; d⃗=(6
1334273547
)⇒ a⃗=(4
11/450 /11
.
.
.) ; d⃗=(
623 /2
282 /11...
)
Sistemas tridiagonais – Um exemplo
Façamos a eliminação:
c2
a1
=14
; a2←3−14
1⇒ a2=114
; d2←13−14
6⇒d 2=232
c3
a2
=2
11/4=
811
; a3←6−811
2⇒a3=5011
;d3←34−811
232
⇒ d3=28211
ai← ai−ci
ai−1
bi−1; d i←d i−ci
ai−1
d i−1 ;i=2,3,⋯n
c 4
a3
=−1
50/11=−
1150
; a4←5+1150
3⇒a4=28350
;d 4←27+1150
28211
⇒ d4=81625
a⃗=(436537
) ; b⃗=(123220
) ; c⃗=(012
−121
) ; d⃗=(6
1334273547
)⇒ a⃗=(4
11/450 /11283 /50
.
.) ; d⃗=(
623 /2
282 /11816 /25
.
.)
c5
a4
=2
283 /50=
100283
; a5←3−100283
2⇒a5=649283
; d5←35+100283
81625
⇒ d 5=6641283
Sistemas tridiagonais – Um exemplo
Façamos a eliminação:
c2
a1
=14
; a2←3−14
1⇒ a2=114
; d2←13−14
6⇒d 2=232
c3
a2
=2
11/4=
811
; a3←6−811
2⇒a3=5011
;d3←34−811
232
⇒ d3=28211
ai← ai−ci
ai−1
bi−1; d i←d i−ci
ai−1
d i−1 ;i=2,3,⋯n
c 4
a3
=−1
50/11=−
1150
; a4←5+1150
3⇒a4=28350
;d 4←27+1150
28211
⇒ d4=81625
a⃗=(436537
) ; b⃗=(123220
) ; c⃗=(012
−121
) ; d⃗=(6
1334273547
)⇒ a⃗=(4
11/450/11
283 /50649 /283
.) ; d⃗=(
623/2
282/11816 /25
6641 /283.
)
c5
a4
=2
283 /50=
100283
; a5←3−100283
2⇒a5=649283
; d5←35+100283
81625
⇒ d 5=6641283
c6
a5
=1
649 /283=
283649
; a6←7−283649
2⇒ a6=3977649
; d6←47−283649
6641283
⇒ d6=23862649
Sistemas tridiagonais – Um exemplo
Eliminação concluida
a⃗=(436537
) ; b⃗=(123220
) ; c⃗=(012
−121
) ; d⃗=(6
1334273547
)⇒ a⃗=(4
11/450 /11
283 /50649 /283
3977 /649) ;d⃗=(
623/2
282 /11816 /25
6641 /28323862 /649
)
Sistemas tridiagonais
Apliquemos o algoritmo correspondente à retrosubstituição dado por
xn=dn
an
; x i=d i−bi xi+1
ai
; i=n−1,⋯,1
Sistemas tridiagonais
Retrosubstituição:
b⃗=(123220
) ; a⃗=(4
11/450 /11283 /50
649 /2833977 /649
) ; d⃗=(6
23/2282 /11816 /25
6641/28323862 /649
)xn=
dn
an
; xi=d i−bi x i+1
ai
; i=n−1,⋯,1
x6=d6
a6
=23862/6493977 /649
=6
x5=6641/283−2×6
649 /283=
3245 /283649 /283
=5
x4=816 /25−2×5
283 /50=
566 /25283 /50
=4
x3=282/11−3×4
50/11=
150 /1150 /11
=3
x2=23 /2−2×3
11 /4=
11/211 /4
=2
x1=6−1×2
4=1
Sistemas tridiagonais
Solução
x⃗=(123456
)
Sistemas de equações lineares
O uso inteligente do algoritmo de eliminação gaussiana fez com que o custo computacional caia consideravelmente
O mesmo pode ser feito em situações onde a estrutura da matriz permite algoritmos mais eficientes
Sistemas de equações lineares
Existem algoritmos especiais para solução de sistemas de equações específicos que podem reduzir em muito o custo computacional
Sistemas de equações lineares
Um destes sistemas tem como matriz um tipo especial chamado de Matrizes de Toeplitz que resulta de problemas mais sofisticados de processamento numérico.
Sistemas de equações lineares
No item deste curso onde trataremos Interpolação veremos um sistema de equações que pode ser resolvido com custo mais baixo que devido justamente à sua especificidade.O(n3
)