Main Content

griddedInterpolant

그리드 데이터 보간(Gridded Data Interpolation)

설명

griddedInterpolant를 사용하여 1차원, 2차원, 3차원 또는 N차원의 그리드 데이터 세트에 대해 보간을 수행합니다. griddedInterpolant는 지정된 데이터 세트에 대해 보간 함수 F를 반환합니다. 2차원에서는 (xq,yq)와 같은 일련의 쿼리 점에서 F를 실행하여 보간된 값 vq = F(xq,yq)를 생성할 수 있습니다.

산점 데이터 보간에는 scatteredInterpolant를 사용하십시오.

생성

설명

F = griddedInterpolant는 그리딩된 빈 데이터 interpolant 객체를 만듭니다.

예제

F = griddedInterpolant(x,v)는 샘플 점 x와 해당 값 v로 이루어진 벡터에서 1차원 보간을 생성합니다.

예제

F = griddedInterpolant(X1,X2,...,Xn,V)n차원 배열 X1,X2,...,Xn의 세트로 전달된 샘플 점의 전체 그리드를 사용한 2차원, 3차원 또는 N차원 보간을 생성합니다. V 배열에는 X1,X2,...,Xn의 점 위치에 대한 샘플 값이 포함되어 있습니다. 각 배열 X1,X2,...,XnV와 크기가 동일해야 합니다.

예제

F = griddedInterpolant(V)는 보간을 생성하기 위해 디폴트 그리드를 사용합니다. 이 구문을 사용하면 griddedInterpolant는 그리드를 i번째 차원에서 간격이 1이고 범위가 [1, size(V,i)]인 점들의 집합으로 정의합니다. 메모리를 절약하고 점 간 절대 거리를 고려하지 않으려면 이 구문을 사용하십시오.

예제

F = griddedInterpolant(gridVecs,V)는 샘플 점의 n차원 그리드를 설명하는 n개의 그리드 벡터가 들어 있는 셀형 배열 gridVecs를 지정합니다. 특정 그리드를 사용하면서 메모리를 절약하려는 경우에는 이 구문을 사용합니다.

예제

F = griddedInterpolant(___,Method)는 보간 방법을 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'makima' 또는 'spline'으로 지정합니다. 위에 열거된 구문 중 하나에 마지막 입력 인수로 Method를 지정할 수 있습니다.

예제

F = griddedInterpolant(___,Method,ExtrapolationMethod)는 보간 방법과 외삽 방법을 모두 지정합니다. griddedInterpolant는 쿼리 점이 샘플 점의 영역 밖에 있을 때 값을 추정하기 위해 ExtrapolationMethod를 사용합니다.

입력 인수

모두 확장

샘플 점으로, 벡터로 지정됩니다. xv는 크기가 같아야 합니다. x의 샘플 점은 고유해야 합니다.

데이터형: single | double

샘플 값으로, 벡터, 행렬 또는 다차원 배열로 지정됩니다. v의 요소는 x의 샘플 점에 대응하는 값입니다.

  • 하나의 값 세트를 사용하여 보간하려면 xv는 같은 길이의 벡터여야 합니다.

  • 여러 값 세트를 사용하여 보간하려면 vx에 비해 추가 차원이 있는 배열일 수 있습니다. v의 첫 번째 차원의 크기는 x의 샘플 점 개수와 일치해야 하고, v의 각 열은 개별적인 1차원 값 세트를 정의합니다. 예를 들어, x가 요소를 10개 가진 열 벡터인 경우 4개의 값 세트를 사용하여 보간하기 위해 v를 10×4 행렬로 지정할 수 있습니다.

데이터형: single | double

전체 그리드 형식의 샘플 점으로, 서로 구분된 n차원 배열로 지정됩니다. 샘플 점은 고유하고 정렬되어야 합니다. ndgrid 함수를 사용하여 배열 X1,X2,...,Xn을 생성할 수 있습니다. 이들 배열은 모두 동일한 크기이며, 각각은 V와 크기가 같습니다.

데이터형: single | double

