Main Content

griddata

2차원 또는 3차원 산점 데이터 보간하기

설명

예제

vq = griddata(x,y,v,xq,yq)는 형식 v = f(x,y)의 곡면을 벡터 (x,y,v)의 산점 데이터로 피팅합니다. griddata 함수는 (xq,yq)로 지정된 쿼리 점에서 곡면을 보간하고 보간된 값 vq를 반환합니다. 곡면은 항상 xy로 정의된 데이터 점을 통과합니다.

예제

vq = griddata(x,y,z,v,xq,yq,zq)는 형식 v = f(x,y,z)의 초곡면(Hypersurface)을 피팅합니다.

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개의 임의의 점에서 함수를 샘플링합니다. 결과로 생성되는 벡터 x, y, 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차원 슬라이스를 보간합니다.

-11 사이의 임의의 점 2,500개에서 4차원 함수 v(x,y,z)를 샘플링합니다. 벡터 x, y, 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.

엄밀해(Exact Solution)를 플로팅합니다.

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.

입력 인수

모두 축소

샘플 점 좌표로, 벡터로 지정됩니다. x, y, z의 해당 요소는 샘플 값 v에 대응하는 점의 xyz 좌표를 지정합니다. 샘플 점은 고유해야 합니다.

데이터형: double

샘플 값으로, 벡터로 지정됩니다. v의 샘플 값은 x, y, z의 샘플 점에 대응합니다.

v에 복소수가 있는 경우 griddata는 실수부와 허수부를 각각 별도로 보간합니다.

데이터형: double
복소수 지원 여부:

쿼리 점으로, 벡터나 배열로 지정됩니다. 벡터나 배열의 해당 요소는 쿼리 점의 xyz 좌표를 지정합니다. 쿼리 점은 griddata가 보간을 수행하는 위치입니다.

  • 쿼리 점의 그리드를 전달하려면 배열로 지정해야 합니다. ndgrid 또는 meshgrid를 사용하여 배열을 생성합니다.

  • 산점의 모음을 전달하려면 벡터로 지정해야 합니다.

지정된 쿼리 점은 샘플 데이터 점의 볼록 껍질(Convex Hull) 내부에 있어야 합니다. griddata는 볼록 껍질 외부의 쿼리 점에 대해서는 NaN을 반환합니다.

데이터형: double

보간 방법으로, 아래 표의 방법 중 하나로 지정됩니다.

방법설명연속성
"linear"2차원과 3차원 보간을 지원하는, 삼각분할 기반 선형 보간(디폴트 값).C0
"nearest"2차원 및 3차원 보간을 지원하는, 삼각분할 기반 최근접이웃 보간.불연속
"natural"2차원 및 3차원 보간을 지원하는, 삼각분할 기반 자연 이웃 보간(Natural Neighbor Interpolation). 이 방법은 선형 보간과 3차 보간 간의 상호 절충 관계를 효율적으로 조정합니다.샘플 점을 제외한 곳에서 C1
"cubic"2차원 보간만 지원하는, 삼각분할 기반 3차 보간.C2
"v4"

2차원 보간만 지원하는, 쌍조화 스플라인 보간(MATLAB® 4 griddata 메서드). 다른 방법과 달리 이 보간은 삼각분할을 기반으로 하지 않습니다.

C2

데이터형: char | string

출력 인수

모두 축소

보간된 값으로, 벡터 또는 배열로 반환됩니다. vq의 크기는 쿼리 점 입력값 xq, yq, zq의 크기에 따라 달라집니다.

  • xqyq가 쿼리 점의 m×n 그리드를 지정하는 2차원 보간의 경우, vqm×n 배열입니다.

  • xq, yqzq가 쿼리 점의 m×n×p 그리드를 지정하는 3차원 보간의 경우, vqm×n×p 배열입니다.

  • xq, yq(그리고 3차원 보간의 경우 zq)가 산점을 지정하는 벡터인 경우, vq는 동일한 길이의 벡터입니다.

"v4"를 제외한 모든 보간 방법에서 출력 vq는 샘플 데이터의 볼록 껍질 외부에 있는 쿼리 점에 대한 NaN 값을 포함합니다. "v4" 방법은 위치에 관계없이 모든 점에 대해 동일한 계산을 수행합니다.

쿼리 점에 대한 그리드 좌표로, 벡터 또는 행렬로 반환됩니다. XqYq의 형태는 xqyq를 지정하는 방식에 따라 달라집니다.

  • xq를 행 벡터로 지정하고 yq를 열 벡터로 지정하면 griddata는 그리드 벡터를 사용하여 [Xq,Yq] = meshgrid(xq,yq)로 전체 그리드를 구성합니다. 이 경우에는 XqYq 출력값이 쿼리 점에 대한 전체 그리드 좌표를 포함하는 행렬로 반환됩니다.

  • xqyq가 둘 다 행 벡터이거나 둘 다 열 벡터이면 Xq = xq이고 Yq = yq입니다.

  • griddata를 통한 산점 데이터 보간은 데이터의 들로네 삼각분할을 사용하기 때문에, x, y, z의 스케일링 문제에 민감할 수 있습니다. 이 경우 normalize를 사용하여 데이터를 다시 스케일링하고 결과를 개선할 수 있습니다. 자세한 내용은 크기가 서로 다른 데이터를 정규화하기 항목을 참조하십시오.

확장 기능

버전 내역

R2006a 이전에 개발됨