Upload
hoangduong
View
227
Download
0
Embed Size (px)
Citation preview
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
● Erros e Aproximações Numéricas
● Sistemas de Equações Lineares. Métodos diretos
● Interpolação
● Ajuste de Curvas
● Zeros de Função
● Sistemas de Equações Lineares. Métodos Iterativos
● Integração Numérica
● Introdução à Resolução de Equações Diferenciais Ordinárias
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
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.
● 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. Obtivemos a posição do valor maior em módulo do vetor
v⃗=(13
−428
)
Pivotamento parcial
O exemplo que será apresentado é ilustrativo da técnica mas é, claramente, desnecessário (sob o ponto de vista numérico) fazer pivotamento deste sistema.
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 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.
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
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.
Efetivamente, ao usamos a estrutura de dados vetor, comum nas linguagens de programação, iremos utilizar de 3n espaços de memória.
Assim 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