Main Content

interp1

1차원 데이터 보간(테이블 룩업)

설명

예제

vq = interp1(x,v,xq)은 선형 보간을 사용하여 특정 쿼리 점에서 1차원 함수의 보간된 값을 반환합니다. 벡터 x는 샘플 점을 포함하며 v는 대응값 v(x)를 포함합니다. 벡터 xq는 쿼리 점의 좌표를 포함합니다.

동일한 점 좌표에서 샘플링된 여러 데이터 세트가 있을 경우 v를 배열로 전달할 수 있습니다. 배열 v의 각 열은 서로 다른 1차원 샘플 값의 세트를 포함합니다.

예제

vq = interp1(x,v,xq,method)는 대체 보간 방법을 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'v5cubic', 'makima' 또는 'spline'으로 지정합니다. 디폴트 방법은 'linear'입니다.

예제

vq = interp1(x,v,xq,method,extrapolation)x의 영역 밖에 있는 점을 평가하기 위한 전략을 지정합니다. 외삽용 method 알고리즘을 사용하려면 extrapolation'extrap'으로 설정하십시오. 또는 스칼라 값을 지정할 수 있으며, 이 경우 interp1x의 영역 밖에 있는 모든 점에 대해 보간된 값을 반환합니다.

예제

vq = interp1(v,xq)는 보간된 값을 반환하고 샘플 점 좌표의 디폴트 세트를 가정합니다. 디폴트 점은 1부터 n까지의 숫자 시퀀스입니다. 여기서 nv의 형태에 따라 달라집니다.

  • v가 벡터이면 디폴트 점은 1:length(v)입니다.

  • v가 배열이면 디폴트 점은 1:size(v,1)입니다.

점 간의 절대 거리를 고려하지 않아도 되는 경우 이 구문을 사용하십시오.

vq = interp1(v,xq,method)는 대체 보간 방법 중 하나를 지정하고 디폴트 샘플 점을 사용합니다.

vq = interp1(v,xq,method,extrapolation)은 외삽법을 지정하고 디폴트 샘플 점을 사용합니다.

pp = interp1(x,v,method,'pp')method 알고리즘을 사용하여 v(x)의 조각별 다항식(Piecewise Polynomial)을 반환합니다.

참고

이 구문은 권장되지 않습니다. griddedInterpolant를 대신 사용하십시오.

예제

모두 축소

샘플 점 x와 이에 대응하는 샘플 값 v를 정의합니다.

x = 0:pi/4:2*pi; 
v = sin(x);

x의 범위에 걸쳐 미세한 샘플링이 되도록 쿼리 점을 정의합니다.

xq = 0:pi/16:2*pi;

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

figure
vq1 = interp1(x,v,xq);
plot(x,v,'o',xq,vq1,':.');
xlim([0 2*pi]);
title('(Default) Linear Interpolation');

Figure contains an axes object. The axes object with title (Default) Linear Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

이제 'spline' 방법을 사용하여 동일한 점에서 v를 계산합니다.

figure
vq2 = interp1(x,v,xq,'spline');
plot(x,v,'o',xq,vq2,':.');
xlim([0 2*pi]);
title('Spline Interpolation');

Figure contains an axes object. The axes object with title Spline Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

일련의 함수 값을 정의합니다.

v = [0  1.41  2  1.41  0  -1.41  -2  -1.41 0];

디폴트 점 1:9 사이에 속하는 일련의 쿼리 점을 정의합니다. 이 경우 v9개의 값이 포함되므로 디폴트 점은 1:9입니다.

xq = 1.5:8.5;

xq에서 v를 계산합니다.

vq = interp1(v,xq);

결과를 플로팅합니다.

figure
plot((1:9),v,'o',xq,vq,'*');
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.

샘플 점 집합을 정의합니다.

x = 1:10;

샘플 점에서 함수 v(x)=5x+x2i의 값을 정의합니다.

v = (5*x)+(x.^2*1i);

x의 범위에 걸쳐 미세한 샘플링이 되도록 쿼리 점을 정의합니다.