그리드 벡터 형식의 샘플 점으로, 그리드 벡터 {xg1,xg2,...,xgn}으로 구성된 셀형 배열로 지정됩니다. 샘플 점은 고유하고 정렬되어야 합니다. 이들 벡터는 V와 크기가 같은 그리드를 지정해야 합니다. 즉, size(V) = [length(xg1) length(xg2),...,length(xgn)]입니다. 그리드가 매우 큰 경우에는 메모리를 절약하기 위해 전체 그리드에 대한 대안으로 이 형식을 사용합니다.

데이터형: single | double

샘플 값으로, 배열로 지정됩니다. V의 요소는 샘플 점에 대응하는 값입니다. V의 처음 N개 차원은 샘플 점의 전체 그리드에서 대응되는 차원과 크기가 같아야 합니다. 여기서 N은 그리드의 차원 수입니다.

  • 하나의 값 세트를 사용하여 보간하려면 V를 샘플 점의 전체 그리드와 크기가 같은 배열로 지정하십시오. 예를 들어, 샘플 점이 크기가 100×100인 그리드를 형성하는 경우 이와 같은 크기의 행렬로 값을 지정할 수 있습니다.

  • 여러 값 세트를 사용하여 보간하려면 V를 샘플 점 그리드에 비해 추가 차원이 있는 배열로 지정하십시오. 추가 차원은 각 샘플 점에서 다중 값을 정의합니다. 예를 들어, 샘플 점이 크기가 100×100인 그리드를 형성하는 경우 서로 다른 4개의 100×100 값 세트를 사용하여 보간하기 위해 크기가 100×100×4인 배열로 값을 지정할 수 있습니다.

데이터형: single | double

보간 방법으로, 다음 표에 나와 있는 옵션 중 하나로 지정됩니다.

방법설명연속성설명
'linear'(디폴트 값)선형 보간입니다. 쿼리 점에서 보간된 값은 각 차원의 인접 그리드 점에서 값이 선형 보간된 것입니다. C0
  • 각 차원에 최소 2개의 그리드 점이 필요함

  • 'nearest'보다 더 많은 메모리가 필요함

'nearest'최근접이웃 보간입니다. 쿼리 점에서 보간된 값은 가장 근접한 샘플 그리드 점에서의 값입니다. 불연속
  • 각 차원에 2개의 그리드 점이 필요함

  • 적당한 메모리 요구 사항으로 가장 빠른 계산 수행

'next'그다음 이웃 보간(1차원에만 해당). 쿼리 점에서 보간된 값은 그다음 샘플 그리드 점에서의 값입니다.불연속
  • 2개 이상의 점이 필요함

  • 메모리 요구 사항과 계산 시간은 'nearest'와 동일함

'previous'이전 이웃 보간(1차원에만 해당). 쿼리 점에서 보간된 값은 이전 샘플 그리드 점에서의 값입니다.불연속
  • 2개 이상의 점이 필요함

  • 메모리 요구 사항과 계산 시간은 'nearest'와 동일함

'pchip'형태 보존 조각별 3차 보간입니다(1차원에만 해당). 쿼리 점에서 보간된 값은 인접 그리드 점에서 값이 형태 보존 조각별 3차 보간된 것입니다.C1
  • 4개 이상의 점이 필요함

  • 'linear'보다 메모리와 계산 시간이 더 많이 필요함

'cubic'3차 보간. 쿼리 점에서 보간된 값은 각 차원의 인접 그리드 점에서 값이 3차 보간된 것입니다. 이 보간은 3차 컨벌루션을 기반으로 합니다.C1
  • 각 차원의 그리드 간격이 서로 같을 필요는 없지만, 그리드 간격은 균일해야 함

  • 각 차원에 최소 4개의 점이 필요함

  • 'linear'보다 메모리와 계산 시간이 더 많이 필요함

'makima'아키마 3차 에르미트 다항식 변형 보간. 쿼리 점에서 보간된 값은 각 차원의 인접 그리드 점 값을 사용하여 계산된, 차수가 최대 3인 다항식의 조각별 함수를 기반으로 합니다. 아키마 수식이 오버슈트를 방지하도록 수정되었습니다.C1
  • 각 차원에 최소 2개의 점이 필요함

  • 'spline'보다 적은 요동을 일으키지만, 'pchip'만큼 과감하게 평탄화하지는 않음

  • 'pchip'보다 계산 비용이 더 들지만, 일반적으로 'spline'보다는 덜 듦

  • 메모리 요구 사항은 'spline'의 경우와 유사함

