je n'arrive pas a trouver de réponse satisfaisante et c'est pour ça que je viens vous demander de l'aide.
J'ai une fonction qui se présente comme ceci*:
[[2,3,4],[2,4,6]]
La première sous-liste représente les abscisses et la deuxième sous-
liste mes ordonnées. Je voudrais calculer la dérivée première de cette matrice.
Dois je faire quelque chose du genre : f'(x) = lim|h->0 (f(x+h) - f(x))/h
Faut il que je me dirige vers la dérivation automatique et donc utiliser scipy/numpy?
Si quelqu'un l'avait déjà fait et pouvait m'éclairer un peu...
Merci d'avance
O.
* c'est un exemple très simplifié et mes fonctions (data) comptent plutôt entre 65 et 1000 points
# Euh.... si j'ai pas trop rouillé en math...
Posté par ze_lionix (site web personnel) . Évalué à 5.
Donc j'utiliserais plutôt pour calculer la dérivée sur les 2 premiers point
f'(x) = (Y2 - Y1) / (X2 - X1)
La dérivée au 3ème point étant incalculable car tu n'as plus de point après....
Après pour les fonctions python je botte en touche....
Fuse : j'en Use et Abuse !
[^] # Re: Euh.... si j'ai pas trop rouillé en math...
Posté par ze_lionix (site web personnel) . Évalué à 2.
=> valeurs discrètes
=> sur les 2 premiers points
Fuse : j'en Use et Abuse !
# cf cours de calcul numérique
Posté par dave . Évalué à 3.
la dérivée numérique se calcule par le biais d'une formule à 2, ou 4 points.
Il faut faire un dl au voisinage du point considéré, à +2h, +h, -h, -2h (pour la formule à quatre points) ou +h et -h (pour la formule à deux points) et en déduire l'expression de la dérivée première en négligeant les termes du second ordre.
Le résultat numérique tend vers le résultat formel pour des h très petit, donc ça dépend du pas de discrétisation.
http://www.collegedusud.ch/app/applmaths/cours/interpolation(...)
Systemd, the bright side of linux, toward a better user experience and on the road to massive adoption of linux for the desktop.
# Réponse
Posté par benoar . Évalué à 5.
[^] # Re: Réponse
Posté par Olivier LEMAIRE (site web personnel) . Évalué à 2.
pas du tout, j'ai passé l'âge de faire des exos depuis bien longtemps. C'est vraiment pour le plaisir de faire du python...
Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée
[^] # Re: Réponse
Posté par Olivier LEMAIRE (site web personnel) . Évalué à 4.
# derivation
import numpy
from scipy.interpolate import interp1d
from scipy.misc import derivative
def first_derivative(list):
x = range(len(list))
f = interp1d(x,list)
dTemp = []
for i in range(1,len(list)-1):
dTemp.append(derivative(f,i))
return dTemp
def second_derivative(list):
fd = first_derivative(list)
print 'first derivative done'
fdd = first_derivative(fd)
print 'second derivative done'
J'ai fait un essai et ca marche plutôt pas mal. Pour info ceci me sert a déterminer l’abscisse du point d'inflexion d'une courbe en S.
Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée
[^] # Re: Réponse
Posté par Olivier LEMAIRE (site web personnel) . Évalué à 1.
def first_derivative(xlist,ylist):
f = interp1d(xlist,ylist)
dTemp = []
for i in xlist[1:len(xlist)-1]:
dTemp.append(derivative(f,float(i),n=2))
xlist = xlist[1:len(xlist)-1]
return xlist,dTemp
Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée
# Facile !
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 3.
f(x) = 2x - 2.
Donc ta dérivée, c'est
f'(x) = 2.
De rien, merci.
--[-> ]
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.