¿Cómo puedo diferenciar numéricamente una función muestreada de manera desigual?

21

Las fórmulas de diferencia finita estándar se pueden usar para calcular numéricamente una derivada con la expectativa de que tenga valores de función en puntos espaciados uniformemente, de modo que es una constante. ¿Qué sucede si tengo puntos desigualmente espaciados, de modo que ahora varía de un par de puntos adyacentes al siguiente? Obviamente, todavía puedo calcular una primera derivada como , pero ¿existen fórmulas de diferenciación numérica en órdenes superiores? y precisiones que pueden adaptarse a la variación en el tamaño de la cuadrícula?F(Xk)hXk+1-Xkhf(x)1hk[f(xk+1)f(xk)]

David Z
fuente
77
Siempre puede construir un interpolante polinomial (por partes) que pase por sus puntos y luego diferenciarlo.
JM
O bien, puede reconstruir las fórmulas de diferencias finitas sin la simplificación . Muchas veces esto debe hacerse para la integración, pero es probable que la sugerencia de JM sea más estable. h=xk+1xk
rcollyer
¿Qué tipo de función es esa?
mbq
El ejemplo que provocó esta pregunta es una función muestreada en valores espaciados logarítmicamente , pero calcular la segunda derivada de los datos transformados logarítmicamente da resultados divertidos y quería comprobarlo. Además, pensé que haría una pregunta lo más general posible. xk=x0δk
David Z
1
En lo que a mí respecta, algo que funciona solo para la primera y segunda derivadas sería una respuesta perfectamente buena a la pregunta. Escribí la pregunta como lo hice para permitir una respuesta general si alguien tenía una, pero, por supuesto, en la práctica, el primer y segundo derivado son los más útiles.
David Z

Respuestas:

21

El comentario de JM es correcto: puede encontrar un polinomio interpolador y diferenciarlo. Hay otras formas de derivar tales fórmulas; típicamente, todos conducen a resolver un sistema de van der Monde para los coeficientes. Este enfoque es problemático cuando la plantilla de diferencias finitas incluye una gran cantidad de puntos, porque las matrices de Vandermonde se vuelven mal condicionadas. Fornberg ideó un enfoque numéricamente más estable , y se explica de manera más clara y general en un segundo artículo suyo.

Aquí hay un script MATLAB simple que implementa el método de Fornberg para calcular los coeficientes de una aproximación de diferencia finita para cualquier derivada de orden con cualquier conjunto de puntos. Para una buena explicación, vea el Capítulo 1 del texto de LeVeque sobre métodos de diferencias finitas .

Un poco más sobre las fórmulas FD: supongamos que tiene una cuadrícula 1D. Si utiliza todo el conjunto de puntos de la cuadrícula para determinar un conjunto de fórmulas FD, el método resultante es equivalente a encontrar un polinomio interpolador a través de toda la cuadrícula y diferenciarlo. Este enfoque se conoce como colocación espectral. Alternativamente, para cada punto de la cuadrícula, puede determinar una fórmula FD utilizando solo unos pocos puntos vecinos. Esto es lo que se hace en los métodos tradicionales de diferencias finitas.

Como se menciona en los comentarios a continuación, el uso de diferencias finitas de muy alto orden puede provocar oscilaciones (el fenómeno Runge) si los puntos no se eligen con cuidado.

David Ketcheson
fuente
3
Por otro lado, cuando usa polinomios de interpolación, uno siempre debe recordar cosas como el fenómeno de Runge posiblemente sucediendo con sus datos, si sus datos están configurados de manera perversamente suficiente. Diría que los polinomios por partes podrían ser menos susceptibles a esto ...
JM
1
Me pregunto si el trabajo de Koev y la técnica de Fornberg podrían estar relacionados.
David Ketcheson
1
Curiosamente, parece haber un parecido entre las fórmulas de Fornberg y las fórmulas anteriores desarrolladas por Lyness y Moler basadas en el método clásico de Neville para generar el polinomio interpolador. De hecho, podrían ser las mismas fórmulas en notación diferente, pero no lo he comprobado a fondo.
JM
2
La interpolación polinómica con muchos puntos requiere que las distribuciones de puntos especiales estén bien condicionadas. En general, para distribuciones puntuales no uniformes no se recomienda hacer interpolación y luego diferenciar el polinomio de interpolación porque puede ser altamente oscilatorio (piense en el "fenómeno Runge" como lo menciona JM). Dependiendo de sus necesidades, podría ser una mejor idea usar solo splines cúbicos que, para muchos propósitos prácticos, pueden proporcionar buenas respuestas al problema de aproximación de derivadas aproximadas.
Allan P. Engsig-Karup
1
Buena respuesta. Solo para información, este documento ofrece un enfoque alternativo al de Fornberg. Sigue el mismo principio, pero da un algoritmo diferente.
davidhigh
2

