| | | | |

3.4 Método do Gradiente

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

Começamos observando que se A é uma matriz n×n positiva definida4040endnote: 40A é simétrica e 𝒙TA𝒙>0 para todo 𝒙0., temos que 𝒙n é solução de

A𝒙=𝒃 (3.440)

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

min𝒚n{f(𝒚):=12𝒚TA𝒚𝒚T𝒃}. (3.441)

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

f(𝒚) :=12𝒚TA𝒚𝒚T𝒃 (3.442)
=12𝒚TA𝒚𝒚T𝒃+12𝒙TA𝒙+12𝒙TA𝒙 (3.443)
=12(𝒙𝒚)TA(𝒙𝒚)12𝒙TA𝒙 (3.444)

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

12(𝒙𝒚)TA(𝒙𝒚)0. (3.445)

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.446)
𝒙(k+1) =𝒙(k)+αk𝒅(k),

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.447)

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

f(𝒙) :=(fx1(𝒙),fx2(𝒙),,fxn(𝒙)) (3.448)
f(𝒙) =A𝒙(k)𝒃. (3.449)

De , segue que se

f(𝒙(k))𝒅(k)<0, (3.450)

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

𝒅(k)=f(𝒙(k)), (3.451)

se f(𝒙(k))0.

Refer to caption
Figura 3.1: Iterações do Método do Gradiente para sistemas lineares. Linha: bAx. Pontos: 𝒙(k).

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

𝒙(0) =aprox. inicial (3.452)
𝒙(k+1) =𝒙(k)+α(k)𝒓(k)

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

𝒓(k)=𝒃A𝒙(k). (3.453)
Exemplo 3.4.1.

Consideramos o sistema Ax=b com

A =[2100121001210012], (3.458)
b =[3223]. (3.463)

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.1e+0
1 (1.5,1.0,1.0,1.5) 1.6e+0
2 (1.0,0.8,0.8,1.0) 5.0e1
3 (1.1,0.9,0.9,1.1) 1.8e1
4 (1.1,0.9,0.9,1.1) 8.8e2
5 (1.1,0.9,0.9,1.1) 6.2e2
6 (1.0,0.9,0.9,1.0) 4.9e2
7 (1.0,0.9,0.9,1.0) 4.0e2
8 (1.0,0.9,0.9,1.0) 3.2e2
9 (1.0,1.0,1.0,1.0) 2.6e2
10 (1.0,1.0,1.0,1.0) 2.1e2
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α>0f(𝒙(k)+α𝒓(k)). (3.464)

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.465)
f(𝒙(k+1))ddα(𝒙(k)+α𝒓(k))=0 (3.466)
f(𝒙(k+1))𝒓(k)=0, (3.467)
[A(𝒙(k)+α(k)𝒓(k))b]𝒓(k)=0, (3.468)
(A𝒙(k)𝒃)𝒓(k)+α(k)𝒓(k)A𝒓(k)=0, (3.469)

donde

α(k)=𝒓(k)𝒓(k)𝒓(k)A𝒓(k). (3.470)
Exemplo 3.4.2.

Consideramos o sistema Ax=b com

A =[2100121001210012], (3.475)
b =[3223]. (3.480)

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.470).

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.8e1 5.1e+0
1 (1.1,0.8,0.8,1.1) 2.6e+0 1.5e1
2 (1.0,1.0,1.0,1.0) 3.8e1 3.0e2
3 (1.0,1.0,1.0,1.0) 2.6e+0 8.8e4
4 (1.0,1.0,1.0,1.0) 3.8e+0 1.8e4
5 (1.0,1.0,1.0,1.0) 2.6e+0 5.2e6
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 =[2100121001210012], (3.485)
b =[5761]. (3.490)

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.491)

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

𝒓max{𝚝𝚘𝚕,𝚝𝚘𝚕𝒃}, (3.492)

onde 𝒓 é o resíduo do sistema e 𝚝𝚘𝚕=1.49e8.

Resposta.

alpha=4.9e1, 𝒙=(2.0,1.0,3.0,1.0)

E. 3.4.2.

Considere o sistema linear A𝒙=𝒃 com

A =[2110121011310012], (3.497)
b =[89105]. (3.502)

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.503)

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

𝒓max{𝚝𝚘𝚕,𝚝𝚘𝚕𝒃}, (3.504)

onde 𝒓 é o resíduo do sistema e 𝚝𝚘𝚕=1.49e8.

Resposta.

alpha=3.6e1, 𝒙=(2.0,3.0,1.0,2.0)

E. 3.4.3.

Considere o sistema linear dado no Exercício 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?

Resposta.

75, α¯=5.0e1

E. 3.4.4.

Considere o sistema linear dado no Exercício 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?

Resposta.

35, α¯=3.7e1

E. 3.4.5.

Considere o problema de Laplace

uxx=2,0<x<1, (3.505)
u(0)=u(1)=0. (3.506)

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

u1=0 (3.507)
1h2ui1+2h2ui1h2ui+1=2, (3.508)
un=0 (3.509)

onde uiu(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

𝒓𝚝𝚘𝚕, (3.510)

onde, 𝒓:=𝒃A𝒙 é o resíduo e 𝚝𝚘𝚕=1e4.

Resposta.
n k
10 214
20 918
40 3840
80 15910

Análise Numérica

E. 3.4.6.

Sendo f dada em (3.441), mostre que

f(𝒙)=𝒓, (3.511)

com, 𝒓:=bA𝒙 o resíduo do sistema A𝒙=𝒃.


Envie seu comentário

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. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!