Matlab 소개 part 2 http://idb.korea.ac.kr DataBase & Mining LAB. Korea University 본발표자료는 mastering MATLAB 7, MATLAB An Introduction With Application, 임종수의 MATLAB7, Digital Image Processing using MATLAB 을참조하였습니다. 1
목차 v M-file v 제어 v 변수 함수 스크립트 v 데이터타입 v Plot v variable save/load v File Open/Close, 데이터를쓰고, 읽는 fprintf, fscanf v Graphics with MatLab v 본강의자료는 MATLAB 을사용하기위한가장기본적인내용만다루고있습니다. 따라서관련교재들을반드시참조하시기바랍니다. 2
M-file Programming 1 v M-file : Matlab언어로쓰여진파일들 (files) v 연속적인 Matlab문장들 ( 명령어들 ) 을수행하는 script mode 파일이름은어떠한이름으로도사용가능 v 입력매개변수와출력매개변수를다루는 function mode 파일의이름은 function 이름과가능한같게한다 v text editor 를이용하여 M-file 작성 v command window 에서 M-file 을부르거나, 다른 M-file 내에서호출 v 비교 function : 변수가 function workspace에등록됨. script : 변수가 base workspace(command workspace) 에등록됨. ( 전역변수 ) 6,7 페이지에있는 function과 script를실행할때 workspace 변화확인 3
함수작성유의사항 v 파일첫줄에 function 이라는단어가있는 M- 파일이함수파일 function 변수 = 파일이름 ( 인자 ) function [Pccoeff, Pcvec] = pca(data, N) v 스크립트와의큰차이점은 function 이없으면스크립트로인식 v 파일이름의이름으로사용된이름이함수의이름과같아야함 v % 기호뒤에나오는문장들은주석으로인식되어무시 v % 기호와함께적어놓은설명부분은 MATLAB 프롬프트에서 help mean 이라고입력하였을때화면상에표시 v 첫번째로 % 기호이후의주석은 lookfor mean 이라고입력하면화면에 mean 이라는단어를포함하는항목을모두표시 4
function 작성 v Matlab Command Window 에서 fact(2) 를해보자 다음과같은메시지가나온다??? Undefined command/function 'fact'. v 작성한후디스크모양의 Save 를 클릭하면저장화면이뜨고, 저장할이름에 fact 라고되어있다. text editor 실행 v prod.m 함수는입력매개변수로주어진 벡터를구성하는각각의원소에대한 곱을반환하는함수 (matlab 에서지원 ) 5
Script 작성 v text editor 에서 y=prod(1:n) 이라고작성한뒤, script_fact.m 으로저장 6
기본함수설명 v disp.m : 주어진 메시지 문자열을화면에출력. disp( 메시지 ) v rem.m : 주어진배열 a,b 에대해 a./b 를계산하여나머지들을반환한다. Y = rem(a, b) v fix.m : 주어진배열 X 의원소들의소수부분을제거하고정수로만이루어진배열을만든다 Y = fix(x) 7
Flow Control : if/switch case v 임의의벡터 x 가홀 / 짝수를구별하는 exe_fc.m 함수를작성한다. 입력이없으면 error 메세지출력 8
Flow Control : for v for 변수 = 시작값 : 증가분 : 최종값 < 실행문 > end v k = i+2 는어떤결과가나올까? 9
Flow Control : while while 논리적인조건 < 실행문 > end v n! 의결과가 100 을넘어가기전의 n! 의 n 을구하시오.. % disp 대신 sprintf 로변경한결과 10
Flow Control v break, continue, return 은개인적으로확인하시기바랍니다. v try, catch : 예외처리기능 try 다음에나오는명령문중에서 error 가발생하면실행을중단하고, catch 뒤에나오는명령문을실행한다. catch 에서도 error 가발생하면제어권을 matlab command window 로돌려준다. 일종의변형된 if/else 문이다 try < 명령문 1 > < 명령문 2 > catch < 명령문 3 > end 11
지역 / 전역변수 v Local variables 각각의 matlab function 은자신만의 local variables 를가지고있다. 단 nested function( 다른함수안에명시적으로 encapulated 한함수 ) 제외 script 의경우는독립적인 variable 이아닌호출한곳의 workspace 에데이터를저장. 따라서 command window 에서호출되면 base workspace 에저장. 함수에서호출되면해당함수 workspace 에저장 v Global variables 서로다른 workspace 간데이터를교환하고싶은경우에는입 / 출력매개변수를이용하거나전역변수를이용 global 로선언한다. ex) global n v 추가사항 2 차원배열을참조할때, A(2,3) 원소를인덱스로표현하면 A(8) 이다. why?! matlab 은열우선으로저장한다. 12
Data Types : 다차원배열 v 2, 3, 4 차원배열등의다차원배열사용가능 v 3 차원배열예 v 다차원배열을만드는함수들 ones.m, zeros.m, rand.m, randn.m, cat.m, reshpae.m, repmat.m 등 13
Data Types : String v 문자열 (text strings) 은단일인용부호 (single quotes ) 로둘러싸여표현된다 14
Data Types : Cell v 다른타입의데이터를같이사용하는배열 [ ] 가아닌 { } 를사용한다 v Cellplot.m 을통해해당 cell 데이터타입의구성을확인한다 15
Data Types : Struct 1 v 다음과같은구조를갖는 record 들로구성되는 data field 가있다 학생 (record 이름 ) 성명 : 이종욱학번 : 2007001 학점 : [ 4.3 4.0 4.3 4.5 ] v cell 방법사용 16
Data Types : Struct 2 v C 언어에서배운 struct 와같은방식으로 field 를지정하여 record 저장할수있다. % 각각의 field 는 C 언어와같이.(dot) 으로구분 % field name 을이용하여 struct type students 의 field 에접근 17
Plot 1 v Line Plots : plot.m, ploty.m, loglog.m etc v Bar Plots : bar.m, barh.m etc v Scatter Plots v Pie Charts v Contour Plots 와 Mesh v plot3 와 surf 18
Plot 2 % 그래프가그려진후다음명령을실행해보자. % 어떤변화가발생하는가? >> xlabel('test plot x') >> ylabel('test plot y'); >> title('plot 연습 ') v 선지정 : 빨간쇄선, 별마크 19
Plot 3 v Grid : 그래프의눈금표시에서의격자를설정 해제한다. v Box : 축상자를설정 해제한다. v 제목과축의라벨들은 title, xlabel, ylabel 을사용하여첨가 v text(x,y,s) : 좌표 (x,y) 에문자열 S 를첨가한다. v Gtext : 마우스를사용하여대화식으로텍스트를첨가 v axis([xmin xmax ymin ymax]) 는현재의그래프의비율을주어진값으로 설정 v hold on : 현재의그래프에그래프를더추가 (cf. hold off) v figure : 다중그림창을생성. figure(n) 은 n 번째의그림창을활성화함. v 하나의 figure 는 subplot 명령을사용하여나뉘어질수있음. v zoom on 으로설정해두면, 마우스로그림창을확대할수있음. 20
Plot 4 21
fplot v fplot 명령은 y = f(x) 형태인함수값을지정된한계사이에서그래프를정확하게그려주는명령 fplot( function, limits, line specifiers) v y = x^2 + 4*sine(2x) -1 그래프그리기 22
variable save v 첫번째 : MATLAB 프로그램상단 File/Save 확장자 mat mat은 binary로저장된다 v 두번째 : Command Window 에서저장 현재사용된모든 variable 저장 필요한 variable 저장 v tip1 : workspace 에있는변수들을모두삭제할때 clear all v tip2 : 변수들정보확인할때 whos 23
variable load 1 v 첫번째 : MATLAB 프로그램상단 File/Open 을이용하여해당파일 load v 두번째 : Command Window 에서 모든 variable 가져오기 v exe_01.mat 파일을읽으면, Workspace 에해당 variable 이 등록된다. 일부분 variable 가져오기 24
variable load 2 v 여러파일들을가져와야할때 현재 work 폴더에 exe_01.mat ~ exe_04.mat 파일존재 25
File open v mat파일뿐아니라 txt, dat 파일을사용하는방법 v fid = fopen('dat.dat','r'); r : 자료를읽음, default mode w: 자료를쓸수만있음, w+: 자료를읽고쓸수있다. a : 자료를추가할수있음 r+ : 자료를읽고쓸수있음 fid = fopen( 파일이름, 모드 (mode)) - 주어진파일 ( 확장자포함 ) 을 open하는데성공하면, 파일식별자 (file identifier) fid에 3이상의양의정수를반환하고, 실패할경우에는 -1을돌려준다 - fid는 file handle이다 >> fid = fopen('aaa.txt', 'r') fid = -1 해당파일이 Path 안에없으므로 fid 값을 -1 - 실패할경우 fid 값 -1-1 인경우에는 screen 에표시하라는뜻 - 2 인경우에는표준 error 26
File close v 열려있는파일을닫아주는함수 fclose.m st = fclose(fid) - fopen.m함수에의해반환된파일식별자 fid를이용하여열려있는파일을닫아준다 - 파일을닫아주는데성공하면, 0 을반환하고, 실패하면 -1 을반환 st = fclose( all ) - 열려있는모든파일을닫아준다 v 관련책들을보면서추가사항들을확인하시기바랍니다. 27
데이터를쓰는 fprintf.m v 파일을열고난후, 그파일에데이터를쓰는 fprintf.m count = fprintf( fid, format, A, ) - 행렬 A에서실수부 (real part) 를주어진 format에맞추어열려있는파일 (fid) 에쓰기 (write) 를행한다. - fprintf함수를이용해쓰여진 bytes수가리턴된다. 그값이 count변수저장됨 fprintf( fid, format, A, ) - screen(standard output) 에행렬 A 를표시한다 v format 예 %-12.5e % 사용하려는 format 시작알림 - 주어진필드에서왼쪽 (flag) 정렬 12.5 정수부는 12자리이내, 소수는 5자리 e 지수형태로표시, d 10진수표시 28
데이터를읽는 fscanf v 파일을열고난후, 해당파일에있는데이터를읽어들이는함수 [ A, count ] = fscanf( fid, format, size ) - fopen.m함수에의해열려있는파일 (fid) 을주어진 format에맞게 size에서술된크기로읽어들인다. - count는읽어들인데이터의수를의미 A = fscanf( fid, format ) - format 에의거하여데이터를읽어들인뒤에열벡터의형태로반환한다. size 추가 - n : n개의데이터를열벡터의형태로읽어들인다 - inf : 주어진파일의끝까지읽어들인다. - [m, n] : m x n 의크기를갖는행렬의형태로읽어들인다. n은 inf가될수있으나 m 은될수없다. exe) [2, inf] : 2 x 열의값이있을때까지 29
File open/close 예제 v exp.txt 파일을만들고 ( 열고 ), 그안에해당연산값을저장한다 v exp.txt 에저장된값을읽고 (read) 그값을변수 a 에저장한다 30
Graphics with MatLab 1 v 디지털영상표현 영상은 2차원함수 f(x,y) 로정의 공간좌표평면 (x,y) 샘플링 ( 표본화 ), 양자화후좌표화 f(0,0) f(0,1).. f(0,n) f(1,0) f(1,1).. f(1,n) f(x,y) = f(2,0) f(2,1).. f(2,n)..... f(m,1) f(m,2).. f(m,n) 31
Graphics with MatLab 2 v 영상읽기 imread( 경로 \ 파일명 ) 예 Ø f = imread('c:\program Files\MATLAB71\work\kus105.jpg'); whos f Ø 사이즈크기등배열에관한추가정보표시 2005.9.21.Wed Sky 101 Team master 32
Graphics with MatLab 3 v 영상표시 imshow(f,g) Ø f 는영상배열 Ø g 는밝기레벨수 Ø g 입력안할경우기본값 256레벨으로설정 예 Ø imshow(f) 33
Graphics with MatLab 4 v 영상저장 imwrite(f, 파일명, 파일형식 ) 예 Ø imwrite(f, korea_pic.jpg ) Ø imwrite(f, korea_pic_02, jpg ) JPEG 영상에만가능한기법 Ø imwrite(f, korea_compression.jpg, quality, 50) Ø 영상압축률을지정하여저장한다 34