首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平面外推的三次样条曲线

平面外推的三次样条曲线
EN

Stack Overflow用户
提问于 2016-03-04 10:11:17
回答 1查看 987关注 0票数 1

我试图在边界节点上实现一个零斜率(平面外推)的夹紧三次样条,但我无法得到预期的结果。

例如,设置:

代码语言:javascript
复制
x = [3 4 7 9];
y = [2 1 2 0.5];

我可以用CSAPE函数得到分段多项式。

代码语言:javascript
复制
pp = csape(x,y,'variational');

接下来,在0-10收益率范围内评估pp值,

代码语言:javascript
复制
xx = 0:0.1:10;
yy =ppval(pp,xx);
plot(xx,yy) 

然而,这种方法并没有在3-9范围外实现平坦的外推(即对于x<3,y的所有值应该是2,对于x>9,所有的值应该是0.5)。

有没有办法达到预期的效果?

编辑:边界结点处的连续性应保持

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 11:59:11

我认为没有必要使用csape,您可以只使用spline。来自spline的文档

如果Y是包含比x多两个值的向量,则使用Y中的第一个和最后一个值作为三次样条的端点斜率。

此外,样条允许直接获得插值的yy值,因此:

代码语言:javascript
复制
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),这就是我们对边界处梯度为零的“夹紧”样条的要求。如果您希望具有超越边界的零梯度,我建议只执行以下操作:

代码语言:javascript
复制
yy(xx<x(1)) = y(1);
yy(xx>x(length(x))) = y(length(y));

给予:

编辑

这给了一个连续的y函数在末端结,但y'不是平滑的在末端结.如果您希望y‘是平滑的,您可以填充您的输入数组,并使用它作为您的spline函数的输入。这会给你一些振荡,尽管如下所示,这可能是你想要的,也可能不是。

代码语言:javascript
复制
% 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);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35793277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档