Ir para o conteúdo

Método do gradiente conjugado

Origem: Wikipédia, a enciclopédia livre.
Uma comparação da convergência do método de descida do gradiente com tamanho de passo ótimo (em verde) e o método do gradiente conjugado (em vermelho) para a minimização da forma quadrática com um sistema linear dado. O gradiente conjugado, assumindo aritmética exata, converge em no máximo n passos onde n é o tamanho da matriz do sistema (no exemplo, n=2).

Em matemática, o método do gradiente conjugado é um algoritmo para a solução numérica de sistemas de equações lineares, cuja matriz é simétrica e positiva definida. O método do gradiente conjugado é um método iterativo, então ele pode ser aplicado a sistemas esparsos que são grandes demais para ser tratados por métodos diretos como a decomposição de Cholesky. Tais sistemas surgem frequentemente quando se resolve numericamente equações diferenciais parciais.

O método do gradiente conjugado também pode ser utilizado para resolver problemas de otimização irrestritos como minimização de energia. É comumente atribuído aos matemáticos Magnus Hestenes e Eduard Stiefel,[1][2] que o programaram no computador Z4[3] e o estudaram extensivamente[4][5].

O método do gradiente biconjugado fornece uma generalização a matrizes não simétricas. Diversos métodos do gradiente conjugado não lineares procuram o mínimo de problemas de otimização não lineares.

Descrição do problema

[editar | editar código]

Considera-se resolver o sistema de equações lineares

para o vetor , onde é uma matriz real simétrica (i.e., ) positiva definida (i.e., para todo ) e . Denota-se a solução única desse sistema por .

Derivação do método do gradiente conjugado

[editar | editar código]

O método do gradiente conjugado (CG) pode ser derivado sob diversas perspectivas. A abordagem a seguir busca minimizar uma função quadrática envolvendo a matriz e o vetor .

O método da descida rápida

[editar | editar código]
Descida do gradiente em 2D

O método CG pode ser obtido a partir do método da descida rápida para resolver um sistema positivo definido acrescido de modificações que melhoram a taxa de convergência. Para resolver o sistema linear , onde é matriz positiva definida, encontra-se o mínimo de uma função quadrática cujo mínimo coincide com a solução do sistema. Considere a função

onde e . Para minimizar encontra-se o vetor tal que todas as derivadas parciais sejam nulas. O gradiente de é o vetor , então é ponto de mínimo somente se . Algumas manipulações algébricas mostram que[6]

 

 

 

 

(1)

Como é simétrica,

 

 

 

 

(2)

e o mínimo de ocorre quando . Logo, o problema de otimização de encontrar o valor mínimo de uma função é equivalente a resolver . Como é positiva definida, é não singular, e . Portanto,

 

 

 

 

(3)

Gráfico de um paraboloide elíptico
Gráfico do campo vetorial do gradiente e das linhas de contorno de um paraboloide elíptico

A Equação 1 revela o tipo de superfície gerado pela função . Como é uma matriz real e simétrica, o Teorema Espectral garante que existe uma matriz ortogonal tal que , onde é uma matriz diagonal contendo os autovalores de . Fazendo a mudança de coordenadas , i.e., , e substituindo na Equação 1, obtém-se

notando que e que . Tem-se que , porque é positiva definida. Para , representa um paraboloide elíptico. Em geral, a transformação ortogonal preserva as distâncias e os ângulos entre os vetores, então é um paraboloide no [6]. Isso garante que o ponto crítico onde o gradiente se anula () é o mínimo global da função.

Na descida rápida, o valor mínimo é encontrado iterativamente, tomando um ponto inicial e decaindo em direção a . Como a função quadrática decresce mais rapidamente na direção negativa do gradiente, a Equação 2 mostra que . Seja

o resíduo no ponto . Então o próprio resíduo aponta na direção de maior decrescimento da função partindo de e é chamado de vetor diretor. Se o resíduo é zero, o problema está resolvido, caso contrário, move-se ao longo da reta determinada pelo vetor diretor. Seja , onde é um escalar que determina o tamanho do passo na direção do resíduo . No método da descida rápida, minimiza para cada passo na reta correspondente. Para isso, considere a função

Usando a simetria de e a comutatividade do produto interno, tem-se

O mínimo de ocorre quando , e

Então, o mínimo ocorre quando . Move-se de a e depois usa e para computar , o próximo ponto em direção ao mínimo. Esse desenvolvimento motiva o algoritmo a seguir.

