Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Calcul scientifique
Calcul scientifique Forum d'entraide sur la programmation scientifique et bibliothèques associées (PIL, NumPy, SciPy, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/11/2012, 15h37   #1
Isabella83
Nouveau Membre du Club
 
Inscription : 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
Isabella83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2013, 08h44   #2
__dardanos__
Membre éclairé
 
Homme arnaud
Ingénieur développement logiciels
Inscription : janvier 2013
Messages : 185
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 : 185
Points : 329
Points : 329
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 ---")
__dardanos__ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2013, 14h01   #3
Alexis.M
Membre chevronné
 
Alexis
Doctorant en informatique
Inscription : juin 2009
Messages : 428
Détails du profil
Informations personnelles :
Nom : Alexis
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 428
Points : 700
Points : 700
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.
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2013, 16h32   #4
Isabella83
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 200
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 200
Points : 35
Points : 35
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 ?
Isabella83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2013, 16h44   #5
__dardanos__
Membre éclairé
 
Homme arnaud
Ingénieur développement logiciels
Inscription : janvier 2013
Messages : 185
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 : 185
Points : 329
Points : 329
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.
__dardanos__ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h52.


 
 
 
 
Partenaires

Hébergement Web