推断分散的数据
影响外推准确性的因素
scatteredInterpolant
提供用于逼近落在凸包外的点上的值的功能。的“线性”
外推法是基于凸包边界梯度的最小二乘近似。它为凸包外的查询点返回的值基于边界上的值和梯度。解决方案的质量取决于您对数据采样的好坏。如果你的数据是粗略抽样的,外推的质量很差。
此外,凸包边界附近的三角剖分可以有类似银条的三角形。这些三角形会影响你的外推结果,就像它们会影响内插结果一样。看到凸包附近插值结果较差更多信息。
您应该使用您对域外行为的知识,可视化地检查您的外推结果。
粗采样和细采样分散数据外推的比较
这个例子展示了如何插值同一抛物线函数的两个不同采样。结果还表明,样本点分布越好,外推结果越好。
创建围绕10个同心圆,间隔10度的点的径向分布。使用bsxfun
为了计算坐标,
而且
.
Theta = 0:10:350;C = cosd(theta);S = sind();R = 1:10;X1 = bsxfun(@times,r.',c);Y1 = bsxfun(@times,r.',s);图绘制(x1, y1,‘* b”)轴平等的
创建第二组更粗略分布的点集合。使用兰德
函数在范围[- 10,10]内创建随机抽样。
rng默认的;X2 = -10 + 20*兰特([25 1]);Y2 = -10 + 20*兰特([25 1]);图绘制(x2, y2),‘*’)
抽样抛物线函数,v (x, y)
,在这两个点上。
V1 = x1。²+ y1.²;V2 = x2。^2 + y2.^2;
创建一个scatteredInterpolant
对于每个抽样v (x, y)
.
F1 = scatteredInterpolant(x1(:),y1(:),v1(:));F2 = scatteredInterpolant(x2(:),y2(:),v2(:)));
创建超出每个域的查询点网格。
[xq,yq] = ndgrid(-20:20);
评估F1
然后画出结果。
图vq1 = F1(xq,yq);冲浪(xq yq vq1)
评估F2
然后画出结果。
图vq2 = F2(xq,yq);冲浪(xq yq vq2)
外推的质量不是很好F2
因为粗采样点在v2
.
三维数据的外推
这个例子展示了如何外推一个良好采样的三维网格数据集scatteredInterpolant
.查询点位于完全不在域内的平面网格上。
创建一个10乘10乘10的样本点网格。每个维度中的点都在,[- 10,10]的范围内。
[x,y,z] = ndgrid(-10:10);
抽样一个函数,v (x, y, z)在样本点处。
V = x.²+ y.²+ z.²;
创建一个scatteredInterpolant
,指定线性插值和外推。
F = scatteredInterpolant(x(:),y(:),z(:),v(:),“线性”,“线性”);
求插值函数对an的值x - y网格跨越范围,在海拔[-20,20],z= 15。
[xq,yq,zq] = ndgrid(-20:20,-20:20,15);vq = F(xq,yq,zq);图冲浪(xq, yq vq)
外推的结果很好,因为函数是很好的抽样。