我有一些数据点,我喜欢用三次 b 样条拟合来近似。在另一个程序中,我喜欢仅使用拟合的结和系数来插入一些点。这意味着我需要自己编写代码来评估给定节点和系数的点。使用这个 wiki 页面,我已经能够正确评估各个点,结果是
knots,coeff,n=scipy.interpolate.splrep(x,y)
奇怪的是,我需要删除数组中的第一个和最后 3 个条目才能使代码正常工作(注意:前 4 个和最后 4 个节条目是相同的,因此会产生除以 0 的错误)。有人知道为什么会有这些重复的条目吗?除了删除这些条目之外,wiki 页面中的等式也有效。从结果来看
knots=[ 15., 15., 15., 15., 75., 105., ..., 2895., 2925., 2985., 2985., 2985., 2985.]
coeffs=[ 1.87979615, 1.54132042, 1.46751212, 1.31223359, 1.34208367, 1.2181689, ..., 0.99327417,0.5866527, 0., 0., 0., 0. ]
我得到了数据点的一个很好的近似值。
但是,当我也想使用权重时,我注意到“结”和“系数”数组看起来很奇怪。谁知道我需要如何解释样条拟合函数的结果?目前我得到
knots=[15.,15.,15.,15.,2985.,2985.,2985.,2985.]
coeff=[ 1.48725714,0.3513811,0.71970619,0.66119226,0.,0.,0.,0. ]
或者这甚至是一个错误?
理想情况下,我喜欢有一些代码(C/C++,python)在给定函数的节点和系数的情况下评估各个点。