Entradas
matriz simétrica positiva definida, lado direito , aproximação inicial , tolerância tol e número máximo de iterações maxiter.
Saídas
solução aproximada , norma-2 do resíduo relativo e número de iterações
Inicialização
Algoritmo
Enquanto for maior que a tolerância desejada e o número de iterações for menor que o número máximo de iterações, faça:
Se for suficientemente pequeno, então pare o ciclo.
Fim Enquanto
Se o número de iterações for maior que o número máximo de iterações, faça
Retorna , ,

O método da descida rápida converge globalmente. Se e são, respectivamente, o maior e o menor autovalor de uma matriz simétrica , o número de condicionamento da matriz é dado por

Pode ser mostrado que[7]

 

 

 

 

(3)

Definindo a função erro , a Equação 3 pode ser reescrita como

o que indica que o algoritmo da descida rápida converge independentemente do chute inicial , pois . Se é grande, então é próximo de 1 e a convergência é lenta. Isso pode ser visto geometricamente. Para qualquer matriz , as direções de buscas sucessivas são ortogonais. Sabendo que ,

Substituindo pelo valor de , vem

então . Se é o ponto atual na descida ao mínimo, o vetor de direção de busca é ortogonal ao conjunto de nível . A próxima direção de busca é ortogonal à direção de busca anterior e ao conjunto de nível . Para , esse caminho segue um padrão de zigue-zague que pode não ser o mais eficiente até o mínimo. Como os autovalores de uma matriz simétrica são iguais aos seus valores singulares, a forma das elipses que configuram as linhas de contorno da função dependem do número de condicionamento da matriz. Se é pequeno, as elipses são próximas de círculos, e a descida rápida converge rapidamente ao mínimo do paraboloide. Se é grande, essas elipses se tornam mais alongadas e estreitas; o paraboloide tem um cânion perto do mínimo que faz os valores de se moverem de um lado para o outro nas paredes íngremes do cânion, desacelerando a convergência[6].

Exemplo numérico

[editar | editar código]
Comparação das linhas de contorno das formas quadráticas de um sistema bem condicionado A (à esquerda) e um mal condicionado B (à direita).

Aplicando o método da descida rápida às matrizes , e , , com , e tolerância de em ambos os casos, obtém-se a aproximação desejada em 21 iterações para a matriz e em 8462 iterações para a matriz .[6]

Uma analogia para entender a descida rápida

[editar | editar código]
Neblina nas montanhas

A intuição por trás da descida rápida pode ser ilustrada pelo seguinte cenário hipotético. Um grupo de pessoas encontra-se perdido nas montanhas e tenta descer de volta à entrada da trilha (i.e., tenta achar o mínimo global). Há uma densa neblina que torna a visibilidade extremamente baixa, então o caminho até a base da montanha não é visível e elas precisam usar informação local para se guiarem. Elas podem usar o método da descida rápida, que envolve calcular a declividade da ladeira na sua posição atual e prosseguir na direção com a maior declividade. Caso elas quisessem ir ao topo da montanha (i.e., o máximo global), bastava seguir a direção com maior aclive. Usando esse método, elas eventualmente encontrariam o caminho da descida, ou então ficariam presas em algum buraco (i.e., ponto de mínimo local ou ponto de sela), como um lago da montanha. No entanto, suponha que encontrar a direção de maior declive não é imediatamente óbvio por mera observação, mas que requer algum tipo de instrumento sofisticado para calcular que uma das pessoas coincidiu de trazer consigo para a trilha. Calcular a declividade em cada posição toma certo tempo, então elas devem minimizar o uso do instrumento caso elas queiram descer da montanha antes do pôr do sol. A dificuldade é então escolher a frequência com a qual calcular a declividade na posição atual, de modo a não perderem o rumo.

Nessa analogia, as pessoas representam o algoritmo, e o caminho a ser tomado para descer a montanha representa a sequência de configurações que o algoritmo vai explorar. A declividade da ladeira representa a inclinação da função naquele ponto. O instrumento usado para medir a declividade é a diferenciação. A direção que o grupo escolhe para descer a montanha é a direção do gradiente negativo da função naquele ponto. O tempo que elas caminham antes de fazer outra medição é o tamanho do passo.

Da descida rápida ao gradiente conjugado

[editar | editar código]

