lec 05. useful functions for m-file programming

23
MATLAB Programming M-file 작성시 유용한 함수들 김탁은 [email protected] 1

Upload: tak-eun-kim

Post on 26-Dec-2014

607 views

Category:

Education


18 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Lec 05. Useful functions for M-file programming

MATLAB Programming

M-file 작성시 유용한 함수들

김 탁 은[email protected]

1

Page 2: Lec 05. Useful functions for M-file programming

MATLAB Programming

input 함수

사용자의 입력을 기다리는 함수

• r = input( prompt )– prompt 문자열을 화면에 출력하고 사용자의 입력을 기다림– 사용자가 입력한 문자열을 evaluation 하고, 그 결과를 r 값으로 반환– 사용자의 입력에 나타난 변수는 workspace에 미리 선언되어 있어야 함

>> x = 5;>> r = input('변수명이나수식을입력하세요 : ')변수명이나수식을입력하세요 : sin(x^2)

r =-0.1324

>> r = input('변수이름이나수식을입력하세요. : ')변수이름이나수식을입력하세요. : yError using inputUndefined function or variable 'y'.

>> r = input('변수명이나수식을입력하세요 : ')변수명이나수식을입력하세요 : my_triu( magic(4), 1 )

r =

0 2 3 130 0 10 80 0 0 120 0 0 0

>> s = struct('name', '홍길동', 'age', 30);>> r = input('변수명이나수식을입력하세요 : ')변수명이나수식을입력하세요 : s.name

r =홍길동

>> r = input('변수명이나수식을입력하세요 : ')변수명이나수식을입력하세요 : 'hello world'

r =

hello world 2

Page 3: Lec 05. Useful functions for M-file programming

MATLAB Programming

input 함수

• str = input( prompt , ‘s’ )– prompt 문자열을 출력하고 사용자의 입력을 기다림– 사용자의 입력을 평가 (evaluation) 하지 않고, 문자열로 반환