'spline'3차 스플라인 보간. 쿼리 점에서 보간된 값은 각 차원의 인접 그리드 점에서 값이 3차 보간된 것입니다. 이 보간은 not-a-knot 끝점 조건을 사용한 3차 스플라인을 기반으로 합니다.C2
  • 각 차원에 4개의 점이 필요함

  • 'cubic'보다 메모리와 계산 시간이 더 많이 필요함

외삽 방법으로, 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'spline' 또는 'makima'로 지정됩니다. 또한 그리드 영역 외부를 쿼리하여 NaN 값을 반환하려는 경우 'none'을 지정할 수도 있습니다.

ExtrapolationMethod를 생략하면 Method에 지정된 값이 기본적으로 사용됩니다. MethodExtrapolationMethod 인수를 모두 생략하면 둘 다 디폴트 값은 'linear'가 됩니다.

속성

모두 확장

그리드 벡터로, 셀형 배열 {xg1,xg2,...,xgn}으로 지정됩니다. 이러한 벡터는 Values의 값에 대한 그리드 점(위치)을 지정합니다. 그리드 점은 고유해야 합니다.

데이터형: cell

샘플 점에서의 함수 값으로, GridVectors의 그리드 점에 대한 값으로 구성된 배열로 지정됩니다.

데이터형: single | double

보간 방법으로, 문자형 벡터로 지정됩니다. Method'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'spline' 또는 'makima'일 수 있습니다. 이러한 방법에 대한 설명은 Method를 참조하십시오.

데이터형: char

외삽 방법으로, 문자형 벡터로 지정됩니다. ExtrapolationMethod'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'spline', 'makima' 또는 'none'일 수 있습니다. 'none'의 값은 외삽이 비활성화되어 있음을 나타냅니다. 디폴트 값은 Method의 값입니다.

데이터형: char

사용

설명

griddedInterpolant를 사용하여 보간 함수 F를 생성합니다. 그런 다음, 다음 구문 중 하나를 사용하여 특정 쿼리 점에서 F를 계산할 수 있습니다.

Vq = F(Xq)는 행렬 Xq의 쿼리 점을 지정합니다. Xq의 각 행은 쿼리 점의 좌표를 포함합니다.

Vq = F(xq1,xq2,...,xqn)n차원 공간에 산포된 m개의 점을 나타내는, 길이 m의 열 벡터로 쿼리 점 xq1,xq2,...,xqn을 지정합니다.

Vq = F(Xq1,Xq2,...,Xqn)은 점으로 이루어진 전체 그리드를 정의하는 n차원 배열 Xq1,Xq2,...,Xqn을 사용하여 쿼리 점을 지정합니다.

Vq = F({xgq1,xgq2,...,xgqn})은 쿼리 점을 그리드 벡터로 지정합니다. 대량의 점에 대한 그리드를 쿼리하는 경우에는 이 구문을 사용하여 메모리를 절약할 수 있습니다.

예제

모두 축소

griddedInterpolant를 사용하여 1차원 데이터 세트를 보간합니다.

샘플 산점 v의 벡터를 만듭니다. 0과 20 사이의 무작위 1차원 위치로 점이 샘플링됩니다.

x = sort(20*rand(100,1));
v = besselj(0,x);

데이터에 대해 gridded interpolant 객체를 만듭니다. 기본적으로, griddedInterpolant'linear' 보간 방법을 사용합니다.

