| | | |

Matemática numérica I

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

3.4 Método do gradiente

Começamos observando que se A é uma matriz n×n positiva definida111111A é simétrica e 𝒙T⁢A⁢𝒙>0 para todo 𝒙≠0., temos que 𝒙∈ℝn é solução de

A⁢𝒙=𝒃 (3.293)

se, e somente se, 𝒙 é solução do seguinte problema de minimização

min𝒚∈ℝn⁡{f⁢(𝒚):=12⁢𝒚T⁢A⁢𝒚−𝒚T⁢𝒃}. (3.294)

De fato, sejam 𝒙 a solução de (3.293) e 𝒚 a solução de (3.294), então

f⁢(𝒚):=12⁢𝒚T⁢A⁢𝒚−𝒚T⁢𝒃 (3.295)
=12𝒚TA𝒚−𝒚T𝒃+12𝒙TA𝒙−+12𝒙TA𝒙 (3.296)
=12(𝒙−𝒚)TA(𝒙−𝒚)−12𝒙TA𝒙 (3.297)

O segundo termo é independente de 𝒚 e, como A é positiva definida, temos

12⁢(𝒙−𝒚)T⁢A⁢(𝒙−𝒚)≥0. (3.298)

Logo, o mínimo de f ocorre quando 𝒙−𝒚=𝟎, i.e. 𝒚=𝒙.

A iteração do Método do Gradiente tem a forma

𝒙(0)=aprox. inicial, (3.299)
𝒙(k+1)=𝒙(k)+αk⁢𝒅(k), (3.300)

para k=0,1,2,…, onde αk>0 é o tamanho do passo e 𝒅(k) é o vetor direção de busca.

Para escolhermos a direção 𝒅(k), tomamos a fórmula de Taylor de f em torno da aproximação 𝒙(k)

f⁢(𝒙(k+1))=f⁢(𝒙(k))+α(k)⁢∇f⁢(𝒙(k))⋅𝒅(k)+ϵ, (3.301)

onde ∇f denota o gradiente de f, i.e.

∇f⁢(𝒙) :=(∂f∂x1⁢(𝒙),∂f∂x2⁢(𝒙),…,∂f∂xn⁢(𝒙)) (3.302)
∇f⁢(𝒙) =A⁢𝒙(k)−𝒃. (3.303)

De , segue que se

∇f⁢(𝒙(k))⋅𝒅(k)<0, (3.304)

então f⁢(𝒙(k+1))<f⁢(𝒙(k)), para α(k) suficientemente pequeno. Em particular, podemos escolher

𝒅(k)=−∇f⁢(𝒙(k)), (3.305)

se ∇f⁢(𝒙(k))≠0.

Refer to caption
Figura 3.1: Iterações do Método do Gradiente para sistemas lineares. Linha: ‖b−A⁢x‖. Pontos: 𝒙(k).

Do exposto acima, temos a iteração do Método do Gradiente

𝒙(0)=aprox. inicial (3.306)
𝒙(k+1)=𝒙(k)+α(k)⁢𝒓(k) (3.307)

com k=0,1,2,…, onde 𝒓(k) é o resíduo

𝒓(k)=𝒃−A⁢𝒙(k). (3.308)
Exemplo 3.4.1.

Consideramos o sistema A⁢x=b com

A=[2−100−12−100−12−100−12], (3.309)
b=[−322−3]. (3.310)

Na Tabela 3.3 temos os resultados do emprego do método do gradiente com 𝒙(1)=(0,0,0,0) e com passo constante α(k)≡0.5.