>> reply = input( 'Do you want more? Y/N [Y]:', 's‘ );>> if isempty(reply), reply = 'Y'; end>> reply

reply =

Y

>> str = input( '아무문자나입력하세요 : ', 's')아무문자나입력하세요 : 안녕하세요

str =

안녕하세요

3

Page 4: Lec 05. Useful functions for M-file programming

MATLAB Programming

Input Dialog

inputdlg 함수

• GUI 다이얼로그 박스로부터 사용자의 입력을 받음

• v = inputdlg( prompt, dialog_title, num_lines, default_values )

• v : 사용자가 입력한 값을 cell로 리턴함

>> answer = inputdlg('Enter matrix size:', 'Input', 1, {'20'})

answer = '20‘

>> v = str2num( answer{1} )

v =20

선택한버튼

4

Page 5: Lec 05. Useful functions for M-file programming

MATLAB Programming

Input Dialog

여러 질문을 동시에 입력 받으려면

• prompt 값을 cell 배열로 설정

prompt = {'Enter matrix size:', 'Enter colormap name:'};

dlg_title = 'Input';

num_lines = 1;

def = {'20','hsv'};

answer = inputdlg(prompt,dlg_title,num_lines,def)

선택한버튼

answer =

'20'

'hsv'

>> class(answer)

ans =

cell

5

Page 6: Lec 05. Useful functions for M-file programming

MATLAB Programming

Input Dialog

텍스트 입력 창의 크기 조절

• prompt 부분의 값을 cell 배열로 설정

x = inputdlg( {'Name', 'Telephone', 'Account'}, 'Customer', [1 50; 1 12; 1 7] )

6

Page 7: Lec 05. Useful functions for M-file programming

MATLAB Programming

menu 함수

menu window를 생성

• r = menu( 메뉴 타이틀, 버튼 레이블 1, 버튼 레이블 2, … )– 선택한 버튼의 인덱스를 반환

>> r = menu( '버튼을선택하세요', '버튼 1', '버튼 2', '버튼 3' )

r =

2선택한버튼

% menu_test.m

t = -2*pi:0.01:2*pi;y = sin(t);colors = ['r', 'g', 'b'];k = menu( ‘선색을정하세요', 'red', 'green', 'blue' );plot(t, y, colors(k));

7

Page 8: Lec 05. Useful functions for M-file programming

MATLAB Programming

Quiz

다음과 같이 menu window에 함수들의 목록이 나타나고, 사용자가

임의의 함수를 선택하면 x값을 입력 받아 선택한 함수의 값을 계산하는

함수 M-file을 작성해보자.

8

Page 9: Lec 05. Useful functions for M-file programming

MATLAB Programming

Quiz Sol.

다음과 같이 menu window에 함수들의 목록이 나타나고, 사용자가 임의의 함수를 선택하면 x값을 입력

받아 선택한 함수의 값을 계산하는 함수 M-file을 작성해보자.

9

Page 10: Lec 05. Useful functions for M-file programming

MATLAB Programming

dialog 함수들

questdlg : 질문형 dialog box• r = questdlg( 메시지, 타이틀, 버튼1, 버튼2, 기본선택버튼 )

msgbox : 일반적인 메세지 dialog box• r = msgbox( 메시지, 타이틀, 아이콘 )

– 아이콘: ‘none’, ‘error’, ‘help’, ‘warn’

>> str = questdlg( '계속하시겠습니까?', '질문', 'Yes', 'No', 'No' )

str =

No 선택한버튼

10

Page 11: Lec 05. Useful functions for M-file programming

MATLAB Programming

waitbar 함수

진행 상태를 표시하는 dialog를 생성

• h = waitbar( 0~1사이 값, 메시지 )

h = waitbar( 0, ‘Please wait…’ );for i = 1:1000

% computation herewaitbar( i/1000, h );

end

11

Page 12: Lec 05. Useful functions for M-file programming

MATLAB Programming

error, warning 함수

error( 메시지 )

• 메시지를 출력하고 함수로부터 빠져 나오거나 (함수 M-file 내에 사용된 경우) 프로그램 실행 중단

(스크립트 M-file 에서 사용된 경우)

warning( 메시지 )

• 메시지를 출력하여 사용자에게 비정상적인 조건이 발생했음을 경고

• error 함수처럼 프로그램의 실행을 중단하지는 않음

12

Page 13: Lec 05. Useful functions for M-file programming

MATLAB Programming

dir 함수

지정한 디렉토리에 위치한 파일들의 목록을 구조체 배열로 반환

• d = dir( 디렉토리 )

– 생략시 Current Directory의 파일들을 나열– 읽어야 할 데이터 파일이 특정 디렉토리 밑에 여러 파일로 나뉘어 저장되어 있는경우, 모든 데이터 파일들을 읽어오고자 할 때 사용

>> files = dir( ‘C:\’ );

files =

23x1 struct array with fields:

namedatebytesisdirdatenum

13

Page 14: Lec 05. Useful functions for M-file programming

MATLAB Programming

List Dialog

listdlg 함수

• 데이터를 목록으로 보여주고, 사용자가 해당 목록의 특정 아이템을 선택하게

하는 GUI 다이얼로그 박스

• [selection, ok] = listdlg( 'ListString',S )

• ListString : 목록에 나타날 아이템(문자열)들의 cell array

• selection : 사용자가 입력한 값이 ListString 몇번째에 위치한

아이템인지 인덱스 값

• ok : 선택하면 1, 선택하지 않으면 0

d = dir;str = {d.name};[s,v] = listdlg('PromptString','Select a file:',...

'SelectionMode','single',...'ListString',str)

선택한버튼 14

Page 15: Lec 05. Useful functions for M-file programming

MATLAB Programming

List Dialog

여러 아이템을 동시에 선택하려면

d = dir;str = {d.name};[s,v] = listdlg('PromptString','Select a file:',...

'SelectionMode', ‘mutiple',...'ListString',str)

s =3 7 10

v =1

선택한버튼

15

Page 16: Lec 05. Useful functions for M-file programming

MATLAB Programming

관계 연산자

참값, 거짓값

관계 연산자 종류

>> a = true

a =1

>> b = false

b =0

연산자 의미

== 대등

~= 같지않음

< 작은

> 큰

<= 작거나같은

>= 크거나같은

16

Page 17: Lec 05. Useful functions for M-file programming

MATLAB Programming

논리 is* 함수들

입력된 값들이 테스트에 통과하면 true, 실패하면 false를 리턴하는 함수들

논리 is* 함수 기능

ischar 문자열인지테스트

isempty 빈배열(empty array)인지테스트

isequal 두배열이서로동일한지테스트

isfinite Inf가아닌배열원소들검지

isfloat 부동소수점배열(single, double)인지테스트

isinf Inf인배열원소들검지

isinteger 정수배열인지테스트

islogical 논리배열인지테스트

isnan NaN 배열원소들을검지

isnumeric 수치배열 (정수, 부동소수점)인지테스트

isreal 실수배열인지테스트

isscalar 스칼라배열인지테스트

issorted 정렬된벡터인지테스트

isvector 벡터배열인지테스트

iscolumn 열벡터인지테스트

>> ischar( ‘hello world’ )>> ischar( 1 )

>> isempty( [] )>> isempty( [1 2] )

>> isequal( [1 2], [1 2] )>> isequal( [1 2], [3 4 5] )

>> isfinite( [1 Inf 3] )

>> isfloat( 1 )>> isfloat( int8(1) )

>> isinf( [1 Inf 3] )

>> isinteger( int8(1) )>> isinteger( 1.1 )

>> islogical( [true 1 false] )

>> isnan( [1 nan 2] )

>> isnumeric( 1.323 )>> isnumeric( ‘hello’ )

>> isreal( 1.32 )>> isreal( 1+2i )

>> isscalar( 1 )>> isscalar( [1 2 3] )

>> issorted( [1 2 3] )>> issorted( [3 1 2] )

>> isvector( [1 2 3] )>> isvector( magic(3) )

17

Page 18: Lec 05. Useful functions for M-file programming

MATLAB Programming

논리 is* 함수 활용 예

함수 M-file에서 입력 매개변수가 정확하게 들어왔는지 확인할 때

요긴하게 사용할 수 있음

• 예를 들어, 두 벡터의 유클리드 거리를 계산하는 함수의 경우, 입력

매개변수가 벡터가 맞는지 검사하고, 만약 아니면 에러를 출력

% euc_dist.m

function [y] = euc_dist ( v1, v2 )

if ~isvector(v1) || ~isvector(v2)error(‘벡터가아닙니다.’);

end

y = sqrt( sum( (v1-v2).^2 ) );

end

18

Page 19: Lec 05. Useful functions for M-file programming

MATLAB Programming

Quiz

지난 시간에 두 벡터를 입력 받아 두 벡터의 유클리드 거리를

계산해주는 함수 my_eucdist 를 작성해보았다.

• 입력으로 들어오는 값은 벡터가 아닐 수도 있고, 두 벡터의 길이가 다를 수도

있으며, 두 벡터 모두 행 벡터 또는 열 벡터로 정렬되지 않을 수도 있다.

• 예를 들면, 아래와 같이 v1, v2 벡터가 입력될 수 있다.

• 입력 매개변수를 검사하는 안전한 함수 M-file을 작성해 보자. 잘못된 입력이

들어올 시, 에러 메시지를 출력하자. (error 함수 사용)

• 두 벡터의 방향이 정렬되지 않은 채 입력으로 들어올 경우에는, 두 벡터의

방향이 서로 다르더라도 에러를 내지 않고 유클리드 거리를 계산해주자. (이

때, try-catch 문을 사용하지 말고, iscolumn 함수를 사용하자)

>> v1 = [1 4 5 2]>> v2 = [5 3 2 5]>> my_eucdist( v1, v2’ )

>> v1 = [1 4 5 2]>> v2 = [5 3 2 5 2 7 9]>> my_eucdist( v1, v2 )

>> v1 = [1 4 5 2]>> v2 = [5 3 2 5]>> my_eucdist( v1, v2 )

>> v1 = [1 4 5 2]>> v2 = {‘hello’, 3}>> my_eucdist( v1, v2 )

19

Page 20: Lec 05. Useful functions for M-file programming

MATLAB Programming

Quiz Sol.

지난 시간에 두 벡터를 입력 받아 두 벡터의 유클리드 거리를 계산해주는 함수

my_eucdist 를 작성해보았다. 입력 매개변수를 검사하는 안전한 함수 M-file을

작성해 보자.function [ dist ] = my_eucdist( v1, v2 )

if ~isvector(v1) || ~isvector(v2)error('입력값이벡터가아닙니다.');

end

if ~isnumeric(v1) || ~isnumeric(v2)error('입력값이벡터가아닙니다.');

end

if length(v1) ~= length(v2)error('두벡터의길이가서로다릅니다.');

end

if iscolumn(v1) ~= iscolumn(v2)v1 = v1';

end

dist = sqrt( sum( (v1-v2).^2 ) );

end

>> v1 = [1 4 5 2]>> v2 = [5 3 2 5 2 7 9]>> my_eucdist( v1, v2 )

Error using my_eucdist (line 8)두벡터의길이가서로다릅니다.

>> v2 = {'hello', 3}>> my_eucdist( v1, v2)

Error using my_eucdist (line 8)입력값이벡터가아닙니다.

20

Page 21: Lec 05. Useful functions for M-file programming

MATLAB Programming

sort 함수

배열 X를 정렬하는 함수

• Y = sort(X, 차원 인덱스, 정렬 모드)– 배열 X를 “차원 인덱스“ 방향으로 “정렬 모드” (오름차순/내림차순) 에 맞게 정렬– 차원 인덱스 생략시 기본값 1, 정렬 모드 생략시 기본 값 ‘ascend’

>> Y = sort(M, 1, 'ascend')

Y =

45 28 17 12 2349 71 66 50 3565 76 68 96 59

>> Y = sort(M, 1, 'descend')

Y =

65 76 68 96 5949 71 66 50 3545 28 17 12 23

>> Y = sort(M, 2, 'ascend')

Y =

12 35 49 68 7145 50 59 66 7617 23 28 65 96

>> Y = sort(M, 2, 'descend')

Y =

71 68 49 35 1276 66 59 50 4596 65 28 23 17

>> M = randi(100,3,5)

M =

49 71 68 12 3545 76 66 50 5965 28 17 96 23

정렬방향

21

Page 22: Lec 05. Useful functions for M-file programming

MATLAB Programming

sort 함수

배열 X를 정렬하는 함수

• [Y, I] = sort(X, 차원 인덱스, 정렬 모드)– 정렬된 배열(Y)과, 정렬 순서(I)를 함께 반환

>> [Y,I] = sort(M, 1, 'ascend')

Y =

45 28 17 12 2349 71 66 50 3565 76 68 96 59

I =

2 3 3 1 31 1 2 2 13 2 1 3 2

>> [Y,I] = sort(M, 2, 'ascend')

Y =

12 35 49 68 7145 50 59 66 7617 23 28 65 96

I =

4 5 1 3 21 4 5 3 23 5 2 1 4

>> M = randi(100,3,5)

M =

49 71 68 12 3545 76 66 50 5965 28 17 96 23

정렬방향

22

Page 23: Lec 05. Useful functions for M-file programming

MATLAB Programming

sortrows 함수

행렬 X에서 특정 열 값을 기준으로 행 단위로 정렬하는 함수

• [Y, I] = sortrows(X, 정렬할 열 인덱스)– 정렬된 행렬(Y)과, 정렬 순서(I)를 함께 반환

>> [Y, I] = sortrows(M, 2)

Y =

65 28 17 96 2349 71 68 12 3545 76 66 50 59

I =

312

>> [Y, I] = sortrows(M, 5)

Y =

65 28 17 96 2349 71 68 12 3545 76 66 50 59

I =

312

>> M = randi(100,3,5)

M =

49 71 68 12 3545 76 66 50 5965 28 17 96 23

정렬대상열 정렬대상열

23