Comment différencier numériquement une fonction échantillonnée de manière inégale?

21

Les formules de différences finies standard sont utilisables pour calculer numériquement une dérivée en supposant que vous ayez des valeurs de fonction à des points régulièrement espacés, de sorte que soit une constante. Que faire si j'ai des points espacés de manière inégale, de sorte que varie maintenant d'une paire de points adjacents au suivant? Évidemment, je peux toujours calculer une dérivée première comme f '(x) \ approx \ frac {1} {h_k} [f (x_ {k + 1}) - f (x_k)] , mais y a-t-il des formules de différenciation numérique à des ordres supérieurs et des précisions qui peuvent s'adapter à la variation de la taille de la grille?h x k + 1 - x k hf(xk)hxk+1xkhf(x)1hk[f(xk+1)f(xk)]

David Z
la source
7
Vous pouvez toujours construire un interpolant polynomial (par morceaux) passant par vos points, puis le différencier.
JM
Ou, vous pouvez reconstruire les formules de différence finie sans la simplification h=xk+1xk . Souvent, cela doit être fait pour l'intégration, mais il est probable que la suggestion de JM soit plus stable.
rcollyer
Quel genre de fonction est-ce?
mbq
L'exemple qui a suscité cette question est une fonction échantillonnée à des valeurs espacées logarithmiquement xk=x0δk , mais le calcul de la dérivée seconde des données transformées en journal donne des résultats amusants et je voulais une vérification à ce sujet. De plus, je pensais que je poserais une question aussi générale que possible.
David Z
1
En ce qui me concerne, quelque chose qui ne fonctionne que pour les dérivés premier et second serait une réponse parfaitement fine à la question. J'ai écrit la question comme je l'ai fait pour permettre une réponse générale si quelqu'un en avait une, mais bien sûr, dans la pratique, ce sont les dérivées première et seconde qui sont les plus utiles.
David Z

Réponses:

21

Le commentaire de JM est juste: vous pouvez trouver un polynôme interpolateur et le différencier. Il existe d'autres façons de dériver de telles formules; généralement, ils conduisent tous à résoudre un système van der Monde pour les coefficients. Cette approche est problématique lorsque le pochoir à différences finies comprend un grand nombre de points, car les matrices Vandermonde deviennent mal conditionnées. Une approche plus stable numériquement a été conçue par Fornberg , et est expliquée plus clairement et généralement dans un deuxième article .

Voici un simple script MATLAB qui implémente la méthode de Fornberg pour calculer les coefficients d'une approximation aux différences finies pour toute dérivée d'ordre avec n'importe quel ensemble de points. Pour une belle explication, voir le chapitre 1 du texte de LeVeque sur les méthodes de différences finies .

Un peu plus sur les formules FD: supposons que vous ayez une grille 1D. Si vous utilisez l'ensemble des points de la grille pour déterminer un ensemble de formules FD, la méthode résultante équivaut à rechercher un polynôme interpolant dans toute la grille et à le différencier. Cette approche est appelée collocation spectrale. Alternativement, pour chaque point de grille, vous pouvez déterminer une formule FD en utilisant seulement quelques points voisins. C'est ce qui se fait dans les méthodes traditionnelles aux différences finies.

Comme mentionné dans les commentaires ci-dessous, l'utilisation de différences finies de très haut niveau peut conduire à des oscillations (phénomène de Runge) si les points ne sont pas choisis avec soin.

David Ketcheson
la source
3
D'un autre côté, lorsque vous utilisez des polynômes interpolants, vous devez toujours vous souvenir de choses comme le phénomène de Runge qui peut se produire avec vos données, si vos données sont suffisamment configurées de manière perverse. Je dirais que les polynômes par morceaux pourraient être moins sensibles à cela ...
JM
1
Je me demande si le travail de Koev et la technique de Fornberg pourraient être liés?
David Ketcheson
1
Chose intéressante, il semble y avoir une ressemblance entre les formules de Fornberg et les formules antérieures développées par Lyness et Moler basées sur la méthode classique de Neville pour générer le polynôme interpolateur. Il peut s'agir en fait des mêmes formules dans des notations différentes, mais je n'ai pas vérifié à fond.
JM
2
L'interpolation polynomiale avec de nombreux points nécessite des distributions de points spéciales pour être bien conditionnée. En général, pour les distributions ponctuelles non uniformes, il n'est pas recommandé de faire une interpolation puis une différenciation du polynôme d'interpolation car il peut être très oscillant (pensez au "phénomène de Runge" comme mentionné par JM). Selon vos besoins, il peut être préférable d'utiliser simplement des splines cubiques qui, à de nombreuses fins pratiques, peuvent fournir de bonnes réponses au problème d'approximation des dérivées approximatives.
Allan P. Engsig-Karup,
1
Bonne réponse. Pour information, cet article propose une approche alternative à celle de Fornberg. Il suit le même principe, mais donne un algorithme différent.
davidhigh
2

Les réponses ci-dessus sont excellentes en termes de vous donner un code à utiliser, mais ne sont pas aussi bonnes en termes de théorie. Si vous souhaitez approfondir les polynômes d'interpolation, jetez un œil à ce traitement théorique avec quelques exemples concrets:

Singh, Ashok K. et BS Bhadauria. "Formules de différences finies pour des sous-intervalles inégaux utilisant la formule d'interpolation de Lagrange." Journal international de mathématiques et d'analyse 3.17 (2009): 815-827. ( Lien vers PDF )

Les auteurs utilisent l'interpolation lagrangienne (voir l' article Wikipedia ) pour calculer les polynômes interpolants à 3, 4 et 5 points, ainsi que leurs première, deuxième et troisième dérivées. Ils ont également des expressions pour l'erreur de troncature, ce qui est important à considérer lors de l'utilisation de tout schéma de différence finie. Ils ont également la formule générique pour calculer les polynômes interpolants en utilisant N points.

Les polynômes interpolateurs lagrangiens sont utiles car ils et leurs dérivés peuvent être très précis dans le domaine que vous interpolez, et ils ne supposent pas un espacement de grille uniforme. En raison de la nature des polynômes interpolateurs lagrangiens, vous ne pouvez jamais avoir plus d'ordres de dérivés que vous n'avez de points de grille.

Je pense que cela répond bien à votre question car l'article que j'ai cité contient des formules pour des schémas de différences finies d'ordre arbitrairement élevé, qui par nature sont pour des grilles inégales et ne sont limités que par le nombre de points de grille que vous incluez dans votre pochoir. L'article contient également une formule générique pour l'erreur de troncature, qui vous aidera à évaluer le schéma polynomial interpolateur lagrangien par rapport à d'autres schémas que vous envisagez. L'article de l'auteur devrait donner les mêmes résultats que la méthode de Fornberg. Leur contribution consiste simplement à rassembler quelques exemples et à donner une estimation de l'erreur, que vous pourriez trouver utile.

J'ai trouvé à la fois le document que j'ai cité et le travail de Fornberg pour mes propres recherches.

jvriesem
la source
1
désolé que je doive le dire, mais votre référence citée semble bizarre - ils utilisent des formules horribles et ne résolvent que quelques cas spéciaux. En revanche, Fornberg a résolu le problème général en donnant un algorithme simple, et cela déjà dans les années 80. Voir ici
davidhigh
un autre article résolvant le problème général est ici
davidhigh
2
et un dernier commentaire pour manquer de respect à ce document. Dans "un excellent traitement théorique", vous ne pouvez pas avoir 9 références, où 7 se réfèrent à votre propre travail et une à un livre d'analyse numérique générale. Du moins pas si vous n'avez pas inventé le sujet par vous-même, ce que ces auteurs n'ont pas.
davidhigh
Vous avez absolument raison. Je ne dirais pas que les formules sont horribles, bien qu'elles puissent être améliorées. Les cas spéciaux sont en fait plutôt agréables en tant que tests / comparaisons, et ils donnent une formule générale, qui doit être la même que celle de Fornberg.
jvriesem
1
@jvriesem Veuillez noter que le document cité a le mauvais signe dans le troisième terme de l'équation. (15b)
Tarek
-4

La méthode la plus simple consiste à utiliser des approximations aux différences finies.

Une estimation simple en deux points consiste à calculer la pente d'une ligne sécante proche à travers les points (x, f (x)) et (x + h, f (x + h)). [1] Choisir un petit nombre h, h représente un petit changement de x, et il peut être positif ou négatif. La pente de cette ligne est

f(x+h)f(x)h

Cette expression est le quotient de différence de Newton.

La pente de cette ligne sécante diffère de la pente de la ligne tangente d'une quantité approximativement proportionnelle à h. Lorsque h s'approche de zéro, la pente de la ligne sécante s'approche de la pente de la ligne tangente. Par conséquent, la vraie dérivée de f à x est la limite de la valeur du quotient de différence à mesure que les lignes sécantes se rapprochent de plus en plus d'être une ligne tangente

evion2011
la source
1
Je pense que vous obtenez un vote négatif parce que David Zaslavsky a spécifiquement mentionné la formule du quotient de différence, et la question est de savoir s'il existe de meilleures approximations.
Dan
7
Aussi parce que c'est un copier-coller direct de Wikipedia , à l'exception du lien de spam qui faisait initialement partie de la réponse.
David Z