| | | |

Matemática numérica III

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

1.6 Método GMRES

O GMRES (do inglês, Generalized Minimal Residual Method252525Desenvolvido por Yousef Saad e H. Schultz, 1986. Fonte: Wikipedia.) é um método de subespaço de Krylov262626Alexei Nikolajewitsch Krylov, 1863 - 1945, engenheiro e matemático russo. Fonte: Wikipédia: Alexei Krylov. e é considerado uma das mais eficientes técnicas para a resolução de sistemas lineares gerais e de grande porte (esparsos).

Métodos de subespaço de Krylov

A ideia básica é resolver o sistema linear

A⁢x=b (1.190)

por um método de projeção (lembremos da Seção 1.5). Isto é, buscamos uma solução aproximada 𝒙(m)∈ℝn no subespaço afim 𝒙(0)+𝒦m de dimensão m≤n, impondo-se a condição de Petrov272727Georgi Iwanowitsch Petrov, 1912 - 1987, engenheiro soviético. Fonte: Wikipedia: Georgi Iwanowitsch Petrov.-Galerkin282828Boris Galerkin, 1871 - 1945, engenheiro e matemático soviético. Fonte: Wikipédia: Boris Galerkin.

b−A⁢xm⟂ℒm, (1.191)

onde ℒm também é um subespaço de dimensão m. Quando 𝒦m é um subespaço de Krylov, i.e.

𝒦m⁢(A,𝒓(0))=span⁡{𝒓(0),A⁢𝒓(0),A2⁢𝒓(0),…,Am−1⁢𝒓(0)}, (1.192)

temos um método de subespaço de Krylov, onde 𝒓(0) é o resíduo inicial, i.e.

𝒓(0)=b−A⁢𝒙(0), (1.193)

sendo 𝒙(0) uma aproximação inicial para a solução do sistema. Notamos que com isso, temos que a aproximação calculada é tal que

A−1⁢𝒃≈𝒙(m)=𝒙(0)+qm−1⁢(A)⁢𝒓(0), (1.194)

onde qm−1 é um dado polinômio de grau m−1. No caso particular de 𝒙(0)=𝟎, temos

A−1⁢𝒃≈qm−1⁢(A)⁢b. (1.195)

Diferentes versões deste método são obtidas pelas escolhas do subespaço ℒm e formas de precondicionamento do sistema.

1.6.1 O GMRES básico

O GMRES é o método de subespaço de Krylov em que se assume ℒm=A⁢𝒦m e

𝒦m=𝒦m⁢(A,𝒗(0))=span⁡{𝒗(0),A⁢𝒗(0),…,Am−1⁢𝒗(0)}, (1.196)

onde 𝒗(0)=𝒓(0)/‖𝒓(0)‖ é o vetor normalizado do resíduo inicial 𝒓(0)=b−A⁢𝒙(0) para uma dada aproximação inicial 𝒙(0) da solução do sistema A⁢x=b.

Vamos derivar o método observando que qualquer vetor x em 𝒙(0)+𝒦m pode ser escrito como segue

𝒙=𝒙(0)+Vm⁢𝒚 (1.197)

onde, Vm=[𝒗(0),…,𝒗(m−1)] é a matriz n×m cujas colunas formam uma base ortonormal {𝒗(0),…,𝒗(m−1)} de 𝒦m e 𝒚∈Rm. Para computar esta base, podemos usar o método de Gram292929Jørgen Pedersen Gram, 1850 - 1916, matemático dinamarquês. Fonte: Wikipédia: Jørgen Pedersen Gram.-Schmidt303030Erhard Schmidt, 1876 - 1959, matemático alemão. Fonte: Wikipédia: Erhard Schmidt. Arnoldi313131Walter Edwin Arnoldi, 1917 - 1995, engenheiro americano estadunidense. Fonte: Wikipédia: Walter Edwin Arnoldi.-modificado [11, Subseção 6.3]:

  1. 1.

    Dado v1 de norma 1

  2. 2.

    Para j=1,…,m:

    1. (a)

      wj←A⁢vj

    2. (b)

      Para i=1,…,j:

      1. i.

        hi,j←(wj,vi)

      2. ii.

        wj←wj−hi,j⁢vi

    3. (c)

      hj+1,j←‖wj‖2

    4. (d)

      Se hj+1,j=0, então pare.

    5. (e)

      vj+1←wj/hj+1,j

