我试图在边界节点上实现一个零斜率(平面外推)的夹紧三次样条,但我无法得到预期的结果。
例如,设置:
x = [3 4 7 9];
y = [2 1 2 0.5];我可以用CSAPE函数得到分段多项式。
pp = csape(x,y,'variational');接下来,在0-10收益率范围内评估pp值,
xx = 0:0.1:10;
yy =ppval(pp,xx);
plot(xx,yy)

然而,这种方法并没有在3-9范围外实现平坦的外推(即对于x<3,y的所有值应该是2,对于x>9,所有的值应该是0.5)。
有没有办法达到预期的效果?
编辑:边界结点处的连续性应保持
发布于 2016-03-04 11:59:11
我认为没有必要使用csape,您可以只使用spline。来自spline的文档
如果Y是包含比x多两个值的向量,则使用Y中的第一个和最后一个值作为三次样条的端点斜率。
此外,样条允许直接获得插值的yy值,因此:
x = [3 4 7 9];
y = [2 1 2 0.5];
xx = 0:0.1:10;
yy = spline(x,[0 y 0], xx);
plot(xx,yy)这给了我下面的情节。

看看这个,在边界处的斜率是零(x=3和x=9),这就是我们对边界处梯度为零的“夹紧”样条的要求。如果您希望具有超越边界的零梯度,我建议只执行以下操作:
yy(xx<x(1)) = y(1);
yy(xx>x(length(x))) = y(length(y));给予:

编辑
这给了一个连续的y函数在末端结,但y'不是平滑的在末端结.如果您希望y‘是平滑的,您可以填充您的输入数组,并使用它作为您的spline函数的输入。这会给你一些振荡,尽管如下所示,这可能是你想要的,也可能不是。
% Spline on padded input arrays
x = [0 1 2 3 4 7 9 10 11 12];
y = [2 2 2 2 1 2 0.5 0.5 0.5 0.5];
yy = spline(x,y, xx);

https://stackoverflow.com/questions/35793277
复制相似问题