O método da descida rápida faz uma busca baseada no gradiente conforme , onde os são os vetores do resíduo. Esse algoritmo é um algoritmo guloso; ele resolve o problema de minimização de apenas localmente[8]. Uma vez que as direções de busca são sucessivamente ortogonais, o caminho em zigue-zague pode desfazer o progresso passado e ainda repetir direções na descida ao mínimo da função . Uma alternativa é então escolher direções de busca de forma a não perder a minimização atingida em qualquer direção de busca anterior.

O método do gradiente conjugado computa , onde os vetores diretores são escolhidos tal que as aproximações decrescem muito mais rapidamente ao mínimo de . Isso pode ser feito exigindo que as direções de busca sejam conjugadas em relação a uma matriz , i.e., elas devem ser ortogonais após serem esticadas e distorcidas por . Desse modo, o método utiliza informações dos passos anteriores e evita o padrão de zigue-zague característico da descida rápida.[6]

O gradiente conjugado como um método direto

[editar | editar código]

Embora seja usado como um método iterativo, o método do gradiente conjugado foi originalmente desenvolvido por Hestenes e Stiefel como um método direto para resolver sistemas lineares positivo definidos que encontra a solução exata em passos, assim como a eliminação gaussiana com pivotamento parcial[9]. Seja qual for a abordagem, toda derivação do método do gradiente conjugado se apoia em duas propriedades fundamentais[10]:

  1. Os vetores do resíduo são ortogonais: ();
  2. Os vetores diretores são -conjugados: ().

Para saber como escolher as direções de busca , é necessário definir a norma- (ou norma de energia). Dizemos que dois vetores não nulos e são conjugados em relação a uma matriz (ou -conjugados) se

Sendo simétrica e positiva definida, o lado esquerdo da equação define um produto interno

Então, dois vetores são -conjugados se, e somente se, eles são ortogonais com respeito a esse produto interno. Essa é uma relação simétrica: se é -conjugado a , então é -conjugado a . Suponha que

é um conjunto de vetores -conjugados dois a dois, i.e., para todo . Então forma uma base para , e podemos escrever a solução de nessa base:

Multiplicando pela esquerda a equação por , fica

Isolando , chegamos em

Isso resulta no seguinte método[4] para resolver a equação matricial : encontre uma sequência de direções conjugadas, e então calcule os coeficientes .

O gradiente conjugado como um método iterativo

[editar | editar código]

Se os vetores conjugados forem escolhidos cuidadosamente, é possível que nem todos eles sejam necessários para obter uma boa aproximação para a solução . Assim, o método do gradiente conjugado pode ser considerado como um método iterativo. Isso possibilita encontrar soluções aproximadas de sistemas de ordem suficientemente grande tal que o método direto levaria muito tempo para resolver.

Simlarmente ao método da descida rápida, o algoritmo começa com uma aproximação . A primeira direção de busca é tomada como . Os outros vetores da base serão conjugadas ao gradiente, então o nome método do gradiente conjugado. Observa que é também o resíduo proveniente do passo inicial do algoritmo.

Seja o resíduo no i-ésimo passo. Como notado acima, é o negativo do gradiente de no ponto , então a descida rápida exigiria um passo na direção . Dessa vez, no entanto, faz-se com que as direções sejam -conjugadas. Uma forma de fazer isso é exigindo que a próxima direção de busca seja construída do resíduo e de todas as direções de busca anteriores. Essa restrição de conjugação é um tipo de restrição de ortogonalização, logo o algoritmo pode ser visto como um exemplo do processo de Gram-Schmidt. Isso leva à expressão:

 

 

 

 

(4)

Seguindo essa direção, o próximo ponto é dado por

com

A expressão para pode ser deduzida da mesma forma que na descida rápida, substituindo por e minimizando a função . Com algumas manipulações algébricas[6], é possível simplificar essa expressão para

Da Equação 4, pode parecer que o algoritmo descrito requer o armazenamento de todos os vetores diretores e resíduos, como também de várias multiplicações matriz-vetor, o que apresenta um custo computacional alto. Entretanto, da ortogonalidade dos resíduos pode-se mostrar que[6]

ou seja, é suficiente computar apenas o coeficiente da última direção de busca e ainda se ter a propriedade de conjugação das direções de busca. Definindo

obtém-se a fórmula para atualizar a direção de busca

que leva ao seguinte algoritmo.