Seja, então, H¯m=[hi,j]i,j=1m+1,m a matriz de Hessenberg323232Karl Adolf Hessenberg, 1904 - 1959, engenheiro e matemático alemão. Fonte: Wikipédia: Karl Hessenberg. cujas entradas não nulas são computadas pelo algoritmo acima (Passos 2(a)i-ii). Definimos

J⁢(𝒚)=‖𝒃−A⁢𝒙‖2, (1.198)
=∥𝒃−A(𝒙(0)+Vm𝒚)∥2, (1.199)
=∥𝒓(0)−AVm𝒚∥2, (1.200)
=∥β𝒗(0)−Vm+1H¯m𝒚∥2, (1.201)
=∥Vm+1(β𝒆(0)−H¯m𝒚)∥, (1.202)

onde 𝒆(0) é o vetor canônico (1,0,…⁢,0)T∈ℝm+1 e β=‖𝒓(0)‖2. Uma vez que Vm+1 é uma matriz ortonormal, temos

J⁢(𝒚)=‖β⁢𝒆(0)−H¯m⁢𝒚‖2. (1.203)

A aproximação GMRES é então obtida como

𝒙(m)=𝒙(0)+Vm⁢𝒚(m), (1.204)

onde

𝒚(m)=arg⁡min𝒚∈ℝm⁡‖β⁢𝒆(0)−H¯m⁢𝒚‖2. (1.205)

Observamos que este último é um pequeno problema de minimização, sendo que requer a solução de um sistema (m+1)×m de mínimos quadrados, sendo m normalmente pequeno.

Código 10: gmres_basic.py
1import numpy as np
2from numpy.linalg import norm, lstsq
3
4def gmres_basic(A, b, x0, m=50, rtol=1e-5, atol=0.0):
5 m = min(m, b.size)
6 n = b.size
7 x0 = x0.copy()
8 norm_b = norm(b)
9 r = b - A @ x0
10 beta = norm(r)
11 if beta <= max(rtol*norm_b, atol):
12 return x0, 1, 0
13
14 V = np.zeros((n, m+1))
15 H = np.zeros((m+1, m))
16 V[:, 0] = r / beta
17 info = 0
18
19 for j in range(m):
20 w = A @ V[:, j]
21 for i in range(j+1):
22 H[i, j] = np.dot(w, V[:, i])
23 w = w - H[i, j] * V[:, i]
24
25 H[j+1, j] = norm(w)
26 if H[j+1, j] != 0 and j + 1 < m:
27 V[:, j+1] = w / H[j+1, j]
28
29 e1 = np.zeros(j+2)
30 e1[0] = beta
31 y, _, _, _ = lstsq(H[:j+2, :j+1], e1, rcond=None)
32 x = x0 + V[:, :j+1] @ y
33
34 if norm(b - A @ x) <= max(rtol*norm_b, atol):
35 info = 1
36 return x, info, j+1
37 if H[j+1, j] == 0:
38 break
39
40 return x, info, j+1
Exemplo 1.6.1.(Problema de difusão-advecção 2D)

Consideremos o seguinte problema de difusão-advecção 2D

−ϵ⁢Δ⁢u+𝒂⋅∇u=f,em ⁢Ω=(0,1)×(0,1), (1.206)
u=0,em ⁢∂Ω, (1.207)

onde ϵ=1 é o coeficiente de difusão, 𝒂=(20,1) é o campo de advecção e a fonte é dada por

