J'ai un ensemble de points qui, lorsqu'ils sont connectés par des lignes droites, ressemblent à ceux indiqués ci-dessous :
Comme on le voit dans l'ajustement linéaire, les points auxquels les courbes sont ajustées sont censés être des extrema de la courbe, c'est-à-dire des maxima et des minima locaux.
Je veux ajuster une spline ou une courbe lisse à travers ces points de telle sorte que ces points restent les maxima/minima locaux. J'utilisais python, mais tout algorithme permettant de faire ce qui précède dans n'importe quel langage ou même en mathématiques simples est apprécié.
J'ai essayé d'utiliser InterpolatedUnivariateSpline
de scipy.interpolate
, et les résultats pour les degrés 2 et 3 sont affichés ci-dessous :
La courbe d'ordre 2 se rapproche du résultat souhaité, mais y a-t-il un moyen pour que je puisse imposer la condition que ces points restent les extrema ?
Pour ces données comme indiqué, PchpInterpolator ferait probablement l'affaire.
La raison en est que l'algorithme force une pente nulle au point de données si les pentes linéaires à gauche et à droite ont des signes différents.
Démo :
>>> from scipy.interpolate import pchip
>>> xx = np.arange(9)
>>> yy = np.cos(xx*2*np.pi/8) + 0.4*(-1)**(xx)
>>> pch = pchip(xx, yy)
>>> pch(xx, nu=1) # derivative at data points
array([-1.68578644, 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 1.68578644])
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots