matlab 소개part 2mldm.tistory.com/attachment/499b87f37353d9g.pdf · 2015-01-21 · database &...

34
Matlab 소개 part 2 1 http://idb.korea.ac.kr DataBase & Mining LAB. Korea University 본 발표 자료는 mastering MATLAB 7, MATLAB An Introduction With Application, 임종수의 MATLAB7, Digital Image Processing using MATLAB 을 참조하였습니다.

Upload: vuongnhi

Post on 22-Jun-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Matlab 소개 part 2

1

http://idb.korea.ac.krDataBase & Mining LAB.

Korea University

본 발표 자료는 mastering MATLAB 7, MATLAB An Introduction With Application, 임종수의 MATLAB7,

Digital Image Processing using MATLAB 을 참조하였습니다.

목 차

v M-file§ 함수

§ 스크립트

v 제어

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이름과 가능한 같게 한다

3

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 변화 확인

함수 작성 유의사항

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라고 되어 있다.

5

v prod.m함수는 입력 매개변수로 주어진

벡터를 구성하는 각각의 원소에 대한

곱을 반환하는 함수(matlab에서 지원)

text editor 실행

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

v n!의 결과가 100을 넘어가기 전의 “n!’의 “n”을 구하시오

while 논리적인 조건

< 실행문 >end

10

.

.

% disp 대신 sprintf로 변경한 결과

Flow Control

v break, continue, return 은 개인적으로 확인하시기 바랍니다.

v try, catch : 예외 처리 기능§ try 다음에 나오는 명령문중에서 error가 발생하면 실행을 중단하고 , catch뒤

에 나오는 명령문을 실행한다. catch에서도 error가 발생하면 제어권을 matlab command window로 돌려준다.

§ 일종의 변형된 if/else문이다§ 일종의 변형된 if/else문이다

11

try< 명령문 1 >< 명령문 2 >…

catch< 명령문 3 >…

end

지역/전역 변수

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 다른 타입의 데이터를 같이 사용하는 배열§ [ ] 가 아닌 { } 를 사용한다

15

v Cellplot.m 을 통해 해당 cell 데이터 타입의 구성을 확인한다

Data Types : Struct 1

v 다음과 같은 구조를 갖는 record들로 구성되는 data field 가 있다

학생(record 이름)

성명 : 이 종욱

학번 : 2007001

학점 : [ 4.3 4.0 4.3 4.5 ]

v cell 방법 사용

16

v cell 방법 사용

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

Contour Plots 와 Meshv Contour Plots 와 Mesh

v plot3와 surf

18

Plot 2

% 그래프가 그려진 후 다음 명령을 실행해보자.

% 어떤 변화가 발생하는가?

>> xlabel('test plot x')

19

>> xlabel('test plot x')

>> ylabel('test plot y');

>> title('plot 연습')

v 선 지정 : 빨간 쇄선, 별마크

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 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) 형태인 함수 값을 지정된 한계 사이에서 그래프를정확하게 그려주는 명령

v y = x^2 + 4*sine(2x) -1 그래프 그리기

fplot(‘function’, limits, line specifiers)

22

variable save

v 첫번째 : MATLAB 프로그램 상단 File/Save§ 확장자 mat

§ mat은 binary로 저장된다

v 두번째 : Command Window 에서 저장§ 현재 사용된 모든 variable 저장

§ 필요한 variable 저장

23

v tip1 : workspace에 있는 변수들을 모두 삭제할 때 clear all

v tip2 : 변수들 정보 확인할 때 whos

variable load 1

v 첫번째 : MATLAB 프로그램 상단 File/Open 을 이용하여 해당 파일 load

v 두번째 : Command Window에서§ 모든 variable 가져오기

v exe_01.mat 파일을 읽으면,

§ 일부분 variable 가져오기

24

v exe_01.mat 파일을 읽으면,

Workspace에 해당 variable이

등록된다.

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+ : 자료를 읽고 쓸 수 있음

26

>> fid = fopen('aaa.txt', 'r')

fid =

-1

해당 파일이 Path 안에 없으므로 fid 값을 -1

- 실패 할 경우 fid값 -1

- 1인 경우에는 screen에 표시하라는 뜻

- 2인 경우에는 표준 error

fid = fopen(파일 이름, 모드(mode))

- 주어진 파일(확장자 포함)을 open하는데 성공하면, 파일 식별자(file identifier) fid에

3이상의 양의 정수를 반환하고, 실패할 경우에는 -1을 돌려준다

- fid는 file handle이다

File close

v 열려있는 파일을 닫아주는 함수 fclose.m

st = fclose(fid)

- fopen.m함수에 의해 반환된 파일 식별자 fid를 이용하여 열려있는 파일을 닫아준다

- 파일을 닫아주는데 성공하면, “0”을 반환하고, 실패하면 “-1”을 반환

st = fclose(‘all’)

27

st = fclose(‘all’)

- 열려 있는 모든 파일을 닫아준다

v 관련 책들을 보면서 추가 사항들을 확인하시기 바랍니다.

데이터를 쓰는 fprintf.m

v 파일을 열고난 후, 그 파일에 데이터를 쓰는 fprintf.m

count = fprintf( fid, format, A, … )

- 행렬 A에서 실수 부(real part)를 주어진 format에 맞추어 열려 있는 파일(fid)에

쓰기(write)를 행한다.

- fprintf함수를 이용해 쓰여진 bytes수가 리턴된다. 그 값이 count변수 저장됨

v format 예

28

fprintf( fid, format, A, … )

- screen(standard output)에 행렬 A를 표시한다

%-12.5e% 사용하려는 format 시작 알림

- 주어진 필드에서 왼쪽(flag) 정렬

12.5 정수부는 12자리 이내, 소수는 5자리

e 지수 형태로 표시, d 10진수 표시

데이터를 읽는 fscanf

v 파일을 열고 난 후, 해당 파일에 있는 데이터를 읽어 들이는 함수

[ A, count ] = fscanf( fid, format, size )

- fopen.m함수에 의해 열려있는 파일(fid)을 주어진 format에 맞게 size에 서술된

크기로 읽어 들인다.

- count는 읽어 들인 데이터의 수를 의미

29

A = fscanf( fid, format )

- format에 의거하여 데이터를 읽어 들인 뒤에 열 벡터의 형태로 반환한다.

size 추가

- n : n개의 데이터를 열 벡터의 형태로 읽어 들인다

- inf : 주어진 파일의 끝까지 읽어 들인다.

- [m, n] : m x n 의 크기를 갖는 행렬의 형태로 읽어들인다. n은 inf가 될수 있으나

m은 될수 없다. exe) [2, inf] : 2 x 열의 값이 있을때까지

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)

31

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)

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레벨으로 설정

33

§ 예

Ø imshow(f)

Graphics with MatLab 4

v 영상 저장§ imwrite(f, ‘파일명’, ‘파일형식’)

§ 예

Ø imwrite(f, ‘korea_pic.jpg’)

Ø imwrite(f, ‘korea_pic_02’, ‘jpg’)

34

§ JPEG 영상 에만 가능한 기법

Ø imwrite(f, ‘korea_compression.jpg’, ‘quality’, 50)

Ø영상 압축률을 지정하여 저장한다