f⁢(x)={100,se ⁢0.4≤x,y≤0.6,0,caso contrário. (1.208)

Consulte o Exemplo 1.5.1 para mais detalhes.

Assumimos uma malha espacial uniforme de n×n, com tamanho de malha h=1/(n−1). Denotamos ui,j≈u⁢(xi,yj), onde xi=i⁢h e yj=j⁢h, para i,j=1,2,…,n. Aplicando um esquema upwind para a advecção e diferenças finitas centrais para a difusão, obtemos o seguinte esquema de diferenças finitas

−ϵ⁢(ui+1,j−2⁢ui,j+ui−1,jh2+ui,j+1−2⁢ui,j+ui,j−1h2) (1.209)
+a1⁢ui,j−ui−1,jh+a2⁢ui,j+1−ui,jh=fi,j, (1.210)

para i,j=2,3,…,n−1, onde fi,j=f⁢(xi,yj). As condições de contorno são dadas por u1,j=un⁢,1=ui⁢,1=ui,n=0, para i,j=1,2,…,n−1. Por fim, consideramos a enumeração dos nodos da malha k=i−1+(j−2)⁢(n−2) para obtermos o sistema linear

A⁢𝒖=𝒇, (1.211)

onde A é uma matriz esparsa de ordem N=(n−2)2, 𝒖∈ℝN é o vetor das incógnitas e 𝒇∈ℝN é o vetor da fonte.

Observando que A é apenas positiva definida (i.e. A+AT é simétrica positiva definida), aplicamos a iteração do mínimo resíduo para resolver o sistema linear. A seguinte tabela mostra o número de iterações necessárias para a convergência do método, para diferentes tamanhos de malha. O critério de parada é dado por rtol=10−5 e atol=0 e número máximo de iterações m=50. Verifique!

n GMRES 𝒓
11 24 8.43×10−6
21 46 9.52×10−6
41 50 1.41×10−3
Observação 1.6.1.(Convergência)

Pode-se mostrar que o GMRES converge em no máximo n passos, desconsiderando os erros de arredondamento.

Observação 1.6.2.(GMRES com a ortogonalização de Householder)

No algoritmo acima, o método Arnoldi-modificado de Gram-Schmidt é utilizado. Uma versão numericamente mais eficiente é obtida quando a transformação de Householder333333Alston Scott Householder, 1904 - 1993, matemático americano estadunidense. Fonte: Wikipédia: Alston Scott Householder. é utilizada. Consulte mais em [11, Subseção 6.5.2].

Observação 1.6.3.(GMRES com Reinicialização)

O GMRES com reinicialização é uma variação do método para sistemas que requerem uma aproximação GMRES xm com m grande. Nestes casos, o método original pode demandar um custo muito alto de memória computacional. A alternativa consiste em assumir m pequeno e, caso não suficiente, recalcular a aproximação GMRES com x0=xm. Este algoritmo pode ser descrito como segue.

Exercícios

E. 1.6.1.

Aplique o método GMRES para resolver o sistema linear A⁢𝒙=𝒃, com

A=[2113] (1.212)

e 𝒃=(3,4). Usando uma aproximação inicial 𝒙(0)=(0.5,0), faça uma análise geométrica das iterações.


Dica: faça um gráfico de contorno da norma ‖𝒓⁢(𝒙)‖2=‖𝒃−A⁢𝒙‖2 e mostre as iterações do método sobre o gráfico.

E. 1.6.2.

Aplique o método GMRES para resolver o sistema linear A⁢𝒙=𝒃, com

A=[2103] (1.213)

e 𝒃=(3,3). Usando uma aproximação inicial 𝒙(0)=(0,0.5), faça uma análise geométrica das iterações do método.


Dica: faça um gráfico de contorno da norma ‖𝒓⁢(𝒙)‖2=‖𝒃−A⁢𝒙‖2 e mostre as iterações do método sobre o gráfico.

E. 1.6.3.

Aplique o método GMRES para resolver o sistema linear A⁢𝒙=𝒃, com

A=[212.12] (1.214)

e 𝒃=(3,4.1). Usando uma aproximação inicial 𝒙(0)=(0.5,0), faça uma análise geométrica das iterações do método.


Dica: faça um gráfico de contorno da norma ‖𝒓⁢(𝒙)‖2=‖𝒃−A⁢𝒙‖2 e mostre as iterações do método sobre o gráfico.

E. 1.6.4.

Seguindo o Código 10, implemente o método GMRES com reinicialização. Teste o método para o sistema linear do Exemplo 1.6.1, rtol=10−5, atol=0 e número máximo de iterações m=20. Compare os resultados com o GMRES básico para diferentes tamanhos de malha.

E. 1.6.5.

Considere o problema de difusão-advecção 2D do Exemplo 1.6.1, discretizado com o esquema upwind. Aplique a iteração da descida mais íngrime do resíduo para resolver o sistema linear resultante para os seguintes coeficientes de advecção:

  1. a)

    𝒂=(−1,1);

  2. b)

    𝒂=(1,−1);

  3. c)

    𝒂=(−1,−1).

Analise a convergência do método para diferentes tamanhos de malha.


Dica: lembre-se que o esquema upwind deve ser adaptado para cada caso.


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
| | | |