Las respuestas anteriores son excelentes en términos de darle un código para usar, pero no son tan buenas en términos de teoría. Si desea profundizar en los polinomios de interpolación, eche un vistazo a este tratamiento teórico con algunos ejemplos concretos:

Singh, Ashok K. y BS Bhadauria. "Fórmulas de diferencias finitas para subintervalos desiguales utilizando la fórmula de interpolación de lagrange". Revista Internacional de Matemáticas y Análisis 3.17 (2009): 815-827. ( Enlace a PDF )

Los autores utilizan la interpolación lagrangiana (consulte el artículo de Wikipedia ) para calcular polinomios de interpolación de 3 puntos, 4 puntos y 5 puntos, así como sus derivadas primera, segunda y tercera. También tienen expresiones para el error de truncamiento, que es importante tener en cuenta al usar cualquier esquema de diferencia finita. También tienen la fórmula genérica para calcular polinomios de interpolación usando N puntos.

Los polinomios de interpolación lagrangianos son útiles porque ellos y sus derivados pueden ser muy precisos en el dominio que está interpolando, y no suponen un espaciado de cuadrícula uniforme. Debido a la naturaleza de los polinomios de interpolación lagrangianos, nunca puede tener más órdenes de derivados que los puntos de cuadrícula.

Creo que esto responde bien a su pregunta porque el documento que cité tiene fórmulas para esquemas de diferencias finitas arbitrariamente de orden superior, que por naturaleza son para cuadrículas desiguales y están limitadas solo por el número de puntos de cuadrícula que incluye en su plantilla. El documento también tiene una fórmula genérica para el error de truncamiento, que lo ayudará a evaluar el esquema polinomial de interpolación lagrangiano frente a otros esquemas que podría estar considerando. El artículo del autor debe dar los mismos resultados que el método de Fornberg. Su contribución es realmente solo contar algunos ejemplos y dar una estimación del error, lo que puede ser útil.

Encontré que tanto el trabajo que cité como el trabajo de Fornberg son útiles para mi propia investigación.

jvriesem
fuente
1
lamento tener que decirlo, pero su referencia citada parece extraña: usan fórmulas horribles y resuelven solo unos pocos casos especiales. Por el contrario, Fornberg ha resuelto el problema general al dar un algoritmo simple, y eso ya en los años 80. Ver aquí
davidhigh
otro periódico resolver el problema general es aquí
davidhigh
2
y un último comentario para faltarle el respeto a este documento. En "un excelente tratamiento teórico", no puede tener 9 referencias, donde 7 se refieren a su propio trabajo y una a un libro de análisis numérico general. Al menos no si no inventó el tema usted mismo, lo que esos autores no tienen.
davidhigh
Estás absolutamente en lo correcto. No diría que las fórmulas son horribles, aunque podrían mejorarse. Los casos especiales son bastante agradables como pruebas / comparaciones, y dan una fórmula general, que debe ser la misma que la de Fornberg.
jvriesem
1
@jvriesem Tenga en cuenta que el documento citado tiene el signo incorrecto en el tercer término en la ecuación. (15b)
Tarek
-4

El método más simple es usar aproximaciones de diferencias finitas.

Una estimación simple de dos puntos es calcular la pendiente de una línea secante cercana a través de los puntos (x, f (x)) y (x + h, f (x + h)). [1] Al elegir un número pequeño h, h representa un pequeño cambio en x, y puede ser positivo o negativo. La pendiente de esta línea es

F(X+h)-F(X)h

Esta expresión es el cociente de diferencia de Newton.

La pendiente de esta línea secante difiere de la pendiente de la línea tangente en una cantidad que es aproximadamente proporcional a h. Cuando h se aproxima a cero, la pendiente de la línea secante se aproxima a la pendiente de la línea tangente. Por lo tanto, la verdadera derivada de f en x es el límite del valor del cociente de diferencia a medida que las líneas secantes se acercan cada vez más a ser una línea tangente

evion2011
fuente
1
Creo que te están rechazando porque David Zaslavsky mencionó específicamente la fórmula del cociente de diferencia, y la pregunta es si hay mejores aproximaciones.
Dan
77
También porque es una copia directa y pegar de Wikipedia , a excepción del enlace de spam que originalmente era parte de la respuesta.
David Z