Tabela 3.3: Resultados referentes ao Exemplo 3.4.1.
k 𝒙(k) ‖A⁢𝒙(k)−𝒃‖
0 (0.0,0.0,0.0,0.0) 5.1⁢e+0
1 (−1.5,1.0,1.0,−1.5) 1.6⁢e+0
2 (−1.0,0.8,0.8,−1.0) 5.0⁢e−1
3 (−1.1,0.9,0.9,−1.1) 1.8⁢e−1
4 (−1.1,0.9,0.9,−1.1) 8.8⁢e−2
5 (−1.1,0.9,0.9,−1.1) 6.2⁢e−2
6 (−1.0,0.9,0.9,−1.0) 4.9⁢e−2
7 (−1.0,0.9,0.9,−1.0) 4.0⁢e−2
8 (−1.0,0.9,0.9,−1.0) 3.2⁢e−2
9 (−1.0,1.0,1.0,−1.0) 2.6⁢e−2
10 (−1.0,1.0,1.0,−1.0) 2.1⁢e−2
Código 10: mg.py
1import numpy as np
2import numpy.linalg as npla
3
4def mg(A, b, x0, alpha=1e-2,
5 maxiter=100, atol=1.49e-8, rtol=1.49e-8):
6
7 n = b.size
8 x = x0.copy()
9 res = b - A@x
10 nres = npla.norm(res)
11 print(f'0: {x}, nres = {nres:.1e}')
12 info = -1
13 for k in range(maxiter):
14 x = x + alpha*res
15
16 res = b - A@x
17 nres = npla.norm(res)
18
19 print(f'{k+1}: {x}, nres = {nres:.1e}')
20
21 if (nres <= max(atol, rtol*npla.norm(b))):
22 info = 0
23 break
24
25 return x, info
26
27# matriz coefs
28A = np.array([[2., -1., 0., 0.],
29 [-1., 2., -1., 0.],
30 [0., -1., 2., -1.],
31 [0., 0., -1., 2.]])
32# vetor constante
33b = np.array([-3., 2., 2., -3.])
34
35# aprox. inicial
36x0 = np.zeros_like(b)
37
38x, info = mg(A, b, x0, alpha=0.5)

3.4.1 Escolha do passo

Para a escolha do passo, podemos usar o Método da Pesquisa Linear. A ideia é escolher o passo α(k) tal que

f⁢(𝒙(k)+α(k)⁢𝒓(k))=minα>0⁡f⁢(𝒙(k)+α⁢𝒓(k)). (3.311)

Observando que f⁢(𝒙(k)+α⁢𝒓(k)) é função apenas de α, temos que seu mínimo ocorre em seu ponto crítico, i.e.

dd⁢α⁢f⁢(𝒙(k)+α⁢𝒓(k))=0 (3.312)
∇f⁢(𝒙(k+1))⋅dd⁢α⁢(𝒙(k)+α⁢𝒓(k))=0 (3.313)
∇f⁢(𝒙(k+1))⋅𝒓(k)=0 (3.314)
[A⁢(𝒙(k)+α(k)⁢𝒓(k))−b]⋅𝒓(k)=0 (3.315)
(A⁢𝒙(k)−𝒃)⋅𝒓(k)+α(k)⁢𝒓(k)⋅A⁢𝒓(k)=0, (3.316)

donde

α(k)=𝒓(k)⋅𝒓(k)𝒓(k)⋅A⁢𝒓(k). (3.317)
Exemplo 3.4.2.

Consideramos o sistema A⁢x=b com

A=[2−100−12−100−12−100−12], (3.318)
b=[−322−3]. (3.319)

Na Tabela 3.4 temos os resultados do emprego do método do gradiente com 𝒙(1)=(0,0,0,0) e com passo escolhido conforme (3.317).

Tabela 3.4: Resultados referentes ao Exemplo LABEL:cap_sislin_sec_metg:ex:metg_alpha.
k 𝒙(k) α(k) ‖A⁢𝒙(k)−𝒃‖
0 (0.0,0.0,0.0,0.0) 3.8⁢e−1 5.1⁢e+0
1 (−1.1,0.8,0.8,−1.1) 2.6⁢e+0 1.5⁢e−1
2 (−1.0,1.0,1.0,−1.0) 3.8⁢e−1 3.0⁢e−2
3 (−1.0,1.0,1.0,−1.0) 2.6⁢e+0 8.8⁢e−4
4 (−1.0,1.0,1.0,−1.0) 3.8⁢e+0 1.8⁢e−4
5 (−1.0,1.0,1.0,−1.0) 2.6⁢e+0 5.2⁢e−6
1import numpy as np
2import numpy.linalg as npla
3
4def mg_pl(A, b, x0,
5 maxiter=100, atol=1.49e-8, rtol=1.49e-8):
6
7 n = b.size
8 x = x0.copy()
9 res = b - A@x
10 alpha = np.dot(res, res)/np.dot(res, A@res)
11 nres = npla.norm(res)
12 print(f'0: {x}, alpha = {alpha}, nres = {nres:.1e}')
13 info = -1
14 for k in range(maxiter):
15 x = x + alpha*res
16
17 res = b - A@x
18 alpha = np.dot(res, res)/np.dot(res, A@res)
19 nres = npla.norm(res)
20
21 print(f'{k+1}: {x}, alpha = {alpha}, nres = {nres:.1e}')
22
23 if (nres <= max(atol, rtol*npla.norm(b))):
24 info = 0
25 break
26
27 return x, info
28
29# matriz coefs
30A = np.array([[2., -1., 0., 0.],
31 [-1., 2., -1., 0.],
32 [0., -1., 2., -1.],
33 [0., 0., -1., 2.]])
34# vetor constante
35b = np.array([-3., 2., 2., -3.])
36
37# aprox. inicial
38x0 = np.zeros_like(b)
39
40x, info = mg_pl(A, b, x0)

