样条
三次样条数据插值
描述
例子
正弦数据的样条插值
使用样条
在间隔不均匀的采样点上插值正弦曲线。
X = [0 1 2.5 3.6 5 7 8.1 10];y = sin (x);xx = 0: .25:10;yy =花键(x, y, xx);情节(x, y,“o”、xx和yy)
具有指定端点斜率的样条插值
当端点斜率已知时,使用夹紧或完全样条插值。为此,您可以指定值向量 用两个额外的元素,一个在开始,一个在结束,来定义端点斜率。
创建一个数据向量 另一个向量 -坐标的数据。
x = 4:4,Y = [0.15 1.12 2.36 2.36 1.46 .49 .06 0];
插值数据样条
然后画出结果。用两个额外的值指定第二个输入y [0 0]
表示端点斜率都为零。使用ppval
计算插值区间中超过101点的样条拟合。
Cs =样条(x,[0 y 0]);xx = linspace (4101);情节(x, y,“o”xx, xx, ppval (cs),“- - -”);
三次样条外推法
通过外推数据集来预测人口增长。
创建两个向量表示1900 - 1990年的人口普查年份(t
)和相应的美国人口以百万计(p
).
t = 1900:10:1990;P = [75.995 91.972 105.711 123.203 131.669 ....150.697 179.323 203.212 226.505 249.633];
用三次样条对2000年的人口进行外推和预测。
样条(t, p, 2000)
ans = 270.6060
角数据的样条插值
用五个数据点生成一个圆的图y(:, 2),…,y (:, 6)
标有o的。矩阵y
包含的列比包含的多两列x
.因此,样条
使用y (: 1)
而且y(:,结束)
endslopes。圆在点(1,0)开始和结束,所以这个点被画了两次。
x =π* (0:.5:2);Y = [0 1 0 -1 0 1 0;1 0 1 0 -1 0 1];页=花键(x, y);Yy = ppval(pp, linspace(0,2*pi,101));情节(yy (1:), yy (2:)“- b”y (2:5), y (2, 2:5)”或“)轴平等的
正弦和余弦数据的样条插值
使用样条在更细的网格上采样函数。
为0到1之间的一些值生成正弦和余弦曲线。使用样条插值在更细的网格上采样函数。
x = 0: .25:1;Y = (sin (x);cos (x)];xx = 0: .1:1;YY =花键(x, Y, xx);情节(x, Y (1:)“o”, xx和YY (1:)“- - -”)举行在:情节(x, Y (2),“o”:, xx和YY (2),“:”)举行从
数据插值样条
,pchip
,makima
的插值结果进行比较样条
,pchip
,makima
两个不同的数据集。这些函数都执行不同形式的分段三次埃尔米特插值。每个函数计算插值函数斜率的方式不同,这导致当底层数据有平坦区域或波动时,会有不同的行为。
在连接平坦区域的样本数据上比较插补结果。创建向量x
这些点的函数值y
,以及查询点xq
.在查询点上计算插值样条
,pchip
,makima
.在查询点绘制插值函数值以进行比较。
x =三3;Y = [-1 -1 -1 0 1 1 1];xq1 = 3: .01:3;p = pchip (x, y, xq1);s =花键(x, y, xq1);m = makima (x, y, xq1);情节(x, y,“o”xq1, p,“- - -”xq1年代,“-”。xq1, m,“——”)传说(采样点的,“pchip”,样条的,“makima”,“位置”,“东南”)
在这种情况下,pchip
而且makima
具有类似的行为,它们避免过冲,并可以准确地连接平面区域。
使用振荡样本函数进行第二次比较。
x = 0:15;y = besselj (1, x);xq2 = 0:0.01:15;p = pchip (x, y, xq2);s =花键(x, y, xq2);m = makima (x, y, xq2);情节(x, y,“o”xq2, p,“- - -”xq2年代,“-”。xq2, m,“——”)传说(采样点的,“pchip”,样条的,“makima”)
当函数是振荡的,样条
而且makima
捕捉点之间的移动比pchip
它在局部极值附近被猛烈地压平。
输入参数
x
- - - - - -x坐标
向量
x-coordinates,指定为一个向量。向量x
指定数据所处的点y
是给定的。的元素x
必须是唯一的。
数据类型:单
|双
y
- - - - - -函数值在x坐标
向量|矩阵|数组
函数值在x-coordinates,指定为数值向量、矩阵或数组。x
而且y
通常长度相同,但是y
Also可以比。多两个元素x
指定endslopes。
如果y
是一个矩阵或数组,那么最后一个维度的值,y(::,…,j)
,作为要匹配的值x
.在这种情况下,最后一个维度y
长度一定和x
或者恰好多两个元素。
三次样条的端点斜率遵循以下规则:
如果
x
而且y
是相同大小的向量,则使用非结结束条件。如果
x
或y
是一个标量,那么它将展开为与另一个具有相同的长度,并使用非结结束条件。如果
y
是否一个包含两个以上值的向量x
条目,那么样条
中的第一个和最后一个值y
作为三次样条的端点斜率。例如,如果y
是一个向量,则:y (2: end-1)
给出每一点的函数值x
y (1)
给出区间开始处的斜率分钟(x)
y(结束)
给出区间端点处的斜率马克斯(x)
类似地,如果
y
是矩阵还是N
维数组大小(y, N)
等于长度(x) + 2
,那么:y(::,…,j + 1)
给出每一点的函数值x
为j = 1:长度(x)
y (:,:,...:, 1)
给出位于的区间开始处的斜率分钟(x)
y (:,:,...:, 结束)
给出了位于的区间末端的斜率马克斯(x)
数据类型:单
|双
xq
- - - - - -查询点
标量|向量|矩阵|数组
查询点,指定为标量、向量、矩阵或数组。在xq
是x插值函数值的坐标yq
计算样条
.
数据类型:单
|双
输出参数
年代
-查询点的插值值
标量|向量|矩阵|数组
查询点上的插值值,作为标量、向量、矩阵或数组返回。
的大小年代
的大小有关吗y
而且xq
:
如果
y
是向量吗年代
尺寸和xq
.如果
y
数组的大小纽约=大小(y)
,则适用以下条件:如果
xq
那么是标量还是向量呢大小(年代)
返回纽约(1:end-1)长度(xq)]
.如果
xq
是数组吗大小(年代)
返回纽约(1:end-1)大小(xq)]
.
页
——分段多项式
结构
分段多项式,作为结构返回。将此结构与ppval
函数在一个或多个查询点上求分段多项式的值。这个结构有这些字段。
场 | 描述 |
---|---|
形式 |
|
休息时间 |
向量的长度 |
系数 |
|
块 |
数量的碎片, |
订单 |
多项式的阶数 |
昏暗的 |
维度的目标 |
因为多项式系数系数
如果是每个区间的局部系数,则必须减去对应的结区间的端点才能使用传统多项式方程中的系数。换句话说,对于系数(a, b, c, d)
的时间间隔(x1, x2)
,对应的多项式为
提示
方法也可以执行样条插值
interp1
使用命令执行xq interp1 (x, y,样条)
.而样条
对输入矩阵的行进行插值,interp1
对输入矩阵的列执行插值。
算法
一个三对角线性系统(可能有几个右手边)被求解为描述组成插值样条的各种三次多项式的系数所需的信息。样条
使用的功能ppval
,mkpp
,unmkpp
.这些例程形成了一组用于处理分段多项式的函数。要访问更高级的功能,请参见interp1
或曲线拟合工具箱™样条函数。
参考文献
德布尔,卡尔。样条曲线的实用指南.斯普林格-弗拉格,纽约:1978年。
扩展功能
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
输入
x
必须严格增加。代码生成不会删除
y
条目南
值。对于无限端点斜率,代码生成不会报告错误
y
.方法生成的代码
页=花键(x, y)
语法,那么你就不能输入页
到ppval
在MATLAB函数®.创建一个MATLAB页
结构从页
由代码生成器创建的结构:在代码生成中,使用
unmkpp
将分段多项式的细节返回到MATLAB中。在MATLAB中,使用
mkpp
创建页
结构。
如果你提供
xq
,如果y
具有可变大小且不是可变长度的向量,则生成的代码中向量输出的方向可能与MATLAB中的方向不匹配。
线程环境
在后台使用MATLAB®运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。有关更多信息,请参见在线程环境中运行MATLAB函数.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
版本历史
之前介绍过的R2006a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。