xq = 1:0.25:10;

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

vq = interp1(x,v,xq);

결과의 실수부를 빨간색으로 플로팅하고 허수부를 파란색으로 플로팅합니다.

figure
plot(x,real(v),'*r',xq,real(vq),'-r');
hold on
plot(x,imag(v),'*b',xq,imag(vq),'-b');

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

타임스탬프가 지정된 데이터 점을 보간합니다.

4시간 단위로 측정된 온도 측정값이 들어 있는 데이터 세트가 있다고 가정합니다. 하루치의 데이터로 테이블을 만들고 이 데이터를 플로팅합니다.

x = (datetime(2016,1,1):hours(4):datetime(2016,1,2))';
x.Format = 'MMM dd, HH:mm';
T = [31 25 24 41 43 33 31]';
WeatherData = table(x,T,'VariableNames',{'Time','Temperature'})
WeatherData=7×2 table
        Time         Temperature
    _____________    ___________

    Jan 01, 00:00        31     
    Jan 01, 04:00        25     
    Jan 01, 08:00        24     
    Jan 01, 12:00        41     
    Jan 01, 16:00        43     
    Jan 01, 20:00        33     
    Jan 02, 00:00        31     

plot(WeatherData.Time, WeatherData.Temperature, 'o')

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

데이터 세트를 보간하여 하루 중 매 분의 온도 측정값을 예측합니다. 이 데이터는 주기적이므로, 'spline' 보간 방법을 사용합니다.

xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';
V = interp1(WeatherData.Time, WeatherData.Temperature, xq, 'spline');

보간된 점을 플로팅합니다.

hold on
plot(xq,V,'r')

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

샘플 점 x와 이에 대응하는 샘플 값 v를 정의합니다.

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

x의 영역을 벗어나는 쿼리 점 xq를 지정합니다.

xq = [0 0.5 1.5 5.5 6];

'pchip' 방법을 사용하여 xq에서 v를 계산합니다.

vq1 = interp1(x,v,xq,'pchip')
vq1 = 1×5

   19.3684   13.6316   13.2105    7.4800   12.5600

그 다음 'linear' 방법을 사용하여 xq에서 v를 계산합니다.

vq2 = interp1(x,v,xq,'linear')
vq2 = 1×5

   NaN   NaN    14   NaN   NaN

이제 'linear' 방법을 'extrap' 옵션과 함께 사용합니다.

vq3 = interp1(x,v,xq,'linear','extrap')
vq3 = 1×5

     8    10    14     4     2

'pchip'은 기본적으로 외삽을 적용하지만 'linear'는 외삽을 적용하지 않습니다.

샘플 점 x와 이에 대응하는 샘플 값 v를 정의합니다.

x = [-3 -2 -1 0 1 2 3];
v = 3*x.^2;

x의 영역을 벗어나는 쿼리 점 xq를 지정합니다.

xq = [-4 -2.5 -0.5 0.5 2.5 4];

이제 'pchip' 방법을 사용하여 xq에서 v를 계산하고, x의 정의역 밖에 있는 값에는 값 27을 대입합니다.

vq = interp1(x,v,xq,'pchip',27)
vq = 1×6

   27.0000   18.6562    0.9375    0.9375   18.6562   27.0000

샘플 점을 정의합니다.

x = (-5:5)';

세 가지 다른 포물선 함수를 x에 정의된 점에서 샘플링합니다.

v1 = x.^2;
v2 = 2*x.^2 + 2;
v3 = 3*x.^2 + 4;

각 열이 벡터 v1, v2, v3인 행렬 v를 만듭니다.

v = [v1 v2 v3];

x의 범위에 걸쳐 미세한 샘플링이 되도록 쿼리 점 집합 xq를 정의합니다.

xq = -5:0.1:5;

xq에서 세 개 함수를 모두 계산하고 결과를 플로팅합니다.

vq = interp1(x,v,xq,'pchip');
figure
plot(x,v,'o',xq,vq);

h = gca;
h.XTick = -5:5;

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

