Como diferenciar numericamente uma função de amostra desigual?


21

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 ) 1f(xk)hxk+1xkh, 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?f(x)1hk[f(xk+1)f(xk)]


7
Você sempre pode construir um interpolante polinomial (por partes) passando pelos seus pontos e depois diferenciá-lo.
JM

Ou, você pode reconstruir as fórmulas de diferenças finitas sem a simplificação . Muitas vezes, isso deve ser feito para a integração, mas é provável que a sugestão de JM seja mais estável. h=xk+1xk
rcollyer

Que tipo de função é essa?
MBq

O exemplo que levou a essa pergunta é uma função amostrada em valores espaçados logaritmicamente , mas calcular a segunda derivada dos dados transformados em log fornece resultados engraçados e eu queria verificar isso. Além disso, achei que faria uma pergunta o mais geral possível. xk=x0δk
David Z

11
No que me diz respeito, algo que funcione apenas para a primeira e a segunda derivadas seria uma resposta perfeita para a pergunta. Eu escrevi a pergunta como fiz para permitir uma resposta geral se alguém tivesse uma, mas é claro que na prática é a primeira e a segunda derivadas que são mais úteis.
David Z

Respostas:


21

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.


3
Por outro lado, quando você usa polinômios interpoladores, deve-se sempre lembrar de coisas como o fenômeno de Runge, possivelmente acontecendo com seus dados, se eles estiverem configurados de maneira perversa o suficiente. Eu diria que polinômios por partes pode ser menos suscetíveis a esta ...
JM

11
Será que o trabalho de Koev e a técnica de Fornberg poderiam estar relacionados?
David Ketcheson

11
Curiosamente, parece haver uma semelhança entre as fórmulas de Fornberg e as anteriores desenvolvidas por Lyness e Moler, com base no método clássico de Neville para gerar o polinômio interpolador. De fato, elas podem ter as mesmas fórmulas em notações diferentes, mas eu não verifiquei completamente.
JM

2
A interpolação polinomial com muitos pontos exige que as distribuições de pontos especiais sejam bem condicionadas. Em geral, para distribuições de pontos não uniformes, não é recomendável fazer interpolação e depois diferenciar o polinômio de interpolação, pois pode ser altamente oscilatório (pense em "Fenômeno de Runge", como mencionado por JM). Dependendo das suas necessidades, pode ser uma idéia melhor usar apenas splines cúbicos que, para muitos propósitos práticos, possam fornecer boas respostas para o problema de aproximação de derivadas aproximadas.
Allan P. Engsig-Karup

11
Boa resposta. Apenas para informação, este artigo fornece uma abordagem alternativa à de Fornberg. Segue o mesmo princípio, mas fornece um algoritmo diferente.
precisa saber é o seguinte


2

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:

Singh, Ashok K. e BS Bhadauria. "Fórmulas de diferenças finitas para subintervalos desiguais usando a fórmula de interpolação de lagrange." International Journal of Mathematics and Analysis 3.17 (2009): 815-827. ( Link para PDF )

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.


11
lamento ter que declarar, mas sua referência citada parece estranha - eles usam fórmulas horríveis e resolvem apenas alguns casos especiais. Em contraste, Fornberg resolveu o problema geral , fornecendo um algoritmo simples, e isso já nos anos 80. Veja aqui
davidhigh 27/03/2015

outro artigo resolver o problema geral é aqui
davidhigh

2
e um último comentário para desrespeitar este artigo. Em "um excelente tratamento teórico", você não pode ter 9 referências, sendo 7 referentes ao seu próprio trabalho e uma a um livro de análise numérica geral. Pelo menos não se você não inventou o tópico por si mesmo, o que esses autores não o fizeram.
Davidhigh 27/03/2015

Você está absolutamente correto. Eu não diria que as fórmulas são horríveis, embora possam ser melhoradas. Os casos especiais são realmente bastante agradáveis ​​como testes / comparações e fornecem uma fórmula geral, que deve ser a mesma de Fornberg.
Jvriesem

11
@jvriesem Observe que o documento citado tem o sinal errado no terceiro período na Eqn. (15b)
Tarek


-4

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 é

f(x+h)f(x)h

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


11
Eu acho que você está recebendo votos negativos porque David Zaslavsky mencionou especificamente a fórmula do quociente da diferença, e a pergunta é se existem aproximações melhores.
21411 Dan

7
Também porque é um copiar e colar direto da Wikipedia , exceto pelo link de spam que originalmente fazia parte da resposta.
David Z
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.