As fórmulas padrão de diferença finita são utilizáveis para calcular numericamente uma derivada sob a expectativa de que você tenha valores de função em pontos espaçados igualmente, de modo que h ≡ x k + 1 - x k seja uma constante. E se eu tiver pontos desigualmente espaçados, para que h agora varie de um par de pontos adjacentes para o próximo? Obviamente, ainda posso calcular uma primeira derivada como f ′ ( x ) ≈ 1, mas existem fórmulas de diferenciação numérica em ordens e precisões mais altas que podem se adaptar à variação no tamanho da grade?
finite-difference
discretization
David Z
fonte
fonte
Respostas:
O comentário de JM está correto: você pode encontrar um polinômio interpolador e diferenciá-lo. Existem outras maneiras de derivar essas fórmulas; normalmente, todos levam à solução de um sistema van der Monde para os coeficientes. Essa abordagem é problemática quando o estêncil de diferenças finitas inclui um grande número de pontos, porque as matrizes de Vandermonde ficam mal condicionadas. Uma abordagem mais numericamente estável foi desenvolvida por Fornberg , e é explicada de forma mais clara e geral em um segundo artigo .
Aqui está um script MATLAB simples que implementa o método de Fornberg para calcular os coeficientes de uma aproximação de diferença finita para qualquer derivada de ordem com qualquer conjunto de pontos. Para uma boa explicação, consulte o capítulo 1 do texto de LeVeque sobre métodos de diferenças finitas .
Um pouco mais sobre as fórmulas FD: Suponha que você tenha uma grade 1D. Se você usar todo o conjunto de pontos da grade para determinar um conjunto de fórmulas FD, o método resultante será equivalente a encontrar um polinômio interpolado através de toda a grade e diferenciá-lo. Essa abordagem é conhecida como colocação espectral. Como alternativa, para cada ponto da grade, você pode determinar uma fórmula FD usando apenas alguns pontos vizinhos. Isto é o que é feito nos métodos tradicionais de diferenças finitas.
Conforme mencionado nos comentários abaixo, o uso de diferenças finitas de ordem muito alta pode levar a oscilações (o fenômeno Runge) se os pontos não forem escolhidos com cuidado.
fonte
http://mathformeremortals.wordpress.com/2013/01/12/a-numerical-second-derivative-from-three-points/
Isso aborda sua pergunta e mostra a fórmula que você está procurando, para a segunda derivada. Derivados de ordem superior seguem o mesmo padrão.
fonte
As respostas acima são ótimas em termos de fornecer um código para você usar, mas não são tão boas em termos de teoria. Se você quiser se aprofundar nos polinômios interpoladores, dê uma olhada neste tratamento teórico com alguns exemplos concretos:
Os autores usam a Interpolação Lagrangiana (consulte o artigo da Wikipedia ) para calcular polinômios de interpolação de 3, 4 e 5 pontos, bem como seus primeiro, segundo e terceiro derivados. Eles também têm expressões para o erro de truncamento, o que é importante considerar ao usar qualquer esquema de diferenças finitas. Eles também têm a fórmula genérica para calcular polinômios interpoladores usando N pontos.
Os polinômios de interpolação lagrangiana são úteis porque eles e seus derivados podem ser muito precisos no domínio que você está interpolando e não assumem um espaçamento uniforme da grade. Devido à natureza dos polinômios de interpolação lagrangiana, você nunca pode ter mais ordens de derivativos do que pontos de grade.
Acho que isso responde bem à sua pergunta, porque o artigo que citei tem fórmulas para esquemas de diferenças finitas arbitrariamente de alta ordem, que por natureza são para grades irregulares e são limitados apenas pelo número de pontos de grade que você inclui em seu estêncil. O artigo também possui uma fórmula genérica para o erro de truncamento, que o ajudará a avaliar o esquema polinomial de interpolação Lagrangiano em relação a outros esquemas que você possa estar considerando. O artigo do autor deve apresentar os mesmos resultados que o método de Fornberg. A contribuição deles é realmente apenas contar alguns exemplos e fornecer uma estimativa do erro, o que você pode achar útil.
Eu achei o trabalho que citei e o trabalho de Fornberg úteis para minha própria pesquisa.
fonte
Encontrei este artigo sobre fórmulas de diferenças finitas com subintervalos desiguais . Vou usar isso em vez de interpolação. Depois de digitar todas as fórmulas, as postarei aqui.
fonte
O método mais simples é usar aproximações de diferenças finitas.
Uma estimativa simples de dois pontos é calcular a inclinação de uma linha secante próxima através dos pontos (x, f (x)) e (x + h, f (x + h)). [1] Escolher um número pequeno h, h representa uma pequena mudança em x e pode ser positivo ou negativo. A inclinação desta linha é
Essa expressão é o quociente de diferença de Newton.
A inclinação dessa linha secante difere da inclinação da linha tangente em uma quantidade aproximadamente proporcional a h. Quando h se aproxima de zero, a inclinação da linha secante se aproxima da inclinação da linha tangente. Portanto, a verdadeira derivada de f em x é o limite do valor do quociente de diferença à medida que as linhas secantes se aproximam cada vez mais de serem uma linha tangente
fonte