Suponha que eu tenho alguma função e quero encontrar tal que . Eu poderia usar o método Newton-Raphson. Mas isso requer que eu conheça a função derivada . Uma expressão analítica para pode estar indisponível. Por exemplo, pode ser definido por um código complicado de computador que consulta um banco de dados de valores experimentais.
Mas mesmo se é complicado, eu posso aproximar para qualquer particular, optando por um pequeno número e calculting .
Ouvi dizer que existem desvantagens distintas nessa abordagem, mas não sei quais são elas. A Wikipedia sugere que "Usar esta aproximação resultaria em algo como o método secante cuja convergência é mais lenta que a do método de Newton".
Alguém pode, por favor, elaborar isso e fornecer uma referência que discuta particularmente os problemas com essa técnica?
fonte
Respostas:
Por uma questão de notação, vamos supor que (ou seja, é uma função com valor vetorial que pega um vetor como entrada e gera um vetor do mesmo tamanho). Existem duas preocupações: custo computacional e precisão numérica.f: Rn→ Rn
Calcular a derivada (a matriz jacobiana, ou , ou o que você preferir) usando diferenças finitas, exigirá função avaliações. Se você pudesse calcular a derivada usando aritmética de ponto flutuante diretamente da definição, teria que calcular o quociente de diferençaJ ( x ) ( ∇ f ( x ) ) T nD f( X ) J( X ) ( ∇ f( x ) )T n
para cada , supondo que você não faça nenhum tipo de "diferenciação finita inteligente" (como Curtis-Powell-Reid) porque você conhece (ou pode detectar) o padrão de esparsidade de . Se for grande, pode haver muitas avaliações de função. Se você tiver uma expressão analítica para , calculá-la pode ser mais barata. Métodos de diferenciação automática (também conhecidos como algorítmicos) também podem ser usados em alguns casos para calcular aproximadamente 3 a 5 vezes o custo de uma avaliação de função.D f n D f D fi=1,…,n Df n D f D f
Existem também preocupações numéricas. Obviamente, em um computador, não podemos levar o limite de um escalar para zero; portanto, quando aproximamos , estamos realmente escolhendo como "pequeno" e calculandoεD f ε
onde significa que é uma aproximação e esperamos que seja uma aproximação realmente boa. Calcular esta aproximação na aritmética de ponto flutuante é difícil porque se você escolher muito grande, sua aproximação poderá ser ruim, mas se você escolher muito pequeno, poderá haver um erro de arredondamento significativo. Esses efeitos são abordados no artigo da Wikipedia sobre diferenciação numérica em detalhes superficiais; referências mais detalhadas podem ser encontradas no artigo.ε ε≈ ε ε
Se o erro na matriz jacobiana não for muito grande, as iterações de Newton-Raphson convergirão. Para uma análise teórica detalhada, consulte o Capítulo 25 de Precisão e estabilidade de algoritmos numéricos de Nick Higham ou o artigo de Françoise Tisseur no qual se baseia.D f
As bibliotecas geralmente cuidam desses detalhes algorítmicos para você e, geralmente, as implementações de bibliotecas do algoritmo Newton-Raphson (ou suas variantes) convergirão bastante bem, mas de vez em quando haverá um problema que causa alguns problemas devido às desvantagens. acima. No caso escalar , eu usaria o método de Brent , devido à sua robustez e boa taxa de convergência na prática.( n = 1 )
fonte