我試圖做一個三次樣條插值,並且出於某種原因,插值在它的中間下降。這非常神祕,我無法在網上找到任何類似事件。三次樣條插值中途退出
這是我的畢業論文,所以我排除了一些標籤等故意使其不明確,但所有相關的代碼如下。就上下文而言,這是一個天文相關的情節。
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()
,我從拿到該地塊出來這樣的,在插值明顯的差距:
而且在你想知道的情況下,這些都是在sum_all值和sum_can陣列(我想這並不重要,但以防萬一你想要的數字來自己繪製它):
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]
發生[0.606,1之間的差距.26194810e + 28]和[0.814,3.30328780e + 28]。如果我將間隔從0.001更改爲更高,則很明顯該圖不會實際中斷,而只會在y軸上低於0(但該圖是連續的)。那麼爲什麼這樣做?當然,這不是一個正確的插值?用我們的眼睛看,這顯然不是這兩點之間的良好插值關係。
任何提示或意見將不勝感激。提前感謝你!
我不明白的PGM的語言,但我假設你使用單三次樣條其中有4個控制點和'噸^ 3'爲最高階多項式的一部分,這樣的限制就高達2個顛簸和1個內點。你的數據集有更多的每個,所以要麼使用更高階的SPLINE(但往往會振盪)或使用[分段插值](http://stackoverflow.com/a/30438865/2521214)。 – Spektre
@Spektre'scipy.interpolate.CubicSpline'不會執行**分段**樣條插值。這意味着樣條的數量少於要插入的點的數量。因此,每對點可以有1個拐點。 – ImportanceOfBeingErnest
@ImportanceOfBeingErnest看起來像你得到它(+ 1)我沒有發現日誌規模.... – Spektre