Question

Actuellement, j'ai deux tableaux numpy : x et y de la même taille.

Je voudrais écrire une fonction (éventuellement en appelant numpy/scipy...fonctions si elles existent) :

def derivative(x, y, n = 1):
    # something
    return result

result est un tableau numpy de la même taille que x et contenant la valeur du n-ième dérivée de y concernant à x (J'aimerais que la dérivée soit évaluée en utilisant plusieurs valeurs de y afin d'éviter des résultats irréguliers).

Était-ce utile?

La solution

Ce n’est pas un problème simple, mais de nombreuses méthodes ont été conçues pour le résoudre.Une solution simple consiste à utiliser Différence finie méthodes.La commande `numpy.diff' utilise la différenciation finie où vous pouvez spécifier l'ordre de la dérivée.Wikipédia dispose également d'une page qui répertorie les éléments nécessaires coefficients de différenciation finis pour différentes dérivées de différentes précisions.Si la fonction numpy ne fait pas ce que vous voulez.

En fonction de votre application, vous pouvez également utiliser scipy.fftpack.diff qui utilise un technique complètement différente faire la même chose.Bien que votre fonction ait besoin d'une transformée de Fourier bien définie.

Il existe de très nombreuses variantes (par ex. sommation par parties opérateurs de différenciation finie ou opérateurs conçus pour préserver les constantes d'évolution connues dans votre système d'équations) sur les deux idées ci-dessus.Ce que vous devez faire dépendra en grande partie du problème que vous essayez de résoudre.

Ce qui est bien, c'est qu'il y a beaucoup de travail qui a été fait sur le terrain.La page Wikipédia pour Différenciation numérique dispose de certaines ressources (bien qu'il se concentre sur les techniques de différenciation finie).

Autres conseils

Le projet findiff est un package Python qui peut créer des dérivés de tableaux de n'importe quelle dimension avec n'importe quel ordre de précision souhaité (bien sûr en fonction de vos restrictions matérielles).Il peut gérer des tableaux sur des grilles uniformes et non uniformes et également créer des généralisations de dérivées, c'est-à-direcombinaisons linéaires générales de dérivées partielles à coefficients constants et variables.

Est-ce que quelque chose comme ça résoudrait votre problème ?

def get_inflection_points(arr, n=1):
    """
    returns inflextion points from array
        arr: array
        n: n-th discrete difference
    """
    inflections = []
    dx = 0
    for i, x in enumerate(np.diff(arr, n)):
        if x >= dx and i > 0:
            inflections.append(i*n)
        dx = x
    return inflections

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top