본문 바로가기
programming language/MATLAB

MATLAB interpolation, interp1()

by 남성 2011. 3. 19.

실험 데이터가 너무 적을 경우 그 경향성을 알아보기 위하여 실험 데이터의 중간 값들을 알아내야 하는 경우가 있다. 이런 경우 interpolation 을 수행하여 수학적으로 중간의 값들을 추정 하곤 한다. 이러한 수치적인 interpolation 을 해 주는 함수 중 하나가 interp1 함수 이다.

 

다음과 같은 데이터를 가정해 보자.

 

X=0:10

X =

0 1 2 3 4 5 6 7 8 9 10

 

Y=sin(X)

Y =

0 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 0.4121 -0.5440

 

위 코드의 Y 값은 간단하게 0, 1, 2, … 10 값에 대한 sin() 값을 나타낸다. 위 값들을 이용하여 X 값이 0, 0.01, 0.02, 0.03, 과 같이 0~10 사이의 중간의 값들을 interp1() 함수를 통해 확인 할 수 있다.

 

X2=0:0.01:10; % 0~10 사이를 0.01 간격으로 설정

 

Y2=interp1(X, Y, X2);

 

plot(X,Y,'r>', X2,Y2,'b--'), grid on

 

 

위 결과를 보면 interpolation 이란 중간 값들을 얻기 위해 빨간색 삼각형 들을 이은 것이라 할 수 있다. interp1() 함수는 기본적으로 linear interpolation 방식을 이용한다. 빨간 삼각형 사이를 직선으로 쭉쭉 이은 것이니 만큼 뭔가 sin 그래프 처럼 보이지가 않는다.

 

그럼 spline interpolation 방식을 이용하여 약간 곡선으로 interpolation 을 해보자.

 

 

Y_spline=interp1(X, Y, X2, 'spline');

 

plot(X,Y,'r>', X2,Y_spline,'b--'), grid on

 

 

그림을 보면 일단 번째 그림 보다 훨씬 sin 그래프에 가까운 것을 확인 수가 있다.

 

다음으로 extrapolation 수행해 보자. extrapolation 이란 데이터 범위 밖의 값들을 추정 하는 이다. 예에서는 x 값이 10 초과 또는 0 미만의 값들은 extrapolation 통해 수학적으로 추정하게 되는 것이다.

 

 

X4=-2:0.1:12;

 

Y_spline_extra=interp1(X, Y, X4, 'spline', 'extrap');

 

figure, plot(X,Y,'r>', X4,Y_spline_extra,'b--'), grid on

 

 

위 그림에서는 0~10 사이가 아닌 값들도 extrapolation 을 통해 수학적인 추정을 함을 확인 할 수 있다. 하지만 0~10 밖의 값들은 sin 그래프의 형태가 아닌 것을 알 수 있다.


댓글0