Visão geral
Boa pergunta. Existe um artigo intitulado "Melhorando a precisão do método de diferenciação de matrizes para pontos de colocação arbitrária" de R. Baltensperger. Não é grande coisa na minha opinião, mas tem um ponto (que já era conhecido antes do surgimento em 2000): enfatiza a importância de uma representação precisa do fato de que a derivada da função constante deve seja zero (isso vale exatamente no sentido matemático, mas não necessariamente na representação numérica).f(x)=1
É simples perceber que isso requer que a soma das linhas das n-ésimas matrizes derivadas seja zero. É comum impor essa restrição ajustando a entrada diagonal, ou seja, definindoÉ claro que esse recurso não se aplica exatamente ao trabalhar em um computador devido a erros de arredondamento nos cálculos de ponto flutuante. O mais surpreendente é que esses erros são ainda mais graves ao usar as fórmulas analíticas para a matriz derivada (que estão disponíveis para muitos pontos de colocação clássicos, por exemplo, Gauss-Lobatto).D(n)D(n)jj:=−∑i=1i≠jNDij.(1)
Agora, o artigo (e suas referências) afirma que o erro da derivada está na ordem do desvio da soma da linha de zero. O objetivo é, portanto, torná-los numericamente o menor possível.
Testes numéricos
O ponto positivo é que o procedimento de Fornberg parece ser bastante bom nesse sentido. Na figura abaixo, comparei o comportamento da primeira matriz exata, ou seja, analítica, e a derivada do algoritmo de Fornberg, para número variável de pontos de colocação de Chebyshev-Lobatto.
Novamente, acreditando na afirmação no artigo citado, isso implica que o algoritmo de Fornberg produzirá resultados mais precisos para a derivada.
Para provar isso, usarei a mesma função do artigo,
e avalie o erroIsso é feito para (i) a matriz derivada obtida analiticamente, (ii) matriz derivada de Fornberg e (iii) uma versão ajustada da matriz Fornberg, onde a Eq acima. (1) é aplicado de maneira bastante direta viaAqui está o que eu recebo (novamente para o exemplo de Gauss-Lobatto abscissas):f(x)=11+x2.(2)
En=maxi∈{0,…,n}∣∣∣f′(xi)−∑j=1nDijf(xj)∣∣∣.(3)
D~jj=Djj−(∑i=1nDji),for all j.(4)
Conclusão
Em conclusão, o método de Fornberg parece ser bastante preciso, no caso mesmo em cerca de 3 ordens de grandeza mais acuradas do que os resultados das fórmulas analíticas. Isso deve ser preciso o suficiente para a maioria dos aplicativos. Além disso, isso é notável porque Fornberg parece não incluir explicitamente esse fato em seu método (pelo menos não há menção nos dois artigos de Fornberg).N=512
Outra ordem de magnitude pode ser obtida para este exemplo através de uma inclusão direta da Eq. (4). Como essa é uma abordagem bastante simples e aplicada apenas uma vez para cada derivada, não vejo razão para não usá-la.
O método do artigo de Baltensperger - que usa uma abordagem mais sofisticada para avaliar a soma na Eq. (1) para reduzir erros de arredondamento - produz aproximadamente a mesma ordem de magnitude para o erro. Portanto, pelo menos neste exemplo, é aproximadamente equivalente ao método "Ajustberg Fornberg" acima.