我正在尝试使用matlab(Windows 8版本R2014a)使用样条插值计算积分。
我有3个函数值(对于x = 0,0.5,1)。
所以我有2个向量 - x
和y
包含函数的值,而我正在执行
cube_spline = spline(x,y);
coefficients = qube_spline.coefs
我希望得到2个多项式,每个都是3度,即我希望coefficients
是一个大小为2*4
的矩阵,但是为什么我会这样做呢?得到一个1*4
的矩阵,这意味着只有 1个多项式用于2个面板。
另一方面,如果我使用4个点(即3个面板),那么我coefficients
的大小为3*4
按预期,表示3个面板的 3个多项式。
我的问题是为什么matlab只返回2个面板样条的1个多项式,3个面板的3个多项式样条(或任何大于2的数字)?
答案 0 :(得分:1)
样条曲线有多种可能的边界条件,例如:
默认情况下spline
似乎正在使用 not-a-knot 条件。因此,对于三个点,只需要一个三次多项式来插值数据(如果不是非结点条件,则二次方也足够了),因此spline
没有理由返回两个间隔中的每一个都有一个样条曲线。然而,这不是一件坏事。
顺便说一下:如果你想要的只是内插值而不需要多项式系数,你可以选择interp1
。您可以以更简单的方式指定所需的不连续性。您可以选择:
'pchip': C^1
连续性。
保持形状的分段三次插值。查询点处的插值基于相邻网格点处的值的保持形状的分段三次插值。
integral(@(xs) interp1(x, y, xs, 'pchip'), xmin, xmax)
'样条': C^2
连续性。 (似乎使用与样条曲线相同的非结结束条件。)
使用not-a-knot结束条件进行样条插值。查询点处的内插值基于每个相应维度中的相邻网格点处的值的三次插值。
integral(@(xs) interp1(x, y, xs, 'spline'), xmin, xmax)