플롯의 원은 v를 나타내고 실선은 vq를 나타냅니다.

입력 인수

모두 축소

샘플 점으로, 실수의 행 벡터 또는 열 벡터로 지정됩니다. x의 값은 고유해야 합니다. x의 길이는 다음 요구 사항 중 하나를 준수해야 합니다.

  • v가 벡터인 경우 length(x)length(v)와 같아야 합니다.

  • v가 배열인 경우 length(x)size(v,1)과 같아야 합니다.

예: [1 2 3 4 5 6 7 8 9 10]

예: 1:10

예: [3 7 11 15 19 23 27 31]'

데이터형: single | double | duration | datetime

샘플 값으로, 실수 또는 복소수로 구성된 벡터, 행렬, 배열 중 하나로 지정됩니다. v가 행렬 또는 배열인 경우 각 열은 별개의 1차원 값 세트를 포함합니다.

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

예: rand(1,10)

예: rand(10,1)

예: rand(10,3)

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

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

예: 5

예: 1:0.05:10

예: (1:0.05:10)'

예: [0 1 2 7.5 10]

데이터형: single | double | duration | datetime

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

방법

설명

연속성

설명

'linear'

선형 보간입니다. 쿼리 점에서 보간된 값은 각 차원의 인접 그리드 점에서 값이 선형 보간된 것입니다. 이는 디폴트 보간 방법입니다.

C0

  • 2개 이상의 점이 필요함

  • 최근접이웃보다 메모리와 계산 시간이 더 많이 필요함

'nearest'

최근접이웃 보간입니다. 쿼리 점에서 보간된 값은 가장 근접한 샘플 그리드 점에서의 값입니다.

불연속

  • 2개 이상의 점이 필요함

  • 적당한 메모리 요구 사항

  • 계산 시간이 가장 빠름

'next'

다음 근방(Next Neighbor) 보간입니다. 쿼리 점에서 보간된 값은 그다음 샘플 그리드 점에서의 값입니다.

불연속

  • 2개 이상의 점이 필요함

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

'previous'

이전 근방(Previous Neighbor) 보간입니다. 쿼리 점에서 보간된 값은 이전 샘플 그리드 점에서의 값입니다.

불연속

  • 2개 이상의 점이 필요함

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

'pchip'

형태 보존 조각별 3차 보간입니다. 쿼리 점에서 보간된 값은 인접 그리드 점에서 값이 형태 보존 조각별 3차 보간된 것입니다.

C1

  • 4개 이상의 점이 필요함

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

'cubic'

MATLAB® 5에서 사용되는 3차 컨벌루션입니다.

C1

  • 3개 이상의 점이 필요함

  • 점의 간격이 균일해야 함

  • 이 방법은 불규칙한 간격의 데이터의 경우 'spline' 보간으로 대체됨

  • 메모리 요구 사항과 계산 시간은 'pchip'와 비슷함

'v5cubic'

'cubic'인 경우와 동일합니다.

C1

'makima'

아키마 3차 에르미트 다항식 변형 보간. 쿼리 점에서 보간된 값은 차수가 최대 3인 다항식의 조각별 함수를 기반으로 합니다. 아키마 수식이 오버슈트를 방지하도록 수정되었습니다.

C1

  • 2개 이상의 점이 필요함

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

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

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

'spline'

not-a-knot 끝점 조건을 사용한 스플라인 보간입니다. 쿼리 점에서 보간된 값은 각 차원의 인접 그리드 점에서 값이 3차 보간된 것입니다.

C2

  • 4개 이상의 점이 필요함

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

외삽법으로, 'extrap'나 실수형 스칼라 값으로 지정됩니다.

  • interp1이 보간에 사용하는 것과 동일한 방법을 사용하여 영역 밖에 있는 점을 계산하도록 하려면 'extrap'을 지정하십시오.

  • interp1이 영역 밖에 있는 점에 대해 특정 상수 값을 반환하도록 하려면 스칼라 값을 지정하십시오.

