用3个值计算matlab中的三次样条积分

Calculate cubic spline integral in matlab with 3 values

我正在尝试使用 matlab 样条插值法计算积分(windows 8 上的 R2014a 版本)。

我有函数的 3 个值(对于 x=0,0.5,1)。

所以我有 2 个向量 - xy 包含函数的值,我正在执行

cube_spline = spline(x,y);
coefficients = qube_spline.coefs

我期望得到 2 个多项式,每个都是 3 次,即我期望 coefficients 是一个大小为 2*4 的矩阵,但不知为什么我得到了一个矩阵即 1*4,这意味着 2 个面板只有 1 个多项式

另一方面,如果我使用 4 个点(即 3 个面板),那么我得到 coefficients 的大小是 3*4 正如预期的那样,这意味着 3 个面板的 3 个多项式

我的问题是为什么 matlab return 只有 1 个多项式用于 2 个面板样条,而 3 个多项式用于 3 个面板样条(或任何大于 2 的数)?

样条有多种可能的边界条件,例如:

  • 边界上的二阶导数为零
  • 给定边界上的一阶导数
  • 周期性条件,即边界上的一阶和二阶导数相同
  • not-a-knot:取最外面的三个点指定边界条件

似乎 spline 默认使用 not-a-knot 条件。因此,对于三个点,只需要一个三次多项式来插入您的数据(如果不是非结条件,则二次多项式也足够了),因此没有理由 spline 到 return 两个区间各一个样条。然而,这并不是一件坏事。

顺便说一下:如果您只想对值进行插值而不需要多项式系数,则可以改用 interp1。您可以以更简单的方式指定您想要哪种不连续性。您可以选择:

'pchip': C^1连续性。

Shape-preserving piecewise cubic interpolation. The interpolated value at a query point is based on a shape-preserving piecewise cubic interpolation of the values at neighboring grid points.

integral(@(xs) interp1(x, y, xs, 'pchip'),  xmin, xmax)

'spline': C^2连续性。 (似乎使用与样条相同的非结结束条件。)

Spline interpolation using not-a-knot end conditions. The interpolated value at a query point is based on a cubic interpolation of the values at neighboring grid points in each respective dimension.

integral(@(xs) interp1(x, y, xs, 'spline'), xmin, xmax)