실험 데이터가 너무 적을 경우 그 경향성을 알아보기 위하여 실험 데이터의 중간 값들을 알아내야 하는 경우가 있다. 이런 경우 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 그래프의 형태가 아닌 것을 알 수 있다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB 기본3, sort, if ~ end, for ~ end, max, min (4) | 2011.03.21 |
---|---|
MATLAB erf, erfc, Q- function (2) | 2011.03.19 |
MATLAB BPSK BER simulation in AWGN channel (77) | 2011.03.19 |
MATLAB 반올림 관련 함수들 round, fix, ceil, floor (4) | 2011.03.19 |
MATLAB 기본 2 (0) | 2011.03.19 |
MATLAB subplot() (0) | 2011.03.16 |
MATLAB 입력 신호의 delay 확인 xcorr(), finddelay() (0) | 2011.03.14 |
MATLAB 벡터화 기법 (0) | 2011.03.14 |
댓글