Eu tenho lido o livro Computer Simulation of Liquids de Allen e Tildesley. A partir da página 71, os autores discutem os vários algoritmos usados para integrar as equações de movimento de Newton em simulações de dinâmica molecular (MD). A partir da página 78, os autores discutem o algoritmo Verlet, que talvez seja o algoritmo de integração canônica no MD. Eles afirmam:
Talvez o método mais amplamente utilizado para integrar as equações de movimento seja o inicialmente adotado por Verlet (1967) e atribuído a Stormer (Gear 1971). Este método é uma solução direta da equação de segunda ordem . O método é baseado nas posições , acelerações e nas posições da etapa anterior. A equação para avançar as posições é a seguinte:
Há vários pontos a serem observados sobre o eqn (3.14). Será visto que as velocidades não aparecem de todo. Eles foram eliminados pela adição das equações obtidas pela expansão de Taylor sobre :
Posteriormente (na página 80), os autores declaram:
Contra o algoritmo Verlet, ... a forma do algoritmo pode desnecessariamente introduzir alguma imprecisão numérica. Isso ocorre porque, na eqn (3.14), um pequeno termo ( ) é adicionado a uma diferença de termos grandes ( ), para gerar a trajetória. O ( δ t 0 )
Eu acho que o "termo pequeno" é , e a "diferença de termos grandes" é .
Minha pergunta é: por que a imprecisão numérica resulta da adição de um termo pequeno a uma diferença de termos grandes?
Estou interessado em uma razão conceitual bastante básica, já que não estou familiarizada com detalhes da aritmética de ponto flutuante. Além disso, você conhece alguma referência do tipo "visão geral" (livros, artigos ou sites) que me introduzisse idéias básicas de aritmética de ponto flutuante relacionadas a esta pergunta? Obrigado pelo seu tempo.
Para aplicar o exemplo de Pedro à equação , assuma que suas variáveis estão armazenadas com os seguintes valores:( 3,14 )
r ( t - δ t ) = 100 δ t 2 a ( t ) = 1,49
De deve seguir-se que( 3,14 )
mas, como só podemos usar três dígitos, o resultado fica truncado para
Este erro será propagado, de modo que, após 20 etapas, assumindo que permaneça inalterado, você obtém r ( t + 20 δ t ) = 331 em vez de 433,90 ,a (t) r (t+20δt ) = 331 433,90
fonte
Pedro já dá o fato importante, ou seja, o cancelamento. O ponto é que todo número com o qual você calcula tem uma precisão associada; por exemplo, um único número de ponto flutuante de precisão pode representar apenas itens com aproximadamente 8 dígitos de precisão. Se você tiver dois números quase exatamente iguais, mas diferentes no sétimo dígito, a diferença será novamente um número de ponto flutuante de precisão única de 8 dígitos e parece ter precisão de 8 dígitos, mas, na realidade, apenas o primeiro 1 ou 2 dígitos são precisos porque as quantidades que você calculou não são precisas além desses 1 ou 2 dígitos da diferença.
Agora, o livro que você cita é de 1989. Naquela época, os cálculos eram feitos com maior precisão e arredondamento e cancelamento eram problemas sérios. Hoje, a maioria dos cálculos é feita com precisão dupla com 16 dígitos de precisão, e isso é muito menos um problema hoje do que costumava ser. Eu acho que vale a pena ler os parágrafos que você cita com um grão de sal e levá-los no contexto de seu tempo.
fonte