J'essaie d'effectuer une interpolation de spline cubique et, pour une raison quelconque, l'interpolation tombe en son milieu. C'est très mystérieux et je ne trouve aucune mention d'occurrences similaires partout en ligne. Ceci est pour ma dissertation donc j'ai exclu certaines étiquettes etc. pour le garder obscurément intentionnellement, mais tout le code pertinent est comme suit. Pour le contexte, ceci est un complot lié à l'astronomie.L'interpolation de spline cubique est supprimée à mi-chemin
from scipy.interpolate import CubicSpline
import numpy as np
import matplotlib.pyplot as plt
W = np.array([0.435,0.606,0.814,1.05,1.25,1.40,1.60])
sum_all = np.array([sum435,sum606,sum814,sum105,sum125,sum140,sum160])
sum_can = np.array([sumc435,sumc606,sumc814,sumc105,sumc125,sumc140,sumc160])
fall = CubicSpline(W,sum_all)
newallx=np.arange(0.435,1.6,0.001)
newally=fall(newallx)
fcan = CubicSpline(W,sum_can)
newcanx=np.arange(0.435,1.6,0.001)
newcany=fcan(newcanx)
#----plot
plt.plot(newallx,newally)
plt.plot(newcanx,newcany)
plt.plot(W,sum_all,marker='o',color='r',linestyle='')
plt.plot(W,sum_can,marker='o',color='b',linestyle='')
plt.yscale("log")
plt.ylabel("Flux S$_v$ [erg s$^-$$^1$ cm$^-$$^2$ Hz$^-$$^1$]")
plt.xlabel("Wavelength [n$\lambda$]")
plt.show()
L'intrigue que je reçois de cela vient comme ça, avec un écart clair dans l'interpolation:
Et au cas où vous vous demandez, ce sont les valeurs du sum_all et les tableaux sum_can (je suppose qu'il n'a pas d'importance, mais juste au cas où vous voulez que les chiffres pour tracer vous-même):
sum_all:
[ 3.87282732e+32 8.79993191e+32 1.74866333e+33 1.59946687e+33
9.08556547e+33 6.70458731e+33 9.84832359e+33]
can_all:
[ 2.98381061e+28 1.26194810e+28 3.30328780e+28 2.90254609e+29
3.65117723e+29 3.46256846e+29 3.64483736e+29]
L'écart passe entre [0.606,1 .26194810e + 28] et [0,814,3,30328780e + 28]. Si je change les intervalles de 0.001 à quelque chose de plus élevé, il est évident que le tracé ne se décompose pas réellement mais tombe simplement en dessous de 0 sur l'axe des ordonnées (mais l'intrigue est continue). Alors pourquoi fait-il cela? Sûrement que ce n'est pas une interpolation correcte? Juste en regardant avec nos yeux, ce n'est clairement pas une connexion bien interpolée entre ces deux points.
Tous les conseils ou commentaires seraient extrêmement appréciés. Merci d'avance!
Je ne comprends pas la langue pgm mais je suppose que vous utilisez seul SPLINE cube qui a 4 points de contrôle et 't^3' dans le cadre polynôme le plus élevé de l'ordre afin que ne la limite jusqu'à 2 bosses et 1 point inflex. votre ensemble de données a plus de chacun donc soit utiliser SPLINE d'ordre supérieur (mais qui a tendance à osciller aussi) ou utiliser [interpolation par morceaux] (http://stackoverflow.com/a/30438865/2521214). – Spektre
@Spektre 'scipy.interpolate.CubicSpline' effectue une interpolation de spline ** par morceaux. Cela signifie que le nombre de splines est inférieur au nombre de points à interpoler. Vous pouvez donc avoir 1 point d'inflexion par paire de points. – ImportanceOfBeingErnest
@ImportanceOfBeingErnest ressemble à ce que vous avez (+1) Je n'ai pas repéré l'échelle logarithmique .... – Spektre