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 h
finite-difference
discretization
David Z
la source
la source
Réponses:
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.
la source
http://mathformeremortals.wordpress.com/2013/01/12/a-numerical-second-derivative-from-three-points/
Cela répond à votre question et montre la formule que vous recherchez, pour la dérivée seconde. Les dérivés d'ordre supérieur suivent le même schéma.
la source
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:
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.
la source
J'ai trouvé cet article sur les formules de différences finies avec des sous-intervalles inégaux . Je vais utiliser cela au lieu de l'interpolation. Une fois que j'ai tapé toutes les formules, je les posterai ici.
la source
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
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
la source