假设我在 python 中有两个数组,我希望获得(并实际使用)这些点之间的三次样条插值。(即:我希望集成该功能)。我非常喜欢使用 numpy scipy 的方法。
我知道scipy.interpolate.interp1d。但是,这只允许我评估要点,例如非常简单的功能:
现在我可以做一些简单的事情:
import numpy as np
import scipy.interpolate
import matplotlib.pyplot as plt
y = np.array([0,2,3,4,8,10,12,12,12,10,9,8,7,1,0,0,1,2])
x = np.array(range(len(y)))
xvals = np.linspace(0, len(y)-1, len(y)*100, endpoint = False)
func = scipy.interpolate.interp1d(x, y, kind = "cubic")
yvals = func(xvals)
plt.plot(xvals,yvals)
plt.plot(x,y, "o")
但是我希望进一步处理这个三次样条(即我需要得到积分)。对于手动操作我需要得到因素,所以:
a_i * x^3 + b_i * x^2 + c_i * x + d_i where i goes from 0 to n/3
(n = 元素的数量 - 这只是第 i 个三次的定义)
因此,我期望描述所有样条的元组(或二维数组)列表。- 或者一种获得第 i 个三次方的方法,并且真的,真的很想得到一个方便的“x-to-i”来找到我目前在哪个样条线。
(当然,后一个问题是在排序列表中简单地搜索大于引用的第一个值——如果需要,我可以很容易地手动完成)。