Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Nouveau Membre du Club
    Inscrit en
    janvier 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 200
    Points : 35
    Points
    35

    Par défaut cubic spline interpolation avec Scipy

    Bonjour a tous,

    J'ai un jeu de données qui ressemble à ca :


    Code :
    1
    2
    3
    4
    5
    6
     
    position number_of_tag_at_this_position 
    3 13
    4 25 
    8 23 
    6 12
    Je veux appliquer a ce jeu de données un interpolation cubique, j'ai donc fait comme ceci :

    Code :
    1
    2
    3
    4
    5
    import numpy as np 
    from scipy import interpolate 
    x = [3,8,13,23] 
    y = [4,6,25,12] 
    tck = interpolate.splrep(x,y) # cubic`
    Et maintenant j'aimerai calculer la derivée de la fonction a chaque point de l'interpolation et identifier la position ou la dérivée vaut 0 ... quelqu'un pourrait m'aider ?
    Merci d'avancce

  2. #2
    Membre éprouvé
    Homme Profil pro arnaud
    Ingénieur développement logiciels
    Inscrit en
    janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Nom : Homme arnaud
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : janvier 2013
    Messages : 246
    Points : 455
    Points
    455

    Par défaut interpoler la dérivée

    Bonjour.
    Il n'y a pas de fonction qui le fait directement.
    On peut toujours interpoler la dérivée de la spline par une autre spline, pour ensuite utiliser la fonction sproot :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import interpolate
     
    x = [3,8,13,23] 
    y = [4,6,25,12] 
    tck = interpolate.splrep(x,y) # cubic`
     
    xnew = np.arange( 1, 24, 0.1)
    ynew = interpolate.splev(xnew,tck,der=0)    # spline
    yder = interpolate.splev(xnew,tck,der=1)    # dérivée
     
    # Estimation de la dérivée par une autre spline
    tckder = interpolate.splrep(xnew,yder)
    print interpolate.sproot(tckder)
     
    plt.plot( x, y, 'ob', xnew, ynew, 'r')
    plt.draw() ; input("--- fini ---")

  3. #3
    Membre chevronné
    Profil pro Alexis
    Ingénieur de recherche en informatique
    Inscrit en
    juin 2009
    Messages
    435
    Détails du profil
    Informations personnelles :
    Nom : Alexis
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche en informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 435
    Points : 705
    Points
    705

    Par défaut

    Tu as la fonction splev, sa documentation dit:

    Code :
    1
    2
    3
    4
    5
    6
     
     scipy.interpolate.splev(x, tck, der=0, ext=0)
     
        Evaluate a B-spline or its derivatives.
     
        Given the knots and coefficients of a B-spline representation, evaluate the value of the smoothing polynomial and its derivatives. This is a wrapper around the FORTRAN routines splev and splder of FITPACK.

  4. #4
    Nouveau Membre du Club
    Inscrit en
    janvier 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 200
    Points : 35
    Points
    35

    Par défaut

    Bonjour __dardanos__, et merci pour ta réponse,
    je voudrais être sure de bien comprendre :
    Code :
    print interpolate.sproot(tckder)
    me renvoi les points où la dérivée est nulle ?

    Comment puis je accéder à la valeur en ordonnée où xnew=5 par exemple ?

  5. #5
    Membre éprouvé
    Homme Profil pro arnaud
    Ingénieur développement logiciels
    Inscrit en
    janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Nom : Homme arnaud
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : janvier 2013
    Messages : 246
    Points : 455
    Points
    455

    Par défaut

    Salut.

    Code :
    print interpolate.sproot(tckder)
    retourne en effet les points où la dérivée est nulle (car tckder est la spline de la dérivée).

    Code :
    print interpolate.splev(5, tck)
    retourne la valeur de la spline interpolant l'ensemble des données en x=5.

    Le lien vers la doc officielle.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •