Main Content

griddata

2 次元または 3 次元の散布データの内挿

説明

vq = griddata(x,y,v,xq,yq) は、式 v = f(x,y) の表面で、ベクトル (x,y,v) 内の散布データを近似します。関数 griddata は、(xq,yq) で指定されたクエリ点に表面を内挿し、内挿された値 vq を返します。表面は常に、x および y によって定義されたデータ点を通過します。

vq = griddata(x,y,z,v,xq,yq,zq) は、式 v = f(x,y,z) の超平面で近似します。

vq = griddata(___,method) は、前述の構文の任意の入力引数を使用し、vq の計算に使用する内挿法を指定します。method には、"linear""nearest""natural""cubic"、または "v4" を指定できます。既定の手法は、"linear" です。

さらに、[Xq,Yq,vq] = griddata(x,y,v,xq,yq)[Xq,Yq,vq] = griddata(x,y,v,xq,yq,method) は、クエリ点のグリッド座標を含む XqYq を返します。

すべて折りたたむ

クエリ点からなる等間隔グリッドにランダムな散布データを内挿します。

-2.52.5 の間のランダムな 200 点で、関数をサンプリングします。結果のベクトル xy、および v には、散布サンプル点、およびその点におけるデータ値が含まれます。

rng default
xy = -2.5 + 5*rand([200 2]);
x = xy(:,1);
y = xy(:,2);
v = x.*exp(-x.^2-y.^2);

クエリ点のグリッドを定義し、散布データをそのグリッドに内挿します。

[xq,yq] = meshgrid(-2:.2:2, -2:.2:2);
vq = griddata(x,y,v,xq,yq);

グリッド データをメッシュとしてプロットし、散布データをドットとしてプロットします。

mesh(xq,yq,vq)
hold on
plot3(x,y,v,"o")
xlim([-2.7 2.7])
ylim([-2.7 2.7])

Figure contains an axes object. The axes object contains 2 objects of type surface, line. One or more of the lines displays its values using only markers

ランダムな散布点でサンプリングされた 4 次元関数の 3 次元スライスを内挿します。

4 次元関数 v(x,y,z)-11 の間のランダムな 2500 点でサンプリングします。ベクトル xy および z には非等間隔のサンプル点が含まれます。

x = 2*rand(2500,1) - 1; 
y = 2*rand(2500,1) - 1; 
z = 2*rand(2500,1) - 1;
v = x.^2 + y.^3 - z.^4;

範囲 [-1, 1] の "xy" 点をもつグリッドを作成し、z=0 を設定します。このグリッドに 2 次元クエリ点 (xq,yq,0) を内挿して、4 次元データ セット (x,y,z,v) の 3 次元内挿スライス (xq,yq,0,vq) を生成します。

d = -1:0.05:1;
[xq,yq,zq] = meshgrid(d,d,0);

このグリッドに散布データを内挿します。結果をプロットします。

vq = griddata(x,y,z,v,xq,yq,zq);
plot3(x,y,v,"ro")
hold on
surf(xq,yq,vq)
hold off

Figure contains an axes object. The axes object contains 2 objects of type line, surface. One or more of the lines displays its values using only markers

griddata により提供される複数の内挿アルゴリズムの結果を比較します。

50 個の散布点のサンプル データ セットを作成します。内挿法ごとの差異が鮮明になるように、点の数は人為的に少なく設定されています。

x = -3 + 6*rand(50,1);
y = -3 + 6*rand(50,1);
v = sin(x).^4 .* cos(y);

クエリ点のグリッドを作成します。

[xq,yq] = meshgrid(-3:0.1:3);

"nearest" 法、"linear" 法、"natural" 法および "cubic" 法を使用して、サンプル データを内挿します。比較のために結果をプロットします。

z1 = griddata(x,y,v,xq,yq,"nearest");
plot3(x,y,v,"mo")
hold on
mesh(xq,yq,z1)
title("Nearest Neighbor")
legend("Sample Points","Interpolated Surface","Location","NorthWest")

Figure contains an axes object. The axes object with title Nearest Neighbor contains 2 objects of type line, surface. One or more of the lines displays its values using only markers These objects represent Sample Points, Interpolated Surface.

z2 = griddata(x,y,v,xq,yq,"linear");
figure
plot3(x,y,v,"mo")
hold on
mesh(xq,yq,z2)
title("Linear")
legend("Sample Points","Interpolated Surface","Location","NorthWest")

Figure contains an axes object. The axes object with title Linear contains 2 objects of type line, surface. One or more of the lines displays its values using only markers These objects represent Sample Points, Interpolated Surface.

z3 = griddata(x,y,v,xq,yq,"natural");
figure
plot3(x,y,v,"mo")
hold on
mesh(xq,yq,z3)
title("Natural Neighbor")
legend("Sample Points","Interpolated Surface","Location","NorthWest")