Entradas
matriz simétrica positiva definida, lado direito , aproximação inicial , tolerância tol e número máximo de iterações maxiter
Saídas
solução aproximada , norma-2 do resíduo relativo e número de iterações
Inicialização

Algoritmo
Enquanto for maior que a tolerância desejada e o número de iterações for menor que o número máximo de iterações, faça:

Se for suficientemente pequeno, então pare o ciclo.
Fim Enquanto
Se o número de iterações for maior que o número máximo de iterações, faça
Retorna , ,

Reinicializações

[editar | editar código]

Por conta de erros de arredondamento inerentes à aritmética de ponto flutuante, os vetores podem perder a propriedade de serem -conjugados[6]. Uma reinicialização consiste em zerar o coeficiente após iterações (ou quando o resíduo estagnar), isto é, descartar todas as direções de busca anteriores e recomeçar o algoritmo. Isso faz com que a próxima direção de busca tenha a direção do resíduo, que é exatamente um passo da descida rápida. O uso de reinicializações é uma estratégia simples e barata para limpar os erros de arredondamento e melhorar a estabilidade do algoritmo, embora possa desacelerar a convergência[4].

Exemplo numérico

[editar | editar código]

Considere o sistema linear dado por

Faremos duas iterações do método do gradiente conjugado, começando com a aproximação inicial para encontrar uma solução aproximada do sistema.

Solução

[editar | editar código]

Para fins comparativos, a solução exata é

O primeiro passo é computar o vetor resíduo associado a . Usando a fórmula , obtém-se

Como essa é a primeira iteração, usamos o resíduo como a direção de busca inicial ; o método para calcular será outro nas iterações seguintes.

Agora computamos o escalar (tamanho do passo na direção de ) através da relação

Calculamos agora com a fórmula

Isso completa a primeira iteração, cujo resultado é uma melhor aproximação para a solução do sistema. Prosseguindo com o método, computamos o próximo resíduo como

O próximo passo no processo é calcular o escalar que será eventualmente usado para determinar a direção de busca

Agora, usando , podemos computar usando a relação

Computamos então o escalar usando a direção de busca

Finalmente, encontramos usando o mesmo método que aquele usado para calcular .

O resultado, , é uma melhor aproximação da solução do sistema que e . Em aritmética exata, a solução exata do sistema é encontrada após iterações ( sendo a ordem do sistema).

Propriedade da terminação finita

[editar | editar código]

Em aritmética exata, o número de iterações necessário não é maior que a ordem da matriz. Esse comportamento é conhecido como a propriedade de terminação finita do método do gradiente conjugado. Ela se refere à capacidade do método de chegar à solução exata de um sistema linear em um número finito de passos—no máximo igual à dimensão do sistema—quando utilizada aritmética exata[7]. Essa propriedade decorre do fato de que, em cada iteração, o método gera um vetor resíduo que é ortogonal a todos os resíduos anteriores. Esses vetores formam um conjunto ortogonal.

Em um espaço -dimensional, é impossível construir mais que vetores linearmente independentes e ortogonais dois a dois a menos que um deles seja o vetor nulo[11]. Então, assim que o resíduo nulo aparecer, o método terá chegado à solução e deve terminar. Isso garante que o método do gradiente conjugado converge em no máximo passos.

Aplicação a sistemas esparsos

[editar | editar código]

A propriedade de terminação finita também tem implicações práticas na resolução de sistemas lineares grandes e esparsos, que surgem frequentemente em aplicações da ciência e das engenharias. Por exemplo, a discretização da equação de Laplace bidimensional usando diferenças finitas em uma malha uniforme leva ao sistema linear esparso , onde é simétrica e positiva definida[6].

O uso de uma malha interior de tamanho produz um sistema , e a matriz dos coeficientes tem um padrão de estêncil de cinco pontos. Cada linha de contém no máximo cinco entradas não nulas correspondentes ao ponto central e a seus vizinhos imediatos. Por exemplo, a matriz gerada de tal malha pode ter a forma

Embora o sistema tenha dimensão 25, o método do gradiente conjugado deve convergir em no máximo 25 iterações em aritmética exata. Na prática, a convergência frequentemente ocorre em menos iterações devido a propriedades espectrais da matriz[6]. Essa eficiência faz do método do gradiente conjugado um método iterativo atraente para resolver sistemas lineares de larga escala oriundos de equações diferenciais parciais, como aqueles encontrados em condução do calor, dinâmica dos fluidos e eletrostática.