F = griddedInterpolant(x,v)
F = 
  griddedInterpolant with properties:

            GridVectors: {[100x1 double]}
                 Values: [100x1 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

0과 20 사이의 균일한 간격의 500개 점에서 보간 함수 F를 쿼리합니다. 원래 데이터 (x,v) 위에 보간된 결과 (xq,vq)를 플로팅합니다.

xq = linspace(0,20,500);
vq = F(xq);
plot(x,v,'ro')
hold on
plot(xq,vq,'.')
legend('Sample Points','Interpolated Values')

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

두 가지 방법으로 쿼리 점을 지정하여 3차원 데이터를 보간합니다.

범위 [-5,5]에 그리딩된 샘플 점 세트에서 실행된 함수 z(x,y)=sin(x2+y2)x2+y2을 나타내는 3차원 데이터 세트를 생성하고 플로팅합니다.

[x,y] = ndgrid(-5:0.8:5);
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
surf(x,y,z)

Figure contains an axes object. The axes object contains an object of type surface.

데이터에 대해 gridded interpolant 객체를 만듭니다.

F = griddedInterpolant(x,y,z);

미세한 메시를 사용하여 보간 함수를 쿼리하고 해를 향상시킵니다.

[xq,yq] = ndgrid(-5:0.1:5);
vq = F(xq,yq);
surf(xq,yq,vq)

Figure contains an axes object. The axes object contains an object of type surface.

샘플 점이나 쿼리 점의 개수가 많고 메모리 사용량이 문제가 되는 경우 그리드 벡터를 사용하여 메모리 사용량을 개선할 수 있습니다.

  • ndgrid를 사용하여 전체 그리드를 만드는 대신 그리드 벡터를 지정하면 griddedInterpolant는 계산 수행을 위해 전체 쿼리 그리드를 생성하지 않게 됩니다.

  • 그리드 벡터를 전달할 때는 일반적으로 {xg1, xg2, ..., xgn}처럼 셀형 배열에 셀로 그룹화합니다. 그리드 벡터를 사용하면 전체 그리드의 점을 간단하게 나타낼 수 있습니다.

그리드 벡터를 사용하여 이전 명령을 실행해 봅니다.

x = -5:0.8:5;
y = x';
z = sin(x.^2 + y.^2) ./ (x.^2 + y.^2);
F = griddedInterpolant({x,y},z);
xq = -5:0.1:5;
yq = xq';
vq = F({xq,yq});
surf(xq,yq,vq)

Figure contains an axes object. The axes object contains an object of type surface.

디폴트 그리드를 사용하여 샘플 점 세트에 대해 간단하게 보간을 수행합니다. 디폴트 그리드는 단위 간격의 점을 사용하므로 이 보간 방법은 샘플 점 사이의 정확한 xy 간격이 중요하지 않은 경우에 유용합니다.

샘플 함수 값의 행렬을 만들고 디폴트 그리드에 플로팅합니다.

x = (1:0.3:5)';
y = x';
V = cos(x) .* sin(y);
n = length(x);
surf(1:n,1:n,V)

Figure contains an axes object. The axes object contains an object of type surface.

디폴트 그리드를 사용하여 데이터를 보간합니다.

F = griddedInterpolant(V)
F = 
  griddedInterpolant with properties:

            GridVectors: {[1 2 3 4 5 6 7 8 9 10 11 12 13 14]  [1 2 3 4 5 6 7 8 9 10 11 12 13 14]}
                 Values: [14x14 double]
                 Method: 'linear'
    ExtrapolationMethod: 'linear'

보간 함수를 쿼리하고 결과를 플로팅합니다.

[xq,yq] = ndgrid(1:0.2:n);
Vq = F(xq,yq);
surf(xq',yq',Vq)

Figure contains an axes object. The axes object contains an object of type surface.

0.5 간격의 전체 그리드로 성기게 샘플링된 데이터를 보간합니다.

샘플 점을 양 차원에 대해, 범위 [1, 10]의 전체 그리드로 정의합니다.

[X,Y] = ndgrid(1:10,1:10);

그리드 점에서 f(x,y)=x2+y2을 샘플링합니다.

V = X.^2 + Y.^2;

3차 보간을 지정하여 보간을 생성합니다.

F = griddedInterpolant(X,Y,V,'cubic');

0.5의 간격으로 쿼리 점의 전체 그리드를 정의하고 해당 점에서 보간을 실행합니다. 그런 다음 결과를 플로팅합니다.

[Xq,Yq] = ndgrid(1:0.5:10,1:0.5:10);
Vq = F(Xq,Yq);
mesh(Xq,Yq,Vq);

Figure contains an axes object. The axes object contains an object of type surface.

'pchip''nearest' 외삽 방법을 사용하여 F 정의역 외부에서 보간 쿼리 결과를 비교합니다.

'pchip'을 보간 방법으로 지정하고 'nearest'를 외삽 방법으로 지정하여 보간 함수를 만듭니다.

x = [1 2 3 4 5];
v = [12 16 31 10 6];
F = griddedInterpolant(x,v,'pchip','nearest')
F = 
  griddedInterpolant with properties:

            GridVectors: {[1 2 3 4 5]}
                 Values: [12 16 31 10 6]
                 Method: 'pchip'
    ExtrapolationMethod: 'nearest'

보간을 쿼리하고 F 정의역 외부의 점을 포함시킵니다.

xq = 0:0.1:6;
vq = F(xq);
figure
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

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

'pchip' 외삽 방법을 사용하여 동일한 점에서 다시 보간 함수를 쿼리합니다.

F.ExtrapolationMethod = 'pchip';
figure
vq = F(xq);
plot(x,v,'o',xq,vq,'-b');
legend ('v','vq')

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

griddedInterpolant를 사용하여 동일한 쿼리 점에서 3개의 서로 다른 값 세트를 보간합니다.

-5X5-3Y3을 사용하여 샘플 점으로 구성된 그리드를 만듭니다.

gx = -5:5;
gy = -3:3;
[X,Y] = ndgrid(gx,gy);

쿼리 점에서 3개의 서로 다른 함수를 실행한 다음, 값들을 3차원 배열로 결합합니다. V의 크기는 처음 2개 차원에서 XY 그리드와 같으나 추가 차원의 크기는 각 샘플 점에 연결된 값의 개수(이 경우에는 3개)를 반영합니다.

f1 = X.^2 + Y.^2;
f2 = X.^3 + Y.^3;
f3 = X.^4 + Y.^4;
V = cat(3,f1,f2,f3);

샘플 점과 연결된 값을 사용하여 보간 함수를 만듭니다.

F = griddedInterpolant(X,Y,V);

샘플 점에 비해 메시 크기가 조밀한, 쿼리 점으로 이루어진 그리드를 만듭니다.

qx = -5:0.4:5;
qy = -3:0.4:3;
[XQ,YQ] = ndgrid(qx,qy);

쿼리 점에서 3개 값 세트를 모두 보간합니다.

VQ = F(XQ,YQ);

원래 데이터와 보간된 결과를 비교합니다.

tiledlayout(3,2)
nexttile
surf(X,Y,f1)
title('f1')
nexttile
surf(XQ,YQ,VQ(:,:,1))
title('Interpolated f1')
nexttile
surf(X,Y,f2)
title('f2')
nexttile
surf(XQ,YQ,VQ(:,:,2))
title('Interpolated f2')
nexttile
surf(X,Y,f3)
title('f3')
nexttile
surf(XQ,YQ,VQ(:,:,3))
title('Interpolated f3')

Figure contains 6 axes objects. Axes object 1 with title f1 contains an object of type surface. Axes object 2 with title Interpolated f1 contains an object of type surface. Axes object 3 with title f2 contains an object of type surface. Axes object 4 with title Interpolated f2 contains an object of type surface. Axes object 5 with title f3 contains an object of type surface. Axes object 6 with title Interpolated f3 contains an object of type surface.

세부 정보

모두 확장

  • interp1, interp2, interp3 또는 interpn을 사용하여 보간을 따로따로 계산하는 것보다 여러 쿼리 점에서 griddedInterpolant 객체 F를 실행하는 편이 더 빠릅니다. 예를 들어, 다음과 같이 합니다.

    % Fast to create interpolant F and evaluate multiple times
    F = griddedInterpolant(X1,X2,V)
    v1 = F(Xq1)
    v2 = F(Xq2)
    
    % Slower to compute interpolations separately using interp2
    v1 = interp2(X1,X2,V,Xq1)
    v2 = interp2(X1,X2,V,Xq2)
    

확장 기능

버전 내역

R2011b에 개발됨

모두 확장