Main Content

interpn

ndgrid 형식의 1차원, 2차원, 3차원, N차원 그리드 데이터 보간

설명

예제

Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn)은 n개의 변수로 구성된 함수의 특정 쿼리 점에서 선형 보간된 값을 반환합니다. 결과는 항상 함수의 원래 샘플링을 통과합니다. X1,X2,...,Xn은 샘플 점의 좌표를 포함합니다. V는 각 샘플 점에 대응하는 함수 값을 포함합니다. Xq1,Xq2,...,Xqn은 쿼리 점의 좌표를 포함합니다.

Vq = interpn(V,Xq1,Xq2,...,Xqn)은 샘플 점의 디폴트 그리드를 가정합니다. 디폴트 그리드는 각 차원에서 점 1,2,3,...ni로 구성됩니다. ni의 값은 V에서 i번째 차원의 길이입니다. 메모리를 절약하고 점 간 절대 거리를 고려하지 않으려면 이 구문을 사용하십시오.

Vq = interpn(V)는 각 차원에서 한 번씩 샘플 값 간의 간격을 나누어 구성된, 조정된 그리드의 보간된 값을 반환합니다.

예제

Vq = interpn(V,k)는 각 차원에서 k번씩 간격을 반복적으로 이등분하여 구성된, 조정된 그리드의 보간된 값을 반환합니다. 결과적으로, 샘플 값 간에 2^k-1개의 보간된 점이 생성됩니다.

예제

Vq = interpn(___,method)는 대체 보간 방법을 'linear', 'nearest', 'pchip', 'cubic','makima', 'spline' 중 하나로 지정합니다. 디폴트 방법은 'linear'입니다.

예제

Vq = interpn(___,method,extrapval)에는 샘플 점의 영역 밖에 있는 모든 쿼리에 대입할 값을 스칼라 extrapval로 지정합니다.

샘플 점의 영역 밖에 있는 쿼리에 대해 extrapval 인수를 생략할 경우 interpnmethod 인수에 따라 다음 값 중 하나를 반환합니다.

  • 'spline' 방법과 'makima' 방법의 경우 외삽 값

  • 기타 보간 방법의 경우, NaN

예제

모두 축소

샘플 점과 값을 정의합니다.

x = [1 2 3 4 5];
v = [12 16 31 10 6];

쿼리 점 xq를 정의하고 보간합니다.

xq = (1:0.1:5);
vq = interpn(x,v,xq,'cubic');

결과를 플로팅합니다.

figure
plot(x,v,'o',xq,vq,'-');
legend('Samples','Cubic Interpolation');

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 Samples, Cubic Interpolation.

일련의 그리드 점과, 그에 대응하는 샘플 값을 만듭니다.

[X1,X2] = ndgrid((-5:1:5));
R = sqrt(X1.^2 + X2.^2)+ eps;
V = sin(R)./(R);

ntimes=1을 사용하여 미세한 그리드에 대해 보간합니다.

Vq = interpn(V,'cubic');
mesh(Vq);

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

ndgrid를 사용하여 2차원 샘플 점으로 구성된 그리드를 만듭니다.

[x,y] = ndgrid(0:10,0:5);

샘플 점에 두 개의 서로 다른 샘플 값 세트를 만들고 이를 3차원 배열의 페이지로 결합합니다. 샘플 점에 대해 두 세트의 샘플 값을 플로팅합니다. surf는 그리드에 meshgrid 형식을 사용하므로 플로팅을 위해 입력값을 전치합니다.