Taxa de convergência

[editar | editar código]

Embora o método do gradiente conjugado possa ser interpretado como um método direto em aritmética exata, sua utilização prática é normalmente analisada como a de um método iterativo. Em aritmética exata, o método produz a solução exata após um número finito de iterações, não maior que a dimensão da matriz. Em computadores reais, entretanto, erros de arredondamento impedem que essa propriedade seja observada de forma exata.[5]

Como método iterativo, o gradiente conjugado melhora a aproximação da solução na norma de energia. A velocidade dessa convergência depende das propriedades espectrais da matriz do sistema. Um parâmetro importante é o número de condicionamento da matriz . Para uma matriz simétrica positiva definida, ele pode ser escrito como

onde e são, respectivamente, o maior e o menor autovalor de . Em geral, quanto maior é , mais lenta tende a ser a convergência do método.[6][12]

O número de condicionamento, porém, não descreve sozinho todo o comportamento do método. A distribuição dos autovalores também influencia a convergência. Matrizes com autovalores agrupados podem apresentar convergência mais rápida do que a sugerida apenas pelo valor de , enquanto certas distribuições espectrais podem causar fases de estagnação no erro iterativo.[5]

Teorema de convergência

[editar | editar código]

Define-se o subconjunto de polinômios

onde é o conjunto dos polinômios de grau máximo .

Sejam as aproximações iterativas da solução exata do sistema , e defina-se o erro por

A taxa de convergência do método do gradiente conjugado pode ser limitada por

onde denota o espectro de , denota o número de condicionamento da matriz, e

é a norma de energia associada a .[4][13]

Essa estimativa mostra que

iterações são suficientes para reduzir o erro a , para qualquer .

No limite em que tende ao infinito, tem-se

Essa relação indica uma taxa de convergência mais rápida do que a de métodos iterativos clássicos como Jacobi ou Gauss-Seidel, cujas estimativas tipicamente escalam como

O teorema de convergência não assume erros de arredondamento. Ainda assim, essa cota costuma descrever bem o comportamento prático do método em muitas situações.[5]

Convergência prática

[editar | editar código]

Quando o método é inicializado de maneira aleatória, a primeira fase de iterações costuma ser a mais rápida, pois o erro é reduzido dentro do subespaço de Krylov inicialmente gerado, que pode refletir um número de condicionamento efetivo menor. A segunda fase da convergência costuma ser bem descrita pela cota teórica envolvendo , mas pode apresentar comportamento superlinear, dependendo da distribuição dos autovalores da matriz e da distribuição espectral do erro.[5]

Na fase final, a menor precisão atingível pela aritmética de ponto flutuante é alcançada, e a convergência pode estagnar ou até começar a divergir. Em aplicações típicas de computação científica com aritmética de dupla precisão, o método do gradiente conjugado usa um critério de parada baseado em tolerância, de modo que as iterações geralmente são encerradas durante a primeira ou a segunda fase da convergência.

Precondicionamento para o método do gradiente conjugado

[editar | editar código]

Na maioria dos casos, o precondicionamento é usado para acelerar a convergência do método do gradiente conjugado. A ideia é substituir o sistema linear original por um sistema equivalente, mas com propriedades espectrais mais favoráveis. Para isso, escolhe-se uma matriz , chamada precondicionador, que deve aproximar , mas ser mais barata de aplicar do que resolver diretamente o sistema original.[6]

Se é simétrica positiva definida e possui número de condicionamento melhor que , pode-se usar o método do gradiente conjugado precondicionado. Uma forma comum do algoritmo é:[14]

resolva
Enquanto o critério de parada não for satisfeito, faça:
Se for suficientemente pequeno, então pare o ciclo.
resolva
Fim Enquanto.
O resultado é .

A formulação acima é equivalente à aplicação do método do gradiente conjugado usual ao sistema precondicionado

onde

e

A decomposição de Cholesky do precondicionador preserva a simetria e a positividade definida do sistema transformado. Entretanto, essa decomposição não precisa ser calculada explicitamente, basta saber aplicar o efeito de , isto é, resolver sistemas lineares auxiliares envolvendo .

A matriz precondicionadora deve ser simétrica positiva definida e fixa, isto é, não deve mudar de uma iteração para outra. Se essas hipóteses forem violadas, o comportamento do método do gradiente conjugado precondicionado pode se tornar imprevisível.

