Uma outra classe de métodos que permite a resolução
numérica de equações é a classe dos métodos
de optimização.
Considerando uma equação da forma f(x)=0, é
claro que f(x)=0 sse f(x)f(x)=0.
Ora, os pontos z que verificam a equação equivalente
f(z)2=0
são também os pontos de mínimo absoluto da função
f
2,
que é não negativa.
Ou seja, se existirem, os zeros de f são os pontos de
mínimo absoluto de f 2.
De forma semelhante, no caso de funções com várias
variáveis, usando a norma euclidiana, obtemos:
F(x)= 0 <=> ||F(x)||2=0 <=> F(x). F(x)=0
e, se existirem, as soluções de F(x)= 0 são os pontos de mínimo absoluto de f(x)= F(x). F(x).
Portanto, podemos utilizar métodos de optimização
para a resolução de equações ou sistemas de
equações. Sabemos que quando as funções são
regulares, um ponto de mínimo relativo é um ponto crítico,
que anula a derivada, ou o gradiente. Assim, por outro lado, os métodos
para a resolução de equações, também
são usados como métodos de optimização. No
entanto, há outros métodos específicos para os problemas
optimização. Iremos ver (brevemente) o método do gradiente
e o método do gradiente conjugado, aplicados à resolução
de alguns sistemas.
Seja A uma matriz simétrica e definida positiva, e consideremos uma forma quadrática auxiliar:
f(x)= (1/2) xTAx -bTx + c,
que transforma vectores em números reais. Como a forma é quadrática, há apenas um vector que minimiza f e é exactamente o ponto crítico, solução de
Assim, se encontrarmos o ponto de mínimo, ele será solução do sistema linear Ax = b.
Consideramos métodos iterativos de optimização do tipo
x(n+1) = x(n)+ an r(n) ,
r(n) = -f(x(n))
= b - Ax(n) ,
d/da f (x(n)+
ar(n))
= f(x(n)+
ar(n))
.
r(n)
= (b - A(x(n)+ar(n))).
r(n)
= (b - Ax(n)). r(n)-aAr(n).
r(n)
= r(n). r(n)-aAr(n).
r(n).
Assim, o valor mínimo an será obtido com o zero da derivada,
r(n). r(n)-anAr(n). r(n) = 0 <=> an = r(n). r(n)/(Ar(n). r(n)).
Em conclusão, dado um vector inicial x(0),
o método do gradiente resume-se à iteração
x(n+1) = x(n) + |
r(n). Ar(n) |
r(n), com r(n) = b - Ax(n). |
Um critério de paragem consiste em exigir que || r(n)||2
= r(n). r(n) < e,
com e pequeno,
notando que isso implica que Ax(n) é próximo
de b.
Observação: Aqui o método do gradiente está
aplicado ao caso de sistemas lineares, em que a função f
é apenas auxiliar, nem tão pouco aparece na expressão
do método. No entanto, este método pode ser utilizado para
minimizar funções diferenciáveis, nesse caso mais
geral, r(n) = -f(x(n)).
Com este produto interno, dois vectores dizem-se A-ortogonais se <u,v>A= u . Av = 0, como sinónimo diz-se que as direcções u e v são conjugadas.
Seja N a dimensão da matriz A e sejam d(0), ..., d(N-1) direcções conjugadas, que constituem uma base A-ortogonal em RN.
Se considerarmos d(n) como direcções de descida, temos a iteração
De forma, semelhante, podemos obter
Obtemos de forma genérica, um método de direcções
conjugadas:
x(n+1) = x(n) + |
d(n). Ad(n) |
d(n), |
Teorema: Um método de direcções conjugadas
atinge a solução ao fim de N iterações.
Demonstração:
Consideremos o erro na iterada n, definido por e(n)=
x
-
x(n).
Reparamos que
e(n+1) = e(n) - |
d(n). Ad(n) |
d(n), |
e(N) = e(N-1)-aN-1 d(N-1) = ... = e(0) - aN-1 d(N-1) - ... - a0 d(0)
Por outro lado, podemos escrever e(0) na base A-ortogonal d(0), ..., d(N-1) através das projecções A-ortogonais
e(0) = PN-1 d(N-1) + ... + P0 d(0)
em que Pn é a projecção A-ortogonal de e(0) na direcção d(n), ou seja
Pn = < e(0), d(n) >A / < d(n), d(n) >A = (e(0). Ad(n) ) / (d(n). Ad(n) ).
Portanto, basta agora ver que para cada n temos Pn
= an , para concluir que e(N)
=
0,
ou seja que x(N) é a solução exacta.
De facto, atendendo às expressões de Pn
e de an basta ver que r(n).
d(n) = e(0). Ad(n) .
Ora, Ae(n) = Ax-Ax(n) =
b-Ax(n)
=
r(n)
,
portanto
Método dos Gradientes Conjugados
Consideramos agora o caso particular do método das direcções
conjugadas, em que elas são obtidas através do gradiente.
Recordamos que no caso linear o gradiente é dado pelo resíduo
r(n)
= b - Ax(n).
Através de um processo de ortogonalização (ou
melhor, A-ortogonalização) de Gram-Schmidt, através
dos sucessivos resíduos (gradientes) podemos construir as direcções
d(n)
que serão conjugadas (A-ortogonais).
Assim, podemos resumir o Método dos Gradientes Conjugados,
1º) Dado x(0) definimos d(0) = r(0) = b-Ax(0) ,
2º) Definimos x(n+1) = x(n)+ an d(n) , com an = r(n). d(n) / (d(n). Ad(n))
3º) Definimos r(n+1) = r(n) - an Ad(n) , e d(n+1) = r(n+1) + bn d(n), com bn = r(n+1). r(n+1) / (r(n). r(n))
4º) Regressamos ao 2º passo, até que sejam efectuados N passos.
Nota: Apesar de termos demonstrado que o método atinge a solução exacta ao fim de N passos, um mau condicionamento da matriz poderá impedir que a solução seja efectivamente obtida. Nesse caso há que utilizar um critério de paragem, p.ex: exigindo que o resíduo seja suficientemente pequeno.
Observação: De forma alternativa, mas menos eficiente,
podemos escrever o método na forma equivalente:
1º) É dado x(0) .
2º) Definimos
r(n) = b - Ax(n)3º) Regressamos ao 2º passo (até que sejam efectuados N passos).
se n=0, d(0) = r(0),
se n>0, d(n) = r(n) + (r(n).r(n))/(r(n-1).r(n-1))d(n-1),
x(n+1) = x(n) + (r(n).r(n))/(d(n). Ad(n))d(n)
Apesar de ser equivalente, neste caso aparecem dois produtos pela matriz
A, mais concretamente Ax(n) e Ad(n),
o que implica um maior número de operações. Por isso
é preferível utilizar o algoritmo anterior, onde aparece
apenas um produto, o Ad(n).