Figure contains an axes object. The axes object with title Natural Neighbor contains 2 objects of type line, surface. One or more of the lines displays its values using only markers These objects represent Sample Points, Interpolated Surface.

z4 = griddata(x,y,v,xq,yq,"cubic");
figure
plot3(x,y,v,"mo")
hold on
mesh(xq,yq,z4)
title("Cubic")
legend("Sample Points","Interpolated Surface","Location","NorthWest")

Figure contains an axes object. The axes object with title Cubic contains 2 objects of type line, surface. One or more of the lines displays its values using only markers These objects represent Sample Points, Interpolated Surface.

厳密解をプロットします。

figure
plot3(x,y,v,"mo")
hold on
mesh(xq,yq,sin(xq).^4 .* cos(yq))
title("Exact Solution")
legend("Sample Points","Exact Surface","Location","NorthWest")

Figure contains an axes object. The axes object with title Exact Solution contains 2 objects of type line, surface. One or more of the lines displays its values using only markers These objects represent Sample Points, Exact Surface.

入力引数

すべて折りたたむ

サンプル点の座標。ベクトルとして指定します。xy、および z の対応する要素は、サンプル値 v が既知の場合に、点の xyz 座標を指定します。サンプル点は一意でなければなりません。

データ型: double

サンプル値。ベクトルとして指定します。v のサンプル値は、xy、および z のサンプル点に対応します。

v に複素数が含まれる場合、griddata は実数部と虚数部を個別に内挿します。

データ型: double
複素数のサポート: あり

クエリ点。ベクトルまたは配列として指定します。ベクトルまたは配列内の対応する要素は、クエリ点の xyz 座標を指定します。クエリ点は、griddata が内挿を実行する位置です。

  • クエリ点のグリッドを渡す場合に配列を指定します。ndgrid または meshgrid を使用して配列を作成します。

  • 散布点の集合を渡す場合にベクトルを指定します。

指定したクエリ点は、サンプル データ点の凸包内に存在しなければなりません。griddata は凸包外にあるクエリ点に対して NaN を返します。

データ型: double

内挿法。次の表の手法のいずれかとして指定します。

手法説明連続性
"linear"2 次元および 3 次元の内挿をサポートする、三角形分割に基づく線形内挿 (既定値)。C0
"nearest"2 次元および 3 次元の内挿をサポートする、三角形分割に基づく最近傍内挿。不連続
"natural"2 次元および 3 次元の内挿をサポートする、三角形分割に基づく自然な近傍内挿。この方法は線形と 3 次の間の効果的なトレードオフを提供します。C1 (サンプル ポイントを除く)
"cubic"2 次元の内挿のみをサポートする、三角形分割に基づく 3 次内挿。C2
"v4"

2 次元の内挿のみをサポートする、重調和スプライン内挿 (MATLAB® 4 griddata 法)。他の方法とは異なり、この内挿法は三角形分割に基づきません。

C2

データ型: char | string

出力引数

すべて折りたたむ

内挿値。ベクトルまたは配列として返されます。vq のサイズは、クエリ点の入力 xqyq、および zq のサイズに依存します。

  • 2 次元内挿の場合、xq および yq はクエリ点の mn 列のグリッドを指定し、vqmn 列の配列です。

  • 3 次元内挿の場合、xqyq および zq はクエリ点の m×n×p のグリッドを指定し、vqm×n×p の配列です。

  • xqyq、(および 3 次元内挿の場合は zq) が散布点を指定するベクトルの場合、vq は同じ長さのベクトルです。

"v4" を除くすべての内挿法で、出力 vq には、サンプル データの凸包外にあるクエリ点に対する NaN 値が含まれます。手法 "v4" は、場所に関係なくすべての点に対して同じ計算を実行します。

クエリ点のグリッド座標。ベクトルまたは行列として返されます。XqYq の形状は、xqyq をどのように指定するかによって決まります。

  • xq を行ベクトルとして、yq を列ベクトルとして指定する場合、griddata はこれらのグリッド ベクトルを使用して [Xq,Yq] = meshgrid(xq,yq) のフル グリッドを形成します。この場合、XqYq の出力は、クエリ点のフル グリッド座標を含む行列として返されます。

  • xqyq の両方が行ベクトルまたは列ベクトルである場合、Xq = xq であり Yq = yq です。

ヒント

  • griddata による散布データの内挿ではデータの Delaunay 三角形分割を使用するため、xy および z のスケーリング問題の影響を受けやすいことがあります。これが起きる場合は、normalize を使用してデータを再スケーリングし、結果を改善することができます。詳細については、大きさが異なるデータの正規化を参照してください。

拡張機能

バージョン履歴

R2006a より前に導入