디폴트 동작은 입력 인수에 따라 달라집니다.

  • 'pchip', 'spline' , 'makima' 보간 방법 중 하나를 지정할 경우 디폴트 동작은 'extrap'입니다.

  • 다른 모든 보간 방법은 영역 밖에 있는 쿼리 점에 대해 기본적으로 NaN을 반환합니다.

예: 'extrap'

예: 5

데이터형: char | string | single | double

출력 인수

모두 축소

보간된 값으로, 스칼라, 벡터, 행렬, 배열 중 하나로 반환됩니다. vq의 크기는 vxq의 형태에 따라 달라집니다.

v의 형태xq의 형태Vq의 크기
벡터벡터size(xq)size(v) = [1 100]이고
size(xq) = [1 500]이면
size(vq) = [1 500]이 됩니다.
벡터행렬
또는 N차원 배열
size(xq)size(v) = [1 100]이고
size(xq) = [50 30]이면
size(vq) = [50 30]이 됩니다.
행렬
또는 N차원 배열
벡터[length(xq) size(v,2),...,size(v,n)]size(v) = [100 3]이고
size(xq) = [1 500]이면
size(vq) = [500 3]이 됩니다.
행렬
또는 N차원 배열
행렬
또는 N차원 배열
[size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)]size(v) = [4 5 6]이고
size(xq) = [2 3 7]이면
size(vq) = [2 3 7 5 6]이 됩니다.

조각별 다항식(Piecewise Polynomial)으로, 계산을 위해 ppval 함수로 전달될 수 있도록 구조체로 반환됩니다.

세부 정보

모두 축소

아키마와 스플라인 보간

1차원 보간에 대한 아키마 알고리즘은 연속 1계 도함수(C1)를 갖는 조각별 다항식들을 생성하기 위해 3차 보간을 수행합니다. 자세한 설명은 [1][2]를 참조하십시오. 이 알고리즘은 기울기를 보존하고 평탄 영역에서의 요동을 방지합니다. 평탄 영역은 동일직선상의 점이 3개 이상 연속될 때마다 발생하는데, 이 알고리즘에서는 이러한 점들을 직선으로 연결합니다. 두 데이터 점 사이의 영역의 평탄성을 보장하려면 두 점 사이에 데이터 점을 하나 삽입하십시오.

기울기가 서로 다른 두 평탄 영역이 만나는 경우, 기존 아키마 알고리즘에 적용된 수정 사항은 기울기가 0에 더 가까운 쪽에 가중치를 더 줍니다. 수정된 알고리즘은 가로에 더 가까운 쪽에 우선 순위를 주는데, 이는 보다 직관적이면서 오버슈트를 방지합니다. (기존 아키마 알고리즘은 양쪽 점에 동일한 가중치를 주기 때문에 요동이 균일하게 분배됩니다.)

반면 스플라인 알고리즘은 3차 보간을 수행하여 연속 2계 도함수(C2)를 갖는 조각별 다항식들을 생성합니다. 결과는 일반적인 다항식 보간과 비슷하지만 높은 차수에서 데이터 점 사이의 심한 진동에 영향을 훨씬 덜 받습니다. 그렇지만 이 방법도 데이터 점 사이의 진동과 오버슈트의 영향을 받을 수 있습니다.

아키마 알고리즘은 스플라인 알고리즘과 비교했을 때 요동을 더 적게 생성하며 평탄 영역 간의 빠른 변화에 대응하기에 더 적합합니다. 다음은 여러 개의 평탄 영역을 연결하는 테스트 데이터를 사용하여 두 알고리즘의 차이를 도식화한 것입니다.

Plot of 1-D test data with multiple flat regions. The spline algorithm produces undulations in the flat regions, while the Akima algorithm smoothly connects the points.

참고 문헌

[1] Akima, Hiroshi. "A new method of interpolation and smooth curve fitting based on local procedures." Journal of the ACM (JACM) , 17.4, 1970, pp. 589-602.

[2] Akima, Hiroshi. "A method of bivariate interpolation and smooth surface fitting based on local procedures." Communications of the ACM , 17.1, 1974, pp. 18-20.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장