Lec 05. Useful functions for M-file programming
-
Upload
tak-eun-kim -
Category
Education
-
view
606 -
download
18
description
Transcript of 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
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
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
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
MATLAB Programming
Input Dialog
텍스트 입력 창의 크기 조절
• prompt 부분의 값을 cell 배열로 설정
x = inputdlg( {'Name', 'Telephone', 'Account'}, 'Customer', [1 50; 1 12; 1 7] )
6
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
MATLAB Programming
Quiz
다음과 같이 menu window에 함수들의 목록이 나타나고, 사용자가
임의의 함수를 선택하면 x값을 입력 받아 선택한 함수의 값을 계산하는
함수 M-file을 작성해보자.
8
MATLAB Programming
Quiz Sol.
다음과 같이 menu window에 함수들의 목록이 나타나고, 사용자가 임의의 함수를 선택하면 x값을 입력
받아 선택한 함수의 값을 계산하는 함수 M-file을 작성해보자.
9
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
MATLAB Programming
waitbar 함수
진행 상태를 표시하는 dialog를 생성
• h = waitbar( 0~1사이 값, 메시지 )
h = waitbar( 0, ‘Please wait…’ );for i = 1:1000
% computation herewaitbar( i/1000, h );
end
11
MATLAB Programming
error, warning 함수
error( 메시지 )
• 메시지를 출력하고 함수로부터 빠져 나오거나 (함수 M-file 내에 사용된 경우) 프로그램 실행 중단
(스크립트 M-file 에서 사용된 경우)
warning( 메시지 )
• 메시지를 출력하여 사용자에게 비정상적인 조건이 발생했음을 경고
• error 함수처럼 프로그램의 실행을 중단하지는 않음
12
MATLAB Programming
dir 함수
지정한 디렉토리에 위치한 파일들의 목록을 구조체 배열로 반환
• d = dir( 디렉토리 )
– 생략시 Current Directory의 파일들을 나열– 읽어야 할 데이터 파일이 특정 디렉토리 밑에 여러 파일로 나뉘어 저장되어 있는경우, 모든 데이터 파일들을 읽어오고자 할 때 사용
>> files = dir( ‘C:\’ );
files =
23x1 struct array with fields:
namedatebytesisdirdatenum
13
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
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
MATLAB Programming
관계 연산자
참값, 거짓값
관계 연산자 종류
>> a = true
a =1
>> b = false
b =0
연산자 의미
== 대등
~= 같지않음
< 작은
> 큰
<= 작거나같은
>= 크거나같은
16
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
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
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
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
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
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
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