MATLAB 의 연산은 기본적으로 매트릭스 연산을 기본으로 한다. 따라서 매트릭스 또는 벡터의 연산에 매우 편리하도록 구성이 되어 있다. 반면에 for 나 while 같은 루프 문의 경우에는 비교적 그 처리 속도가 느린 단점이 있다. 따라서 for 나 while 같은 루프 문은 가급적이면 안 쓰는 방향으로 코딩을 하는 것이 좋다. for 나 while 같은 루프 문을 매트릭스 또는 벡터 연산으로 처리 하는 것을 벡터화 기법이라 한다.
다음 수식에 대해 M 파일 코딩을 해 보자.
위 수식에 대해 for 문을 이용해서 코딩을 하고 tic, toc 을 이용하여 처리 시간을 측정 해보자.
tic
sum_v=0; % sum 초기값 설정
for n = 1:100
sum_v =sum_v + n^4; % 4 승
end
fprintf('%g \n',sum_v); % 화면 출력
toc
위 코드를 실행하면 Command 창에 다음과 같은 결과가 나옴을 확인 할 수 있다.
2.05033e+009
Elapsed time is 0.000682 seconds.
이제 위 for 루프 문을 벡터화 하여 처리를 하고 그 처리 시간을 확인 해 보자.
tic
Sum_v=sum((1:100).^4); % 각 인자 값의 4승을 하기 위해 .^ 연산을 이용
fprintf('%g \n',Sum_v); % 화면 출력
toc
위 코드의 결과는 다음과 같다.
2.05033e+009
Elapsed time is 0.000318 seconds.
for 문을 이용하였을 경우 0.000682 초가 걸린 반면에 벡터화 해서 처리하는 경우 0.000318 초가 걸리는 것을 확인 할 수 있다. 위 예제는 매우 간단한 예였으므로 그 차이가 그리 크지 않지만 매우 큰 루프문을 이용할 때는 그 차이가 훨씬 더 확연하다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB interpolation, interp1() (0) | 2011.03.19 |
---|---|
MATLAB 기본 2 (0) | 2011.03.19 |
MATLAB subplot() (0) | 2011.03.16 |
MATLAB 입력 신호의 delay 확인 xcorr(), finddelay() (0) | 2011.03.14 |
MATLAB 적분 추가 내용 trapz() (0) | 2011.03.14 |
MATLAB 적분 int(), quad() (6) | 2011.03.14 |
MATLAB 함수의 해를 구해 보자~ fzero(), roots(), poly() (2) | 2011.03.13 |
MATLAB ezplot() 함수로 그래프를 쉽게 그리자 (2) | 2011.03.13 |
댓글