v1 = sin(x.*y)./(x+1);
v2 = x.*erf(y);
V = cat(3,v1,v2);
tiledlayout(1,2)
nexttile
surf(x',y',V(:,:,1)')
view(2)
nexttile
surf(x',y',V(:,:,2)')
view(2)

Figure contains 2 axes objects. Axes object 1 contains an object of type surface. Axes object 2 contains an object of type surface.

ndgrid를 사용하여 보간을 위한 쿼리 점 세트를 만든 다음 interpn을 사용하여 쿼리 점에서 각 함수의 값을 구합니다. 쿼리 점에 대해 보간된 값을 플로팅합니다.

[xq,yq] = ndgrid(0:0.2:10);
Vq = interpn(x,y,V,xq,yq);
tiledlayout(1,2)
nexttile
surf(xq',yq',Vq(:,:,1)')
view(2)
nexttile
surf(xq',yq',Vq(:,:,2)')
view(2)

Figure contains 2 axes objects. Axes object 1 contains an object of type surface. Axes object 2 contains an object of type surface.

그리드 벡터 x1, x2, x3을 만듭니다. 이러한 벡터는 V의 값에 대한 점을 정의합니다.

x1 = 1:100;
x2 = 1:50;
x3 = 1:30;

샘플 값이 난수로 구성된 100×50×30 배열 V가 되도록 정의합니다.

rng default
V = rand(100,50,30);

x1, x2, x3의 정의역 밖에 있는 세 개의 점에서 V를 계산합니다. extrapval = -1을 지정합니다.

xq1 = [0 0 0];
xq2 = [0 0 51];
xq3 = [0 101 102];
vq = interpn(x1,x2,x3,V,xq1,xq2,xq3,'linear',-1)
vq = 1×3

    -1    -1    -1

세 개의 점은 모두 x1, x2, x3의 정의역 밖에 있으므로 -1로 계산됩니다.

$f = te^{-x^{2}-y^{2}-z^{2}}$을 나타내는 익명 함수를 정의합니다.

f = @(x,y,z,t) t.*exp(-x.^2 - y.^2 - z.^2);

$R^4$에 점의 그리드를 만듭니다. 그런 다음 함수를 통해 점을 전달하여 샘플 값 V를 만듭니다.

[x,y,z,t] = ndgrid(-1:0.2:1,-1:0.2:1,-1:0.2:1,0:2:10);
V = f(x,y,z,t);

이제 쿼리 그리드를 만듭니다.

[xq,yq,zq,tq] = ...
ndgrid(-1:0.05:1,-1:0.08:1,-1:0.05:1,0:0.5:10);

쿼리 점에서 V를 보간합니다.

Vq = interpn(x,y,z,t,V,xq,yq,zq,tq);

동영상을 만들어 결과를 표시합니다.

figure('renderer','zbuffer');
nframes = size(tq, 4);
for j = 1:nframes
   slice(yq(:,:,:,j),xq(:,:,:,j),zq(:,:,:,j),...
         Vq(:,:,:,j),0,0,0);
   clim([0 10]);
   M(j) = getframe;
end
movie(M);

입력 인수

모두 축소

샘플 그리드 점으로, 실수 배열 또는 실수 벡터로 지정됩니다. 샘플 그리드 점은 고유해야 합니다.

  • X1,X2,...,Xn이 배열이면 전체 그리드(ndgrid 형식)의 좌표를 포함합니다. X1,X2,...,Xn 배열을 함께 만들려면 ndgrid 함수를 사용하십시오. 이러한 배열은 크기가 동일해야 합니다.

  • X1,X2,...,Xn이 벡터이면 그리드 벡터로 처리됩니다. 이러한 벡터의 값은 순단조 증가 또는 감소 형식이어야 합니다.

예: [X1,X2,X3,X4] = ndgrid(1:30,-10:10,1:5,10:13)

데이터형: single | double

샘플 값으로, 실수 배열 또는 복소수 배열로 지정됩니다. V의 크기 요구 사항은 X1,X2,...,Xn으로 정의된 샘플 점의 그리드 크기에 따라 달라집니다. 샘플 점 X1,X2,...,Xn은 배열 또는 그리드 벡터일 수 있지만 두 경우 모두 n차원 그리드를 정의합니다. V는 최소한 동일한 n차원 크기를 갖는 배열이어야 하지만 n을 초과하는 추가 차원을 가질 수도 있습니다.

  • V가 동일하게 n 차원을 갖는 경우 V의 크기는 X1,X2,...,Xn으로 정의된 n차원 그리드의 크기와 일치해야 합니다. 이 경우 V는 샘플 점에서 단일한 샘플 값 세트를 포함합니다. 예를 들어, X1,X2,X3이 3×3×3 배열이면 V도 3×3×3 배열일 수 있습니다.

  • Vn차원을 초과하는 경우 V의 처음 n개 차원은 X1,X2,...,Xn으로 정의된 n차원 그리드의 크기와 일치해야 합니다. V의 추가 차원은 샘플 점에서 추가 샘플 값 세트를 정의합니다. 예를 들어, X1,X2,X3이 3×3×3 배열이면 V는 3×3×3×2 배열이 되어 샘플 점에서 두 개의 샘플 값 세트를 정의할 수 있습니다.

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

예: rand(10,5,3,2)

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

쿼리 점으로, 실수형 스칼라, 벡터, 배열 중 하나로 지정됩니다.

  • Xq1,Xq2,...,Xqn이 스칼라이면, 이들은 Rn의 단일 쿼리 점의 좌표가 됩니다.

  • Xq1,Xq2,...,Xqn이 방향이 다른 벡터이면 Xq1,Xq2,...,Xqn은 Rn의 그리드 벡터로 처리됩니다.

  • Xq1,Xq2,...,Xqn이 크기와 방향이 같은 벡터이면 Xq1,Xq2,...,Xqn은 Rn의 산점으로 처리됩니다.

  • Xq1,Xq2,...,Xqn이 크기가 같은 배열이면, 이들은 쿼리 점(ndgrid 형식)의 전체 그리드 또는 Rn의 산점을 나타냅니다.

예: [X1,X2,X3,X4] = ndgrid(1:10,1:5,7:9,10:11)

데이터형: single | double

세분화 인자로, 음이 아닌 실수형 정수 스칼라로 지정됩니다. 이 값은 각 차원에서 조정된 그리드의 간격을, 반복적으로 나누는 횟수를 지정합니다. 결과적으로, 샘플 값 간에 2^k-1개의 보간된 점이 생성됩니다.

k0이면 VqV와 동일합니다.

interpn(V,1)interpn(V)와 동일합니다.

다음 그림은 R2k=2의 경우로, 9개의 샘플 값(검은색) 사이에 보간된 값(빨간색) 72개의 배치를 보여줍니다.

Nine sample points in a grid with three interpolated points between the sample points in each dimension

예: interpn(V,2)

데이터형: single | double

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

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

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

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

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

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

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

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

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

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

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

  • 'spline'보다 적은 요동을 생성합니다.

  • 계산 시간은 통상적으로 'spline'보다 적지만, 메모리 요구사항은 비슷함

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

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

X1,X2,...,Xn 영역 밖의 함수 값으로, 실수 또는 복소수 스칼라로 지정됩니다. interpnX1,X2,...,Xn의 영역 밖에 있는 모든 점에 대해 이 상수 값을 반환합니다.

예: 5

예: 5+1i

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

출력 인수

모두 축소

보간된 값으로, 실수 또는 복소수 스칼라, 벡터, 배열 중 하나로 반환됩니다. Vq의 크기와 형태는 사용하는 구문에 따라 다르며, 입력 인수의 크기와 값에 따라 달라지기도 합니다.

  • X1,X2,...,Xn으로 샘플 점을 지정하거나 디폴트 그리드를 사용하고 V가 샘플 점의 n차원 그리드와 동일한 차원 수를 갖는 경우 VqXq1,Xq2,...,Xqn으로 정의된 쿼리 점에서 단일한 보간 값 세트를 포함합니다.

    • Xq1,Xq2,...,Xqn이 스칼라이면 Vq도 스칼라입니다.

    • Xq1,Xq2,...,Xqn이 크기와 방향이 동일한 벡터이면 Vq도 크기와 방향이 동일한 벡터입니다.

    • Xq1,Xq2,...,Xqn이 방향이 혼합된 그리드 벡터이면 Vq는 그리드 벡터에 의해 묵시적으로 정의된 그리드와 크기가 동일한 배열입니다.

    • Xq1,Xq2,...,Xqn이 크기가 동일한 배열이면 Vq도 크기가 동일한 배열입니다.

  • X1,X2,...,Xn으로 샘플 점을 지정하거나 디폴트 그리드를 사용하고 V가 샘플 점의 n차원 그리드보다 더 큰 차원을 갖는 경우, VqXq1,Xq2,...,Xqn으로 정의된 쿼리 점에서 복수의 보간 값 세트를 포함합니다. 이 경우 Vq의 처음 n개 차원은 위의 단일한 보간 값 세트의 크기 규칙을 따르지만 동시에 VqV와 동일한 크기의 추가 차원을 갖습니다.

  • 구문 interpn(V)interpn(V,k)를 사용하면 디폴트 그리드를 k번(interpn(V)의 경우 k=1) 세분화하여 보간이 수행됩니다. 이 경우 VqV와 차원 수가 동일한 배열이며, i번째 차원의 크기는 2^k * (size(V,i)-1)+1입니다.

세부 정보

모두 축소

순단조(Strictly Monotonic)

증가 또는 감소의 방향에 반전이 없는 일련의 값들입니다. 예를 들어, 시퀀스 a = [2 4 6 8]은 순단조 증가 형식입니다. 시퀀스 b = [2 4 4 6 8]b(2)b(3) 사이에 값의 변화가 없으므로 순단조 형식이 아닙니다. 시퀀스 c = [2 4 6 8 6]에는 c(4)c(5) 사이에 반전이 포함되어 있으므로 단조 형식이 아닙니다.

전체 그리드(ndgrid 형식)

interpn에서 전체 그리드는 n개의 배열 X1,X2,...,Xn으로 구성됩니다. 이 배열의 요소는 Rn에 있는 점의 그리드를 나타냅니다. i번째 배열 Xi는 i번째 차원을 따라 가장 빠르게 변화하는 순단조(Strictly Monotonic) 증가 값을 포함합니다.

interpn에 전달할 수 있는 전체 그리드를 만들려면 ndgrid 함수를 사용하십시오. 예를 들어, 다음 코드는 영역 1 ≤ X1 ≤ 3, 1 ≤ X2 ≤ 4에 대해 R2의 전체 그리드를 만듭니다.

[X1,X2] = ndgrid(-1:3,(1:4))
X1 =

    -1    -1    -1    -1
     0     0     0     0
     1     1     1     1
     2     2     2     2
     3     3     3     3


X2 =

     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

그리드 벡터

interpn에서 그리드 벡터는 Rn의 그리드의 점을 정의하는, 방향이 혼합된 n개의 벡터로 구성됩니다.

예를 들어, 다음 코드는 영역 1 ≤ x1 ≤ 3, 4 ≤ x2 ≤ 5 및 6 ≤x3≤ 8에 대해 R3의 그리드 벡터를 만듭니다.

x1 = 1:3;
x2 = (4:5)';
x3 = 6:8;

산점(Scattered Point)

interpn의 경우 산점은 Rn의 산점 모음을 정의하는 n개의 배열 또는 벡터인 Xq1,Xq2,...,Xqn으로 구성됩니다. i번째 배열 Xii번째 차원의 좌표를 포함합니다.

예를 들어, 다음 코드는 R3의 점 (1, 19, 10), (6, 40, 1), (15, 33, 22)와 (0, 61, 13)을 지정합니다.

Xq1 = [1 6; 15 0];
Xq2 = [19 40; 33 61];
Xq3 = [10 1; 22 13];

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| | |