主要内容

scatteredInterpolant

插值2-D或3-D分散数据

描述

使用scatteredInterpolant的2-D或3-D数据集上进行插值分散的数据scatteredInterpolant返回interpolantF对于给定的数据集。你可以评估F在一组查询点上,例如(yq xq)在2-D中,产生插值值vq = F(xq,yq)

使用griddedInterpolant网格数据

创建

描述

F= scatteredInterpolant创建一个空的分散数据插值对象。

例子

F= scatteredInterpolant (xgydF4y2BaygydF4y2Bav创建适合窗体表面的插值函数vFxgydF4y2BaygydF4y2Ba.向量xgydF4y2Ba而且ygydF4y2Ba指定(x, y)样本点的坐标。v向量包含与点相关的样本值吗(x, y)

例子

F= scatteredInterpolant (xgydF4y2BaygydF4y2Bazv创建一个3-D插值的形式vFxgydF4y2BaygydF4y2Baz).

例子

F= scatteredInterpolant (Pv将样本点的坐标指定为数组。一排排的P包含(xgydF4y2BaygydF4y2Ba)或(xgydF4y2BaygydF4y2Baz)中的值的坐标v

例子

F= scatteredInterpolant (___方法指定插值方法:“最近的”“线性”,或“天然”.指定方法作为前三种语法中的最后一个输入参数。

例子

F= scatteredInterpolant (___方法ExtrapolationMethod指定插值和外推方法。通过方法而且ExtrapolationMethod作为前三种语法中的最后两个输入参数。

  • 方法可以是:“最近的”“线性”,或“天然”

  • ExtrapolationMethod可以是:“最近的”“线性”,或“没有”

输入参数

全部展开

样本点,指定为相同大小的向量v.样本点应该是唯一的。但是,如果样本点包含重复项,scatteredInterpolant显示警告并将副本合并为单个点。

数据类型:

样本点数组,指定为——- - - - - -n矩阵,是多少分和n是点所在空间的维数。每行P包含(xgydF4y2BaygydF4y2Ba)或(xgydF4y2BaygydF4y2Baz)样本点的坐标。样本点应该是唯一的。但是,如果样本点包含重复项,scatteredInterpolant显示警告并将副本合并为单个点。

数据类型:

采样值,被指定为一个向量,它定义了采样点上的函数值,vFxgydF4y2BaygydF4y2Baz

scatteredInterpolant不忽视v,因此在这些采样点附近的插值结果也是

数据类型:

插值方法,指定为这些选项之一。

方法 描述 连续性
“线性”(默认)

线性插值

C0
“最近的”

最近邻插值

不连续
“天然”

自然邻居插值

C1(样本点除外)

外推方法,指定为这些选项之一。

ExtrapolationMethod 描述
“线性”

基于边界梯度的线性外推。默认时方法“线性”“天然”

“最近的”

最近邻推断。该方法计算边界上最近邻居的值。默认时方法“最近的”

“没有”

没有外推。的凸包之外的任何查询返回

属性

全部展开

样本点,用矩阵表示。矩阵的大小是——- - - - - -2——- - - - - -3.代表2-D或3-D空间中的点。每行包含(xgydF4y2BaygydF4y2Ba)或(xgydF4y2BaygydF4y2Baz)唯一采样点的坐标。里面的行中的函数值对应

数据类型:

函数值在采样点,指定为值的向量与每一点

scatteredInterpolant不忽视,因此在这些采样点附近的插值结果也是

数据类型:

插补方法,指定为“线性”“最近的”,或“天然”.看到方法有关这些方法的描述。

外推方法,指定为“最近的”“线性”,或“没有”.看到ExtrapolationMethod有关这些方法的描述。

数据类型:

使用

描述

使用scatteredInterpolant要创建interpolantF.然后你可以评估F在特定的点上使用下列语法:

Vq = F(Pq)指定矩阵中的查询点魁人党.每一行魁人党包含查询点的坐标。

Vq = F(Xq,Yq)而且Vq = F(Xq,Yq,Zq)将查询点指定为两个或三个大小相等的矩阵。

Vq = F({xq,yq})而且Vq = F({xq,yq,zq})将查询点指定为网格向量.当您想查询一个大型点网格时,使用此语法可以节省内存。

例子

全部折叠

定义一些样本点并计算这些点上的三角函数值。这些点是插值器的采样值。

T = linspace(3/4*pi,2*pi,50)';X = [3*cos(t);2 * cos (t);0.7 * cost);Y = [3*sin(t);2 * sin (t);0.7 * sin (t)];V = repelem([-0.5;1.5;2)、长度(t));

创建插值。

F = scatter interpolant (x,y,v);

计算查询位置的插值值(xqyq).

Tq = linspace(3/4*pi+0.2,2*pi-0.2,40)';Xq = [2.8*cos(tq);1.7 * cos (tq操作);因为(tq)];Yq = [2.8*sin(tq);1.7 * sin (tq操作);sin (tq)];vq = F(xq,yq);

画出结果。

plot3 (x, y, v,“。”xq yq,矢量量化,“。”)、网格标题(线性插值的)包含(“x”), ylabel (“y”), zlabel (“值”)传说(样本数据的“插值查询数据”“位置”“最佳”

图中包含一个轴对象。标题为Linear Interpolation的axis对象包含2个类型为line的对象。这些对象表示样本数据,插值查询数据。

为一组分散的样本点创建一个插值器,然后在一组三维查询点处计算插值器。

定义200个随机点并对一个三角函数进行抽样。这些点是插值器的采样值。

rng默认的;P = -2.5 + 5*rand([200 3]);v = sin(P(:,1))。²+ p(:,2)。^2+ p (:,3).^2)./(p (:,1).^2+ p(:,2).²+ p (:,3).^2);

创建插值。

F = scatter interpolant (P,v);

计算查询位置的插值值(xqyq的zq).

[xq,yq,zq] = meshgrid(-2:0.25:2);vq = F(xq,yq,zq);

结果的图切片。

Xslice = [-.5,1,2];Yslice = [0,2];Zslice = [-2,0];片(xq, yq zq、vq xslice, yslice, zslice)

图中包含一个轴对象。axis对象包含7个surface类型的对象。

中的元素属性时,可以更改样本点上的值。当你计算新的插值时,你会立即得到结果因为原来的三角剖分没有改变。

创建50个随机点,并对指数函数进行抽样。这些点是插值器的采样值。

rng (“默认”) x = -2.5 + 5*rand([50 1]);Y = -2.5 + 5*rand([50 1]);V = x.*exp(-x.²-y.²);

创建插值。

F = scatter interpolant (x,y,v)
F = scatteredInterpolant with properties: Points: [50x2 double] Values: [50x1 double]方法:'linear' ExtrapolationMethod: 'linear'

求插值值(1.40, 1.90)

F (1.40, 1.90)
Ans = 0.0069

改变插值样本值,并在同一点重新计算插值值。

Vnew = x.²+ y.²;F.Values = vnew;F (1.40, 1.90)
Ans = 5.6491

使用groupsummary在调用之前消除重复的采样点并控制它们的组合方式scatteredInterpolant

创建一个200 × 3的样本点位置矩阵。在最后五行中添加重复的点。

P = -2.5 + 5*rand(200,3);P(197:200,:) = repmat(P(196,:),4,1);

在样本点上创建一个随机值的向量。

V = rand(size(P,1),1);

如果你试图使用scatteredInterpolant对于重复的样本点,它抛出一个警告并取相应值的平均值V产生一个唯一的点。但是,您可以使用groupsummary在创建插值之前消除重复点。如果您想要使用除求平均值以外的其他方法组合重复点,这将特别有用。

使用groupsummary以消除重复的样本点,并保留的最大值V在重复采样点位置。指定样本点矩阵作为分组变量,对应的值作为数据。

[V_unique,P_unique] = groupsummary(V,P,@max);

由于分组变量有三列,groupsummary返回唯一的组P_unique作为单元格数组。将单元格数组转换回矩阵。

P_unique = [P_unique{:}];

创建插值。因为样本点现在是唯一的,scatteredInterpolant不抛出警告。

I = scatteredInterpolant(P_unique,V_unique);

比较几种不同的插值算法的结果scatteredInterpolant

创建一个包含50个分散点的样本数据集。点的数量人为地很小,以突出插补方法之间的差异。

X = -3 + 6*rand(50,1);Y = -3 + 6*rand(50,1);V = sinx。^4 .* cos(y);

创建插值和查询点网格。

F = scatter interpolant (x,y,v);[xq,yq] = meshgrid(-3:0.1:3);

方法绘制结果“最近的”“线性”,“天然”方法。每次插值方法更改时,都需要重新查询插值器以获得更新的结果。

F.Method =“最近的”;vq1 = F(xq,yq);plot3 (x, y, v,“莫”)举行网格(xq yq vq1)标题(“最近邻”)传说(采样点的插值结果的“位置”“西北”

图中包含一个轴对象。标题为“最近邻”的axis对象包含line、surface类型的2个对象。这些对象代表样本点,插值曲面。

F.Method =“线性”;vq2 = F(xq,yq);图plot3 (x, y, v,“莫”)举行网格(xq yq vq2)标题(“线性”)传说(采样点的插值结果的“位置”“西北”

图中包含一个轴对象。标题为Linear的axis对象包含2个类型为line、surface的对象。这些对象代表样本点,插值曲面。

F.Method =“天然”;vq3 = F(xq,yq);图plot3 (x, y, v,“莫”)举行网格(xq yq vq3)标题(“天然的邻居”)传说(采样点的插值结果的“位置”“西北”

图中包含一个轴对象。标题为“自然邻居”的axis对象包含line、surface类型的2个对象。这些对象代表样本点,插值曲面。

画出精确的解。

图plot3 (x, y, v,“莫”)举行网格(xq yq,罪(xq)。^4 .* cos(yq))精确解的)传说(采样点的准确的表面的“位置”“西北”

图中包含一个轴对象。标题为Exact Solution的axis对象包含两个类型为line、surface的对象。这些对象代表样本点,精确曲面。

使用最近邻外推法在凸包外的单个点上查询插值。

定义一个由200个随机点组成的矩阵,并对一个指数函数进行抽样。这些点是插值器的采样值。

rng (“默认”) P = -2.5 + 5*rand([200 2]);x = P(:,1);y = P(:,2);V = x.*exp(-x.²-y.²);

创建插值,指定线性插值和最近邻外推。

F = scatter interpolant (P,v,“线性”“最近的”
F = scattered插值属性:点:[200x2 double]值:[200x1 double]方法:'线性' ExtrapolationMethod: '最近'

求凸包外的插值值。

vq = F(3.0,-1.5)
Vq = 0.0029

禁用外推并进行评估F在同一点上。

F.ExtrapolationMethod =“没有”;vq = F(3.0,-1.5)
vq = NaN

更多关于

全部展开

提示

  • 求值更快scatteredInterpolant对象F在许多不同的查询点集合上使用函数分别计算插值griddatagriddatan.例如:

    快速创建插值F和评估多次F = scatter interpolant (X,Y,V) v1 = F(Xq1,Yq1) v2 = F(Xq2,Yq2)%使用griddata单独计算插值速度较慢v1 = griddata(X,Y,V,Xq1,Yq1) v2 = griddata(X,Y,V,Xq2,Yq2)
  • 为了改变插补样本值或插补方法,更新插补对象的属性更为有效F而不是去创造一个新的scatteredInterpolant对象。当你更新时方法,输入数据的底层Delaunay三角测量不会改变,因此您可以快速计算新的结果。

  • 离散数据插值scatteredInterpolant使用数据的Delaunay三角测量,因此可以对样本点的缩放问题敏感xgydF4y2BaygydF4y2Baz,或P.当发生这种情况时,您可以使用正常化调整数据规模,改善结果。看到将不同量级的数据规范化获取更多信息。

算法

scatteredInterpolant使用分散样本点的Delaunay三角剖分来进行插值[1]

参考文献

阿米德罗,艾萨克。电子成像系统的分散数据插值方法综述电子成像杂志.第11卷第2期,2002年4月,第157-176页。

扩展功能

版本历史

在R2013a中引入

Baidu
map