Decomposição Cholesky incompleta

[editar | editar código]

Um exemplo comum de precondicionador para matrizes simétricas positivas definidas é a decomposição de Cholesky incompleta.[15] Na decomposição de Cholesky usual, uma matriz simétrica positiva definida é fatorada como

onde é uma matriz triangular inferior. Para matrizes grandes e esparsas, entretanto, a fatoração completa pode introduzir muitos elementos não nulos adicionais, efeito denominado de fill-in (preenchimento), aumentando o custo de armazenamento na memória e de cálculo. A decomposição de Cholesky incompleta busca uma aproximação

mantendo parte da estrutura esparsa da matriz original. O precondicionador correspondente é

Na aplicação prática do precondicionador, não se calcula explicitamente . Em vez disso, para resolver

usa-se a fatoração incompleta. Como

tem-se

Tomando um vetor intermediário , resolve-se primeiro

por substituição para frente (forward substitution). Em seguida, resolve-se

por substituição para trás (backward substitution). Desse modo, obtém-se sem calcular explicitamente .

A qualidade da decomposição incompleta depende da estratégia usada para descartar elementos durante a fatoração (drop tolerance). Manter mais elementos tende a produzir um precondicionador melhor, mas aumenta o custo de armazenamento e de aplicação. Descartar mais elementos reduz o custo por iteração, mas pode diminuir o efeito do precondicionamento.

Precondicionador SSOR

[editar | editar código]

Outro precondicionador usado em sistemas simétricos positivos definidos é o SSOR (symmetric successive over-relaxation). Ele é derivado do método SOR e usa a decomposição da matriz em partes diagonal, triangular inferior e triangular superior.[12]

Se

onde é a parte diagonal de e é a parte triangular inferior estrita, uma forma comum do precondicionador SSOR é

com

O parâmetro é o parâmetro de relaxação. Sua escolha influencia a eficiência do precondicionador, onde valores inadequados podem reduzir o benefício do método, enquanto uma escolha apropriada pode acelerar a convergência.

Em comparação com a decomposição de Cholesky incompleta, o SSOR é conceitualmente simples e pode ser construído diretamente a partir das partes da matriz. No entanto, sua eficiência depende do problema considerado e da escolha do parâmetro .

Comparação dos métodos iterativos

[editar | editar código]

Para ilustrar a performance de diferentes métodos iterativos, considere o sistema linear , com

cuja solução é

A tabela abaixo lista os resultados obtidos ao utilizar os métodos iterativos de Jacobi, Gauss-Seidel e SOR (com ) aplicados ao sistema com com uma tolerância de 0.01, bem como aqueles de quando o CG é aplicado tanto em sua forma não precondicionada quanto utilizando uma matriz de precondicionamento. O método do gradiente conjugado precondicionado não apenas fornece as aproximações mais precisas, mas também utiliza o menor número de iterações[9].

Método Número de
Iterações
Jacobi 49 0.00305834
Gauss-Seidel 15 0.02445559
SOR () 7 0.00818607
Gradiente Conjugado 5 0.00629785
Gradiente Conjugado
(Precondicionado)
4 0.00009312

Gradiente conjugado aplicado às equações normais

[editar | editar código]

O método do gradiente conjugado pode ser aplicado a uma matriz retangular arbitrária através das equações normais , pois é positiva semidefinida (i.e., para todo ) para qualquer matriz . Isso resulta no método CGNR (do inglês, conjugate gradient normal equation residual)[7].

Como um método iterativo, não é necessário formar as matrizes explicitamente, mas apenas computar multiplicações matriz-vetor e matriz transposta-vetor. Assim, o CGNR é particularmente útil quando é uma matriz esparsa, pois essas operações são geralmente realizadas de forma extremamente eficiente. A desvantagem de resolver as equações normais é que o número de condicionamento é igual a e então a taxa de convergência do CGNR pode ser lenta e a acurácia da solução pode ser mais sensível a erros de arredondamento. Encontrar um precondicionador adequado torna-se fundamental para utilizar o método CGNR[12].

Referências

[editar | editar código]
  1. ↑ Hestenes, Magnus R.; Stiefel, Eduard (dezembro 1952). «Methods of Conjugate Gradients for Solving Linear Systems» (PDF). Journal of Research of the National Bureau of Standards. 49 (6): 409. doi:10.6028/jres.049.044Acessível livremente
  2. ↑ Straeter, T. A. (1971). On the Extension of the Davidon–Broyden Class of Rank One, Quasi-Newton Minimization Methods to an Infinite Dimensional Hilbert Space with Applications to Optimal Control Problems (Tese de PhD). North Carolina State University. hdl:2060/19710026200Acessível livremente – via NASA Technical Reports Server
  3. ↑ Speiser, Ambros (2004). «Konrad Zuse und die ERMETH: Ein weltweiter Architektur-Vergleich» [Konrad Zuse and the ERMETH: A worldwide comparison of architectures]. In: Hellige, Hans Dieter. Geschichten der Informatik. Visionen, Paradigmen, Leitmotive (em alemão). Berlin: Springer. p. 185. ISBN 3-540-00217-0
  4. 1 2 3 4 Polyak, Boris T. (1987). Introduction to Optimization (em inglês). [S.l.]: Optimization Software. ISBN 978-0-911575-14-9
  5. 1 2 3 4 5 Greenbaum, Anne (1997). Iterative Methods for Solving Linear Systems (em inglês). Philadelphia: SIAM. ISBN 978-0-89871-396-1. doi:10.1137/1.9781611970937
  6. 1 2 3 4 5 6 7 8 9 10 11 12 Ford, William (2015). Numerical Linear Algebra with Applications: Using MATLAB and Octave (em inglês). Amsterdam: Academic Press. ISBN 978-0-12-394435-1
  7. 1 2 3 Golub, Gene H.; Van Loan, Charles F. (2013). Matrix Computations 4ª ed. [S.l.]: The Johns Hopkins University Press. pp. 625–639. ISBN 978-1-4214-0794-4
  8. ↑ Axelsson, O.; Barker, V. (2001). Finite element solution of boundary value problems (em inglês). [S.l.]: SIAM. ISBN 0-89871-499-0
  9. 1 2 Burden, Richard; Faires, J. (2011). Numerical Analysis (em inglês). [S.l.]: Cengage Learning. ISBN 978-0-538-73351-9
  10. ↑ Datta, Biswa (2010). Numerical linear algebra and applications (em inglês) 2ª ed. [S.l.]: SIAM. ISBN 978-0-898716-85-6
  11. ↑ Axler, Sheldon (2024). Linear Algebra Done Right (PDF) (em inglês) 4ª ed. [S.l.]: Springer. ISBN 978-3-031-41026-0. Cópia arquivada (PDF) em 30 de junho de 2026
  12. 1 2 3 Saad, Yousef (2003). Iterative Methods for Sparse Linear Systems (em inglês) 2 ed. Philadelphia: SIAM. ISBN 978-0-89871-534-7
  13. ↑ Hackbusch, Wolfgang (2016). Iterative Solution of Large Sparse Systems of Equations (em inglês) 2 ed. Switzerland: Springer. ISBN 978-3-319-28483-5
  14. ↑ Barrett, Richard; Berry, Michael; Chan, Tony F.; Demmel, James; Donato, June; Dongarra, Jack; Eijkhout, Victor; Pozo, Roldan; Romine, Charles; van der Vorst, Henk. Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods (PDF) (em inglês) 2 ed. Philadelphia, PA: SIAM. p. 13. Consultado em 31 de março de 2020. Cópia arquivada (PDF) em 11 de março de 2026
  15. ↑ Concus, Paul; Golub, Gene H.; Meurant, Gérard (1985). «Block Preconditioning for the Conjugate Gradient Method». SIAM Journal on Scientific and Statistical Computing (em inglês). 6 (1): 220–252. doi:10.1137/0906018

Leitura adicional

[editar | editar código]

O método do gradiente conjugado foi originalmente proposto em

Descrições do método podem ser encontradas nos seguintes livros texto:

  • Kendell A. Atkinson (1988), An introduction to numerical analysis (2nd ed.), Section 8.9, John Wiley and Sons. ISBN 0-471-50023-2.
  • Mordecai Avriel (2003). Nonlinear Programming: Analysis and Methods. Dover Publishing. ISBN 0-486-43227-0.
  • Gene H. Golub and Charles F. Van Loan, Matrix computations (3rd ed.), Chapter 10, Johns Hopkins University Press. ISBN 0-8018-5414-8.

Ligações externas

[editar | editar código]