I. 매트랩(MATLAB) [MATLAB 이란?] Matlab은 Mathworks Inc.에서 개발한 Software 이다. 다양한 수치 해석 관련 문제에 대한 Total Solution 제공. 사용하는 OS 에 상관없이 동일한 사용 방법 제공. 수많은 데이터 display functions 제공. 수많은 응용분야에 대한 전문적인 Toolbox 제공. 쉽고 빠른 script 양식의 Coding 기법 이용. 다른 언어(e.g., C/C++, Ada etc)로 쉽게 변환 가능. Java 의 고속 interpreter 를 사용한 빠른 실행 속도. 개발용 및 상용 보드에 대한 device driver 제공.(GPIB, PCI) 통신 및 신호처리용 CPU 를 위한 embedded source code 생 성. 윈도우에서 매트랩을 실행시키면 프롬프트가 >> 또는? 인 윈도우가 하나 뜨는데, 이 윈도우를 command window 라고 한다. Command window 는 매트랩에서 제공하는 명령어나 사용자가 만든 함수(명령어)를 실행시키는 main window 이다. Figure 1. MATLAB command window, editor and PATH-browser
자주 쓰는 기본적인 명령어 help: 3 가지로 분류할 수 있다. >>help % 현재 설치된 모든 toolbox(topic) 정보를 볼 수 있다. >>help function % 함수에 대한 설명을 볼 수 있다. >>help topic % topic 내의 모든 함수를 리스트 업 한다. Examples help signal % signal processing toolbox 내의 모든 함수를 보인다. help general % 일반적인 명령어에 대한 설명을 보여준다. General 안의 중요 명령어 pwd: 현재 디렉토리를 알 수 있다. dir: 현재 디렉토리 내에 있는 파일의 종류를 볼 수 있다. cd directory_name: 현재 디렉토리의 위치를 바꾼다. delete file_name: 파일 이름 지우기 who: 사용자가 만든 변수 이름을 볼 수 있다. cf.) whos 크기 정보 clear variable_name: 사용자가 만든 변수를 지울 수 있다. cf.) clear all, clc close figure #: 표시된 창을 닫는다. cf.) close all edit (function name): MATLAB-editor/debugger 프로그램을 실행 시키고 function 의 내용을 보여준다. editpath: path-browser 프로그램을 실행시킨다. lookfor term: 찾고자 하는 term 이 있는 함수들을 찾아 준다. Figure 2. Example of "lookfor" command 2
II. Data manipulation and matrix operations 가. Matrix 의 생성 >> A = [ 1 2 3; 4 5 6 ; 7 8 9 ] 또는, >> A = [ 1 2 3 456 789 ] A 1 1 1 = 1 2 3 1 3 6 A=[1 1 1;1 2 3;1 3 6]; ()와,로 표시, 첨자는 1 부터 시작 >> A(2,1) % A의 2행 1열의 원소 : operator 시작:끝 >> 1:4 1 2 3 4 시작:증분:긑 >> 5:-2:1 5 3 1 행 또는 열 전체 >> A(2,:) A 의 2 행 >> A(:,1) A 의 1 열 나. Matrix operations assignment A = B; addition: C = A + B; subtraction: C = A - B; multiplication: C = A * B; % cf. C = A.* B; division : C = B / A; % 이것은 X * A = B 에 대한 해이다. Example >> a=[ 1 2 3]; >> b=[4 5 6]; 3
>> c= a * b >> d = a. * b >> e= a./b 다. Relational operations <, <=, >, >=, ==, ~= % C 에서는!= 이다. Example >> a=3; >> b=5; >> if a~=b disp('a is not equal to b') else disp('b is equal to a') end 라. logical operations &,, ~ % C 에서는 &&,,! 이다. 마. 수학함수 매트랩에서는 C 나 FORTRAN 에서 일반적으로 제공되는 대부분의 함수를 모두 제공한다. sin, cos, tan, asin, acos atan, sinh,... 바. 그 외 abs, angle, sqrt, round, fix, floor,... 사. Vector 의 생성 >> x = 1:5 x = 1 2 3 4 5 >> x = 0.0:0.2:1.0 ; % x=초기치:차분:최종치 >> x = x'; >> y = sin(x); 4
>> z = [ x y ]; 아. Subscription >> A = [ 1 2 3 ; 4 5 6] ; >> B = A( :, 1 ) >> B = A( 1:2, : ) >> B( 3, : ) = [ ]; 자. Data analysis >> a = [ 1 4 7 10 2 5 8 11 3 6 9 12] ; >> b = reshape(a, 2, 6) b = 1 3 5 7 9 11 2 4 6 8 10 12 차. 기타 매트랩 팁 1) 문장의 끝에 ; 을 사용하면, 결과를 display 하지 않음 2) Matlab 의 행렬 연산에서.(dot) 는 원소대원소 연산을 해주는 상당히 중요한 의미를 갖는다. 3) >> x=[ ] % [ ] 은 빈행렬을 만들어 준다. 4) % 는 주석 표기이다. 5) >> pi ans = 3.14159265358979 6) 한 개의 line 에 여러 개의 명령어들을 동시에 지정할 수 있다. >>x=3; y=2; z=x+y; 7) 수치를 표현할 때, 0.234 와.234 는 같은 표현이다. 8) 문자열은 단일 인용부호(즉, )를 사용하여 표현한다. >>s= lim jong su 9) 행렬 크기 구하기 >> a=[ 1 2 3; 4 5 6]; 5
>> size(a) 10) 행렬 종류 eye : 단위행렬 ex) eye(3) ones : 1 로 채워진 행렬 ex) ones(3), ones(1,2) zeros : 0 으로 채워진 행렬 ex) zeros(3), zeros(1,2) rand(randn) : Uniform (Normal) random 값 행렬 ex) rand(3), randn(2,4) inv : 역행렬 ex) inv(a) III. Control flow C 와 마찬가지로 매트랩에는 for, while, if, break 문 등이 있는데, syntax 또 한 거의 유사하다. 가. for for i = 1: m statements for j = 1 : n A(i, j) = i + j; other statements; end end [주의] for 문을 사용하는 경우, matlab 의 first array index 가 1 인데 주 의하자! 나. while 일반적인 while 문의 형태는 다음과 같다. while expression statements; end n = 10; while n > 0 statements; n = n -1 ; 6
end 다. if A = rand(5, 1) ; % random number generation, 5 x 1 matrix n = input( ' Enter n, '); if n < 0 minvalue = min( A ); elseif n == 0 medvalue = med( A ); else n > 0 maxvalue = max( A ); 7
IV. Scripts and functions 가. Script file 1. 앞에서 보여진 것과 같이 open 버튼을 누르던지 컴맨드 라 인 상에서 edit 라 입력하여 MATLAB editor 를 실행시킨다. 다 음과 같은 내용의 파일을 작성하여 mean.m 이라는 파일로 저장 한다. % The contents of this file is as follows. x = rand( 100, 1 ); sum_x = sum( x ) ; mean_x = sum_x / 100; >> mean 2. 매트랩 command window 에서 mean 을 실행시킨다. 3. Script file의 예 다음과 같이 seminar.m 을 작성하여 저장한다. Figure 3 seminar.m 8
seminar.m function 을 실행시키기 위해서 command window 에서 다음과 같이 입력 >> seminar Figure 4. input "x" 여기에서 아무 키나 누르면 다음과 같은 그림이 나타남. 9
나. Function file Figure 5. The FFT result of "x" 사용자가 특정한 기능을 갖는 함수를 구현하고 매트랩 내의 M-file 처럼 사 용할 수 있다. Script 파일을 만들 때와 동일한 방법으로 파일을 작성하여 저장하면 되는데, Script 파일과 다른 점은 입력 매개 변수를 전달하고 출 력값을 원하는 변수에 return 할 수 있다는 것이다. 1. M-function mymean.m function y = mymean( x ) % This file calculate average value % For vectors, mymean(x) returns the mean value. % For matrix, mean(x) is a row vector % containing the mean value of each column. % % Eui-Sung Kang, Image Proc. Lab. % KOREA Univ. [ m, n ] = size( x ) ; if m == 1; m = n ; 10
end y = sum( x ) / m ; % the end of file mymean.m >> data = 1:10; >> output = mymean(data); >> who output 2. M-function 에 대한 help 아무리 유용한 프로그램을 자기가 작성하더라도, 시일이 오래 지나면 자기가 짠 프로그램이 무엇 하는 것인지, 어떻게 동작하는지 잊어버리는 경우가 태 반이다. 프로그램 작성 후에는 자기가 짠 프로그램에 대한 documentation 을 해두는 버릇을 들이는 것이 바람직하다. help 라는 명령을 이용하면 자신이 작성한 M-function 파일에 대한 documentation 뿐만 아니라, 이미 작성된 프로그램을 다른 사람이 한 눈에 알아볼 수 있게 할 수 있다. 앞서서 설명한 mean.m 의 경우에 command window 에서 help mean 이라고 입력하면, 아래와 같은 결과를 얻을 수 있다. >> help mean This file calculate average value For vectors, mymean(x) returns the mean value. For matrix, mean(x) is a row vector containing the mean value of each column. 3. nargin 과 nargout M-function file 을 작성할 때, 프로그램의 flexibility 를 위해서 입출력 파라 미터의 개수가 가변으로 하고 싶을 때가 있다. 이 경우 M-function file 의 입출력 파라미터의 개수를 체크하는 nargin 과 nargout 를 사용하면 편리하 다. 11
function b = medfilt2(a,mn,block) %MEDFILT2 Two-dimensional median filtering. % J = MEDFILT2(I,[M N]) performs median filtering of the % image I in two dimensions. The result J contains the % median value in the M-by-N neighborhood around each pixel % in the original image. The image is assumed to be padded % with 0s outside so the median values for the points within % [M N]/2 of the edges may appear distorted. Block processing % is used to save memory (see BESTBLK). % J = MEDFILT2(I) uses a 3-by-3 neighborhood. % J = MEDFILT2(I,[M N],[MBLOCK NBLOCK]) performs median % filtering of I in blocks of size MBLOCK-by-NBLOCK. Use % MEDFILT2(I,[M N],SIZE(I)) to process the matrix all at once. error(nargchk(1,3,nargin)); if nargin<2, mn = [3 3]; end if nargin<3, block = bestblk(size(a)); end if all(block>=size(a)), b = colfilt(a,mn,'sliding','median'); else b = colfilt(a,mn,block,'sliding','median'); end 4. 문자열 입력 매개변수 M-function file 을 작성할 때, 문자열을 입력으로 사용하고 싶을 때가 있다. 이 때, eval 이란 함수를 사용하면 편리하다. 다음은 eval 을 사용한 M- function 파일의 예로서 데이타 파일 이름을 입력으로 사용하여 데이타를 로 드하는 함수이다. function out=loadfile(filename) % eval(['load ' filename]); out=eval(filename); 12
V. Exporting and importing data 가. Exporting data A = rand( 5, 4 ); save data.txt A -ascii 위와 같이 저장하면 A 라는 변수에 들어 있는 데이타가 아스키 파일로 저장 된다. save data A A 라는 변수가 data.mat 라는 매트랩 데이타 파일이 만들어진다. *.mat 는 매 트랩에서 사용되는 default 확장자로서, 이러한 파일은 다른 응용 프로그램 에서 읽을 수 없다. save 단순히 save 라고 입력하면 현재 사용자가 매트랩에서 현재 사용하고 있는 모든 데이타가 matlab.mat 라는 파일로 저장된다. 이 경우는 현재의 command window 에 생성되어 있는 변수 이름과 변수에 할당된 데이타 등 을 그대로 저장할 수 있으므로, 현재 진행 중인 일을 일시적으로 중단했다가 나중에 다시 시작하고 싶을 때 유용하다. 나. Importing data Load data.mat 13
VI. Programming Tips on the Matlab Programs Avoid FOR loops FOR loop 를 많이 사용한 매트랩 프로그램은 아주 비효율적이다. 가급적이면 vector 또는 matrix operations 을 사용한다. 프로그램 내의 FOR loop 90% 이상을 vector code 로 대치할 수 있 다. built-in function 또는 toolbox 내의 M-function 을 많이 이용한다. Vector logicals [1 2 3 4 5] < 4 nn = [-20:80]; impluse = (nn == 0); stem(nn, impluse); VII. Graphic functions 매트랩은 다양한 그래픽 함수를 제공한다 2 차원 함수 : plot.m, contour.m, stem.m, stairs.m, pie.m, bar.m, etc 3 차원 함수 : mesh.m, surf.m, contour3.m, plot3.m, etc 복소 함수 : polar.m, rose.m, feather.m, compass.m, etc 보조 함수 : meshgrid.m, hidden on/off, legend.m,rotate3d.m etc 좌표변환 함수 : cart2pol.m, pol2cart.m, cart2sph.m, sph2cart.m Ex) >> x= 1:1:10; >> y= x.^2 + 5; >> plot(x,y) >> figure, plot(x,y,'r*'); % r : red, b blue. point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star 14
y yellow s square k black d diamond v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram 참고문헌 [1] S. D. Stearns and R. A. David, Signal processing algorithms in Matlab, NJ: Prentice Hall, 1996. [2] B. P. Lathi, Linear systems and signals, CA: Berkeley-Cambridge Press, 1992. [3] C. S. Burrus, et al., Computer-based exercises for signal processing using Matlab, NJ: Englewood Cliffs, 1994. [4] R. D. Strum and D. E. Kirk, Comtemporary linear systems, Boston: PWS, 1994. [5] C. M. Thompson and Loren Shure, Image processing toolbox, Mass: MathWorks Inc., 1993. [6] Math Works, Matlab user s quide, Mass: MathWorks Inc., 1993. [7] Math Works, Matlab reference quide, Mass: MathWorks Inc., 1993. 본 매뉴얼은 Matlab 을 공부하는데 필요한 가장 기본적인 내용만을 요약 한 것입니다. 기타 궁금한 사항은 Matlab 매뉴얼인 참고문헌 [6], [7]을 참고하거나, Matlab 에서 help 를 이용하세요. 15