Escolar Documentos
Profissional Documentos
Cultura Documentos
MOT TA P I R E S
N
FR
M É TO DOS COMPU TAC I O NA I S
EM ENGENH A R I A
-U
CA
Notas de Aula 02 - versão 0.2
N
a1,1 x1 + a1,2 x2 + · · · + a1,n xn = b1
a2,1 x1 + a2,2 x2 + · · · + a2,n xn = b2
FR
.. .. .. .. ..
. . . . .
an,1 x1 + an,2 x2 + · · · + an,n xn = bn
ou na forma matricial
-U
Ax = b
onde
a1,1 a1,2 · · · a1,n
2,1 a2,2 · · · a2,n
a
A = [ai,j ] = .
.. .. ..
.. CA. . .
an,1 an,2 · · · an,n
com as constantes aij ∈ R e i, j = 1, 2, · · · n
x1 b1
x b
2 2
x= e b=
-D
.. ..
. .
xn bn
Nas expressões anteriores, A ∈ Rn×n é a matriz dos coeficientes, quadrada e n × n indica n linhas e n co-
de ordem n, x ∈ Rn×1 é o vetor das incógnitas e b ∈ Rn×1 é o vetor dos termos lunas; n × 1 indica n linhas
independentes. e 1 (uma) coluna
P
MÉTODOS
DIRETOS
N
FR
Ax = b
ESTACIONÁRIOS
-U
MÉTODOS
ITERATIVOS
NÃO-
ESTACIONÁRIOS
Métodos Diretos CA
Os métodos diretos permitem obter a solução, , de um sistema linear através
da realização de um número finito de operações sobre o sistema. Dentre esses
métodos, destacam-se o método de resolução de sistemas triangulares, o método
de Gauss e o método da decomposição LU.
Resolução de Sistemas Triangulares
-D
× × × × ×
× × × ×
× × ×
P
0× ×
×
M
N
×
× × 0
FR
× × ×
× × × ×
× × × × ×
Observe que os elementos acima da diagonal principal, identificada por ×, são
-U
todos iguais a zero.
⋅ ⋅ ⋅ 0.278553 0.0250067
⋅ ⋅ ⋅ ⋅ 0.997735
julia> TriangInferior = LowerTriangular(A)
M
5×5 LinearAlgebra.LowerTriangular{Float64,Array{Float64,2}}:
0.0854099 ⋅ ⋅ ⋅ ⋅
0.513124 0.632162 ⋅ ⋅ ⋅
0.117107 0.442025 0.519766 ⋅ ⋅
PS
N
Se A é triangular superior, o sistema linear Ax = b é chamado de sistema
linear triangular superior. Se A for triangular inferior, o sistema é chamado de
sistema linear triangular inferior. Nessas Not a s d e Au l a , iremos analisar
FR
apenas os sistemas lineares triangulares superiores. A extensão dessa análise
para os sistemas lineares triangulares inferiores é direta.
Vamos considerar, então, sistemas lineares da forma :
a1,1 x1 + a1,2 x2 + a1,3 x3 + · · · + a1,n−1 xn−1 + a1,n xn = b1
-U
a2,2 x2 + a2,3 x3 + · · · + a2,n−1 xn−1 + a2,n xn = b2
a3,3 x3 + · · · + a3,n−1 xn−1 + a3,n xn = b3
.. .. ..
. . .
an−1,n−1 xn−1 + an−1,n xn = bn − 1
an,n xn = bn
CA
O sistema triangular superior pode ser resolvido usando as equações
bn
xn =
an,n
-D
bn−1 − an−1,n xn
x n −1 =
an−1,n−1
..
.
b2 − a2,3 x3 − · · · − a2,n−1 xn−1 − a2,n xn
x2 =
a2,2
P
sistema triangular superior é obtida na ordem reversa dos índices das incógnitas.
Primeiro, calcula-se o valor de xn , depois o valor de xn−1 até, finalmente, calcular
o de x1 . Esse procedimento é chamado de substituição reversa.
N
xn =
an,n
n
br − ∑ ar,j ∗ x j
FR
j =r +1
xr = r = n − 1, n − 2, . . . , 1
ar,r
No caso de um sistema triangular inferior, a solução é obtida na ordem direta
dos índices das incógnitas. O procedimento é chamado de substituição direta.
-U
EXEMPLO 2 Resolver o sistema triangular superior
6
x5 = =2
3
10 + x5 10 + 2
x4 = = = −6
−2 −2
x3 = 3 + 2x5 + x4 = 3 + 2(2) − 6 = 1
−7x5 − 2x4 − 6x3 −7(2) − 2(−6) − 6(1)
x2 = = =4
P
−2 −2
4 + x5 − 2x4 − 2x3 + x2 4 − 2 − 2(−6) − 2(1) + 4
x1 = = =5
M
4 4
Então,
x1 5
x2 4
PS
x3 = 1
x 4 − 6
x5 2
Para esse sistema, a matriz dos coeficientes e a matriz dos termos indepen-
dentes são dadas por
RN
4 −1 2 2 −1
4
0 −2 6 2 7
0
0 0 1 − 1 − 2
A= b = 3
UF
0 0 0 −2 −1
10
0 0 0 0 3 6
-
4 -1 2 2 -1
⋅ -2 6 2 7
⋅ ⋅ 1 -1 -2
⋅ ⋅ ⋅ -2 -1
⋅ ⋅ ⋅ ⋅ 3
julia> b = [4, 0, 3, 10, 6]
A
DC
5-element Array{Int64,1}:
4
0
3
10
6
julia> A \ b
-
5-element Array{Float64,1}:
5.0
4.0
1.0
MP
-6.0
2.0
de dimensões elevadas.
Uma maneira mais adequada é, então, digitar os elementos de A e de b em
arquivos ASCII. Dessa maneira, os erros de digitação são minimizados e os
arquivos podem ser reutilizados em uma outras oportunidades.
N
5×5 Array{Float64,2}:
4.0 -1.0 2.0 2.0 -1.0
0.0 -2.0 6.0 2.0 7.0
0.0 0.0 1.0 -1.0 -2.0
FR
0.0 0.0 0.0 -2.0 -1.0
0.0 0.0 0.0 0.0 3.0
julia> b = reshape(readdlm("vetorb.txt"),:,1)
5×1 Array{Float64,2}:
4.0
-U
0.0
3.0
10.0
6.0
julia> A \ b
5×1 Array{Float64,2}:
5.0
4.0
1.0
CA
-6.0
2.0
Método de Gauss
-D
2,1 a2,2 · · · a2,n
a b2
[A | b] , .
M
. .. .. .. ..
. . . . .
an,1 an,2 · · · an,n bn
PS
N
1. Trocar a posição de duas linhas;
FR
3. Adicionar um múltiplo de uma linha a outra linha. Os valores numéricos uti-
lizados nas multiplicações
1 1 1 1 1 1 1 1 1 1 das linhas são chamados de
2 4 8 16 9 L2 ←−2L1 + L2
0 2 6 14 7 multiplicadores de Gauss
=⇒
-U
3 9 27 81 36 L3 ←−3L1 + L3 0 6 24 78 33
4 16 64 256 100 L4 ←−4L1 + L4 0 12 60 252 96
1 1 1 1 1
CA
1 1 1 1 1
0 2 6 14 7 0 1 3 7/2
7
=⇒
0 6 24 78 33 0 0 1 6 2
L3 ←−3L2 + L3
0 12 60 252 96 L4 ←−6L2 + L4 0 0 −2 −14 −9/2
-D
1 1 1 1 1 1 1 1 1 1
0 1 3 7/2
7 0 1 3 77/2
=⇒
P
0 0 1 6 2 0 0 1 6 2
0 0 −2 −14 −9/2 L4 ←2L3 + L4 0 0 0 −2 −1/2
M
Método da Decomposição LU
O método da decomposição LU também é conhecido como o método da
N
fatoração LU. O objetivo do método é decompor,ou fatorar, a matriz dos coefi-
cientes, A, em um produto entre duas matrizes. Uma delas, L, é uma matriz
triangular inferior, com todos os elementos da diagonal principal iguais a 1.
FR
A outra, U, é uma matriz triangular superior com os elementos da diagonal
principal diferentes de zero. A matriz A, então, passa a ser escrita na forma:
A = LU
-U
julia> A = [1 1 1; 4 3 -1; 3 5 3]
3×3 Array{Int64,2}:
1 1 1
4 3 -1
3 5 3
julia> L, U = lu(A)
CA
LinearAlgebra.LU{Float64,Array{Float64,2}}
L factor:
3×3 Array{Float64,2}:
1.0 0.0 0.0
0.75 1.0 0.0
0.25 0.0909091 1.0
-D
U factor:
3×3 Array{Float64,2}:
4.0 3.0 -1.0
0.0 2.75 3.75
0.0 0.0 0.909091
Além de ser utilizado para fatorar a matriz A, o método LU pode ser utilizado
P
Ax = b
Se A = LU, podemos escrever o sistema linear Ax = b como
PS
LUx = b
N
y = Ux
podemos obter y resolvendo
FR
Ly = b
Em seguida, com o valor de y conhecido, podemos obter a solução desejada,
x, resolvendo
-U
Ux = y
A equação para y é resolvida por substituição direta enquanto a equação
para x, é resolvida por substituição reversa.
Alguns métodos podem ser utilizados para a obtenção das matrizes L e U:
1. O método da decomposição de Doolittle, que considera os elementos da
diagonal principal da matriz L iguais a 1;
CA
2. A utilização do método de triangularização de Gauss para obter a matriz U
e gerar a matriz L considerando seus elementos da diagonal principal iguais
a 1 e os multiplicadores de Gauss, com sinais trocados, como os elementos
-D
x1 + x2 + x3 = 1
4x1 + 3x2 − x3 = 6
M
N
1 1 1 u11 u1,2 u1,3
4 3 −1 = l2,1 u1,1 l2,1 u1,2 + u2,2 l2,1 u1,3 + u2,3
FR
3 5 3 l3,1 u1,1 l3,1 u1,2 + l3,2 u2,2 l3,1 u1,3 + l3,2 u2,3 + u3,3
| {z }
LU
-U
u1,1 = u1,2 = u1,3 = 1
l2,1 u1,1 = 4, l2,1 u1,2 + u2,2 = 3, l2,1 u1,3 + u2,3 = −1
l3,1 u1,1 = 3, l3,1 u1,2 + l3,2 u2,2 = 5,
CA l3,1 u1,3 + l3,2 u2,3 + u3,3 = 3
Resolvendo o sistema, obtemos,
1 0 0 1 1 1
L = 4 1 0 U = 0 −1 −5
3 −2 1 0 0 −10
-D
obtemos
y1 1
M
y
2 2
=
y3 5
e, usando a equação Ux = y,
PS
1 1 1 x1 1
0 −1 −5 x2 = 2
0 0 −10 x3 5
N
x1 1
x2 = 1/2
x3 −1/2
FR
EXEMPLO 4 Outra maneira de obter as matrizes L e U
Para obter a matriz U, usamos o processo da triangularização de Gauss.
-U
Depois, consideramos os elementos da diagonal principal da matriz L iguais a
1 e usamos os multiplicadores de Gauss, com sinais trocados, como elementos
abaixo da diagonal principal.
Assim,
1 1 1 1 1 1
4 3 −1 L2 ← L1 −4L1 =⇒ 0 −1 −5
3 5 3 L3 ← L3 −3L1
CA
0 2 0
1 1 1 1 1 1
-D
0 −1 −5
=⇒
0 −1 −5
0 2 0 L3 ← L3 +2L2 0 0 −10
de triangularização da matriz A.
M
1 0 0 1 1 1
L = 4 1 0 U = 0 −1 −5
3 −2 1 0 0 −10
PS
N
x1 + x2 + x3 = 1
4x1 + 3x2 − x3 = 6
3x1 + 5x2 + 3x3 = 4
FR
usando método da decomposição de Crout.
Temos:
1 1 1 l1,1 0 0 1 u1,2 u1,3
-U
A = 4 3 −1 = l2,1 l2,2 0 0 1 u2,3
3 5 3 l3,1 l3,2 l3,3 0 0 1
| {z }| {z }
L U
L = 4 −1 0 U = 0 1 5
3 2 −10 0 0 1
1 0 0 y1 1
N
4 −1 0 y2 = 6
3 2 −2 y3 4
Resolvendo a equação matricial anterior, temos
FR
y1 1
y2 = −2
y3 −1/2
-U
Conhecido o valor de y, equação Ux = y é é utilizada para obter a solução x,
1 1 1 x1 1
0 1 1x2 = −2
0 0 1 x3 −1/2 CA
A solução do sistema x1 = 1, x2 = 1/2 e x3 = −1/2, que pode ser escrita na
forma
x1 1
x2 = 1/2
x3 −1/2
-D
1. kxk ≥ 0, x ∈ Rn ; kxk = 0 ↔ x = 0
M
2. kx + yk ≤ kxk + kyk, x, y ∈ Rn
3. kαxk = |α|kxk; α ∈ R, x ∈ Rn
PS
N
k(x)k1 = | x1 | + | x2 | + · · · + | xn | = ∑ xi
i =1
FR
» n ó1 / 2
∑ | x i |2
î
kxk2 = | x1 |2 + | x2 |2 + · · · + | x n |2 =
i =1
-U
kxk∞ = max | xi |
1≤ i ≤ n
x = {1, 2, −3, 4}
CA
Solução
Usando a expressão
» n ó1 / p
∑ | xi | p
î
kxk p = | x1 | p + | x2 | p + · · · + | x n | p =
i =1
-D
temos, para p = 1,
para p = 2,
» » √
P
para p = 3,
M
e, para p = ∞,
PS
N
p = 1, l1 kxk1 10
p = 2, l2 kxk2 5.4772
FR
p = 3, l3 kxk3 4.6416
p = ∞, l∞ kxk ∞ 4
julia> x = [1 2 -3 4]
1×4 Array{Int64,2}:
-U
1 2 -3 4
julia> norm(x, 1)
10.0
julia> norm(x, 2)
5.477225575051661
julia> norm(x, 3)
4.641588833612778
julia> norm(x, Inf)
4.0
CA
Norma de Matriz
A norma de matriz para uma matriz A ∈ Rn×n , escrita como k Ak, é uma
função de Rn×n → R que satisfaz as propriedades:
-D
1. k Ak ≥ 0, A ∈ Rn×n ; k Ak = 0 ↔ A = 0
2. k A + Bk ≤ k Ak + k Bk, A, B ∈ Rn×n
∑ ∑ |ai,j | p
î ó
k Ak p =
i =1 j =1
N
0≤i,j≤0
e p = 2, ou norma de Frobenius,
FR
Ã
n n
k A k2 = k A k F = ∑ ∑ |ai,j |2
i =1 j =1
-U
ordem m × n.
EXEMPLO 7 Calcular as normas p = 1, 2, ∞ para a matriz
3 −6 2
2 5 1
−3 2 2
Solução
CA
Usando a expressão,
n n
∑ ∑ |ai,j | p
î ó
k Ak p =
i =1 j =1
-D
parap = 1, temos
n n
k A k1 = ∑ ∑ |ai,j | = ||3| + | −{z6| + |2}| + ||2| + |{z5| + |1}| + || − 3| +{z|2| + |2}| = 11 + 8 + 7 = 26
i =1 j =1
i =1 i =2 i =3
Para p = 2, temos
P
Ã
n n s
k A k2 = k A k F = ∑ ∑ |ai,j |2 = |3|2 + | − 6|2 + |2|2 + |2|2 + |5|2 + |1|2 + | − 3|2 + |2|2 + |2|2
M
i =1 j =1
| {z } | {z } | {z }
i =1 i =2 i =3
√
= 9| + 36 + 4 + 4 + 25 + 1 + 9 + 4 + 4 = 49 + 30 + 17 = 9.7979
{z } | {z } | {z }
i =1 i =2 i =3
PS
Para p = ∞, temos
k Ak∞ = max | ai,j | = max [|3|, | − 6|, |2|, |2|, |5|, |1|, | − 3|, |2|, |2|] = max [3, 6, 2, 3, 5, 1, 3, 2, 2] = 6
0≤i,j≤0 0≤i,j≤0 0≤i,j≤0
N
Norma k Ak p Valor
FR
p = 1, l1 k A k1 26
p = 2, l2 k A k2 = k A k F 9.7979
p = ∞, l∞ k Ak∞ 6
-U
julia> A = [3 -6 2; 2 5 1; -3 2 2]
3×3 Array{Int64,2}:
3 -6 2
2 5 1
-3 2 2 CA
julia> norm(A, 1)
26.0
julia> norm(A,2)
9.797958971132712
julia> norm(A, Inf)
6.0
-D
Métodos Iterativos
São métodos que, a partir de uma aproximação inicial para a solução do
sistema linear, permitem calcular uma sequência de aproximações para os valo-
res de x até que uma precisão pré-estabelecida seja alcançada. A sequência de
P
N
a2,1 x1 + a2,2 x2 + · · · + a2,n xn = b2
.. .. .. .. ..
. . . . .
an,1 x1 + an,2 x2 + · · · + an,n xn = bn
FR
Método de Jacobi
O método de Jacobi, ou método de Gauss-Jacobi consiste na geração de
aproximações sucessivas, a partir de uma solução inicial, para o vetor solução x
a partir das equações :
-U
(k +1) 1 (k) (k) (k) b1
x1 = − (a1,2 x2 + a1,3 x3 + · · · + a1,n xn ) +
a1,1 a1,1
(k +1) 1 (k) (k) b2
x2 = − (a2,1 x1 + a2,3 x3 + · · · + a2,n xn (k)) +
a2,2 a2,2
............................................................
(k +1)
xn = −
1 (k) (k)
CA (k)
(an,1 x1 + an,2 x2 + · · · + an,n−1 xn−1 ) +
bn
an,n an,n
N
Escrevendo o sistema linear na forma de Jacobi, temos
FR
(k +1) (k) (k)
x1 = [8.00 − 0.24x2 + 0.08x3 ]
4.00
(k +1) 1 (k) (k)
x2 = [9.00 − 0.09x1 + 0.15x3 ]
3.00
(k +1) 1 (k) (k)
x3 = [20.00 − 0.04x1 + 0.08x2 ]
-U
4.00
Processo iterativo:
Os valores iniciais foram dados
(0) (0) (0)
x1 = x2 = x3 = 0, (k = 0)
Daí,
CA
(1) 1 (0) (0) 8.00 − 0.24(0) + 0.08(0)
x1 = [8.00 − 0.24x2 + 0.08x3 ] = = 2.00
4.00 4.00
1 9.00 − 0.09(0) + 0.15(0)
k = 0 x2(1) = (0) (0)
[9.00 − 0.09x1 + 0.15x3 ] = = 3.00
-D
3.00 3.00
x(1) = 1 [20.00 − 0.04x(0) + 0.08x(0) ] = 20.00 − 0.04(0) + 0.08(0) = 5.00
3 1 2
4.00 4.00
Observe que, nessa iteração, foram gerados três novos valores como aproxi-
mações para a solução do sistema linear
P
1 9.00 − 0.09(2.00) + 0.15(5)
k = 1 x2(2) = (1) (1)
[9.00 − 0.09x1 + 0.15x3 ] = = 3.19
3.00 3.00
x(2) = 1 [20.00 − 0.04x(1) + 0.08x(1) ] = 20.00 − 0.04(2.00) + 0.08(3.00) = 5.04
3 1 2
4.00 4.00
versão 0.2- documento gerado em 26/01/2021. comentários/sugestões: pmotta@dca.ufrn.br
21
Novamente, foram gerados três novos valores como aproximações para a solu-
ção do sistema linear
N
(1) (1) (1)
x1 = 1.92, x2 = 3.19, x3 = 5.04
FR
obtidos são apresentados na tabela
(k) (k) (k)
k x1 x2 x3
0 0.00 0.00 0.00
-U
1 2.00 3.00 5.00
2 1.9200 3.1900 5.0400
3 1.9094 3.1944 5.0446
8.0
9.0
20.0
julia> x = IterativeSolvers.jacobi(A, b)
PS
3-element Array{Float64,1}:
1.9091982811005435
3.194964416842787
5.044807305525545
N
(0) (0) (0) (0) APROXIMAÇÕES
x1 x2 x3 xn
··· INICIAIS
FR
n CÁLCULO DE
bi − ∑ ai,j x(k)
(k+1)
î ó
1
xi =
-U
ai,i j NOVOS
j =1
j 6 =i VALORES
ai,i 6= 0
N
CA
CONVERGE ?
S
-D
Método de Gauss-Seidel
O método de Gauss-Seidel é uma modificação do método de Jacobi como
N
objetivo de acelerar o processo de convergência. Neste método, o valor recém-
calculado para cada variável já é utilizado no cálculo do valor da próxima
variável.
FR
A equação utilizada para realizar as iterações é :
i −1 n
1 î
bi − ∑ ai,j x j − ∑ ai,j x(k)
(k +1) (k +1)
ó
xi = j
ai,i
-U
j =1 j = i +1
i −1
∑ ai,j x j
(k +1)
j =1
CA
indica que os valores na iteração atual, iteração (k + 1), é utilizado imediata-
mente. A expressão
n
∑
(k)
ai,j x j
-D
j = i +1
sistema linear
M
N
x1 = [8.00 − 0.24x2 + 0.08x3 ]
4.00
(k +1) 1 (k) (k)
x2 = [9.00 − 0.09x1 + 0.15x3 ]
3.00
FR
(k +1) 1 (k) (k)
x3 = [20.00 − 0.04x1 + 0.08x2 ]
4.00
Processo iterativo
Os valores iniciais foram dados
-U
(0) (0) (0)
x1 = x2 = x3 = 0, (k = 0)
Daí,
(1) 1 (0) (0) 8.00 − 0.24(0) + 0.08(0)
x1 = [8.00 − 0.24x2 + 0.08x3 ] = = 2.00
4.00 4.00
CA
1 9.00 − 0.09(2.00) + 0.15(0)
k = 0 x2(1) = (0) (0)
[9.00 − 0.09x1 + 0.15x3 ] = = 3.1942
3.00 3.00
20.00 − 0.04(2.0) + 0.08(3.1942)
1
x3(1) = (0) (0)
[20.00 − 0.04x1 + 0.08x2 ] = = 5.0446
4.00 4.00
Observe que, nessa iteração, os valores que foram gerados foram imediata-
-D
Novamente, foram gerados três novos valores como aproximações para a solu-
ção do sistema linear
(1) (1) (1)
x1 = 1.9243, x2 = 3.1942, x3 = 5.0446
N
(k) (k) (k)
k x1 x2 x3
FR
0 0.00 0.00 0.00
1 2.00 3.1942 5.0446
2 1.9243 3.1942 5.0446
3 1.9092 3.1949 5.0448
-U
julia> using IterativeSolvers
julia> A = [4.00 0.24 -0.08; 0.09 3.00 -0.15; 0.04 -0.08 4.00]
3×3 Array{Float64,2}:
4.0 0.24 -0.08
0.09 3.0 -0.15 CA
0.04 -0.08 4.0
julia> b = [8.00; 9.00; 20.00]
3-element Array{Float64,1}:
8.0
9.0
20.0
-D
julia> x = IterativeSolvers.gauss_seidel(A, b)
3-element Array{Float64,1}:
1.9091982810999195
3.194964416843296
5.044807305525866
P
M
PS
N
FR
(0) (0) (0) (0) APROXIMAÇÕES
x1 x2 x3 xn
··· INICIAIS
-U
i −1 n CÁLCULO DE
bi − ∑ ai,j x(k ∑
(k +1) +1)
î
ai,j x(k)
ó
1
xi = ai,i j − CA j NOVOS
j =1 j = i +1
ai,i 6= 0 VALORES
N
-D
CONVERGE ?
S
P