3.4.2 Exercícios

E. 3.4.1.

Considere o sistema linear A⁢𝒙=𝒃 com

A=[2−100−12−100−12−100−12], (3.320)
b=[5−76−1]. (3.321)

Por tentativa e erro, encontre um valor para α tal que o Método do Gradiente converge para solução do sistema em menos de 80 iterações. Use

𝒙(0)=𝟎 (3.322)

como aproximação inicial e assuma o critério de parada

‖𝒓‖≤max⁡{tol,tol⁢‖𝒃‖}, (3.323)

onde 𝒓 é o resíduo do sistema e tol=1.49⁢e−8.


a⁢l⁢p⁢h⁢a=4.9⁢e−1, 𝒙=(2.0,−1.0,3.0,1.0)

E. 3.4.2.

Considere o sistema linear A⁢𝒙=𝒃 com

A=[2−110−12−101−13−100−12], (3.324)
b=[−89−105]. (3.325)

Por tentativa e erro, encontre um valor para α tal que o Método do Gradiente converge para solução do sistema em menos de 50 iterações. Use

𝒙(0)=𝟎 (3.326)

como aproximação inicial e assuma o critério de parada

‖𝒓‖≤max⁡{tol,tol⁢‖𝒃‖}, (3.327)

onde 𝒓 é o resíduo do sistema e tol=1.49⁢e−8.


a⁢l⁢p⁢h⁢a=3.6⁢e−1, 𝒙=(−2.0,3.0,−1.0,2.0)

E. 3.4.3.

Considere o sistema linear dado no E.3.4.1. Utilizando a mesma aproximação inicial e tolerância, aplique o Método do Gradiente com Pesquisa Linear. Quantas iterações são necessárias até a convergência e qual o valor médio de α(k) utilizado durante as iterações?


75, α¯=5.0⁢e−1

E. 3.4.4.

Considere o sistema linear dado no E.3.4.2. Utilizando a mesma aproximação inicial e tolerância, aplique o Método do Gradiente com Pesquisa Linear. Quantas iterações são necessárias até a convergência e qual o valor médio de α(k) utilizado durante as iterações?


35, α¯=3.7⁢e−1

E. 3.4.5.

Considere o problema de Laplace

− ux⁢x=2,0<x<1, (3.328)
u⁢(0)=u⁢(1)=0. (3.329)

A discretização pelo Método das Diferenças Finitas em uma malha uniforme xi=i⁢h, i=0.1,…,n, h=1/(n−1), leva ao seguinte sistema linear

u1=0 (3.330)
−1h2⁢ui−1+2h2⁢ui−1h2⁢ui+1=2, (3.331)
un=0 (3.332)

onde ui≈u⁢(xi). Com u(0)=𝟎, aplique o Método do Gradiente com Pesquisa Linear para computar a solução deste sistema quando n=10,20,40,80. Quantas iterações são necessárias para obter-se a convergência do método com critério de convergência

‖𝒓‖≤tol, (3.333)

onde, 𝒓:=𝒃−A⁢𝒙 é o resíduo e tol=1⁢e−4.


n k
10 214
20 918
40 3840
80 15910

Análise numérica

E. 3.4.6.

Sendo f dada em (3.294), mostre que

∇f⁢(𝒙)=−𝒓, (3.334)

com, 𝒓:=b−A⁢𝒙 o resíduo do sistema A⁢𝒙=𝒃.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |