Professional Documents
Culture Documents
김탁은
kmste2@kaist.ac.kr
1
MATLAB Programming
input 함수
사용자의 입력을 기다리는 함수
• r = input( prompt )
– prompt 문자열을 화면에 출력하고 사용자의 입력을 기다림
– 사용자가 입력한 문자열을 evaluation 하고, 그 결과를 r 값으로 반환
– 사용자의 입력에 나타난 변수는 workspace에 미리 선언되어 있어야 함
>> x = 5;
>> r = input('변수명 이나 수식을 입력하세요 : ') >> r = input('변수명 이나 수식을 입력하세요 : ')
변수명 이나 수식을 입력하세요 : sin(x^2) 변수명 이나 수식을 입력하세요 : my_triu( magic(4), 1 )
r= r=
-0.1324
0 2 3 13
>> r = input('변수 이름이나 수식을 입력하세요. : ') 0 0 10 8
변수 이름이나 수식을 입력하세요. : y 0 0 0 12
Error using input 0 0 0 0
Undefined function or variable 'y'.
>> s = struct('name', '홍길동', 'age', 30); >> r = input('변수명 이나 수식을 입력하세요 : ')
>> r = input('변수명 이나 수식을 입력하세요 : ') 변수명 이나 수식을 입력하세요 : 'hello world'
변수명 이나 수식을 입력하세요 : s.name
r=
r=
홍길동 hello world
2
MATLAB Programming
input 함수
• str = input( prompt , ‘s’ )
– prompt 문자열을 출력하고 사용자의 입력을 기다림
– 사용자의 입력을 평가 (evaluation) 하지 않고, 문자열로 반환
>> reply = input( 'Do you want more? Y/N [Y]:', 's‘ );
>> str = input( '아무 문자나 입력하세요 : ', 's')
>> if isempty(reply), reply = 'Y'; end
아무 문자나 입력하세요 : 안녕하세요
>> reply
str =
reply =
안녕하세요
Y
3
MATLAB Programming
Input Dialog
inputdlg 함수
• GUI 다이얼로그 박스로부터 사용자의 입력을 받음
• v = inputdlg( prompt, dialog_title, num_lines, default_values )
• v : 사용자가 입력한 값을 cell로 리턴함
answer =
'20‘
4
MATLAB Programming
Input Dialog
answer =
'20'
'hsv'
>> class(answer) 선택한 버튼
ans =
cell
5
MATLAB Programming
Input Dialog
텍스트 입력 창의 크기 조절
• prompt 부분의 값을 cell 배열로 설정
6
MATLAB Programming
menu 함수
menu window를 생성
>> 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
8
MATLAB Programming
Quiz Sol.
다음과 같이 menu window에 함수들의 목록이 나타나고, 사용자가 임의의 함수를 선택하면 x값을 입력
받아 선택한 함수의 값을 계산하는 함수 M-file을 작성해보자.
9
MATLAB Programming
dialog 함수들
questdlg : 질문형 dialog box
• r = questdlg( 메시지, 타이틀, 버튼1, 버튼2, 기본선택버튼 )
str =
No 선택한 버튼
10
MATLAB Programming
waitbar 함수
진행 상태를 표시하는 dialog를 생성
11
MATLAB Programming
error, warning 함수
error( 메시지 )
• 메시지를 출력하고 함수로부터 빠져 나오거나 (함수 M-file 내에 사용된 경우) 프로그램 실행 중단
(스크립트 M-file 에서 사용된 경우)
warning( 메시지 )
• 메시지를 출력하여 사용자에게 비정상적인 조건이 발생했음을 경고
• error 함수처럼 프로그램의 실행을 중단하지는 않음
12
MATLAB Programming
dir 함수
지정한 디렉토리에 위치한 파일들의 목록을 구조체 배열로 반환
• d = dir( 디렉토리 )
– 생략시 Current Directory의 파일들을 나열
– 읽어야 할 데이터 파일이 특정 디렉토리 밑에 여러 파일로 나뉘어 저장되어 있는
경우, 모든 데이터 파일들을 읽어오고자 할 때 사용
files =
name
date
bytes
isdir
datenum
13
MATLAB Programming
List Dialog
listdlg 함수
• 데이터를 목록으로 보여주고, 사용자가 해당 목록의 특정 아이템을 선택하게
하는 GUI 다이얼로그 박스
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= b=
1 0
관계 연산자 종류
연산자 의미
== 대등
~= 같지 않음
< 작은
> 큰
<= 작거나 같은
>= 크거나 같은
16
MATLAB Programming
논리 is* 함수들
입력된 값들이 테스트에 통과하면 true, 실패하면 false를 리턴하는 함수들
논리 is* 함수 기능
ischar 문자열인지 테스트
>> ischar( ‘hello world’ ) >> islogical( [true 1 false] )
isempty 빈 배열(empty array)인지 테스트 >> ischar( 1 )
>> isnan( [1 nan 2] )
isequal 두 배열이 서로 동일한지 테스트 >> isempty( [] )
isfinite Inf가 아닌 배열 원소들 검지 >> isempty( [1 2] ) >> isnumeric( 1.323 )
>> isnumeric( ‘hello’ )
isfloat 부동 소수점 배열(single, double)인지 테스트 >> isequal( [1 2], [1 2] )
>> isequal( [1 2], [3 4 5] ) >> isreal( 1.32 )
isinf Inf인 배열 원소들 검지 >> isreal( 1+2i )
isinteger 정수 배열인지 테스트 >> isfinite( [1 Inf 3] )
>> isscalar( 1 )
islogical 논리 배열인지 테스트 >> isfloat( 1 ) >> isscalar( [1 2 3] )
>> isfloat( int8(1) )
isnan NaN 배열 원소들을 검지
>> issorted( [1 2 3] )
isnumeric 수치 배열 (정수, 부동 소수점)인지 테스트 >> isinf( [1 Inf 3] ) >> issorted( [3 1 2] )
17
MATLAB Programming
논리 is* 함수 활용 예
% euc_dist.m
if ~isvector(v1) || ~isvector(v2)
error(‘벡터가 아닙니다.’);
end
end
18
MATLAB Programming
Quiz
지난 시간에 두 벡터를 입력 받아 두 벡터의 유클리드 거리를
계산해주는 함수 my_eucdist 를 작성해보았다.
• 입력으로 들어오는 값은 벡터가 아닐 수도 있고, 두 벡터의 길이가 다를 수도
있으며, 두 벡터 모두 행 벡터 또는 열 벡터로 정렬되지 않을 수도 있다.
• 예를 들면, 아래와 같이 v1, v2 벡터가 입력될 수 있다.
>> v1 = [1 4 5 2] >> v1 = [1 4 5 2] >> v1 = [1 4 5 2] >> v1 = [1 4 5 2]
>> v2 = [5 3 2 5] >> v2 = [5 3 2 5] >> v2 = [5 3 2 5 2 7 9] >> v2 = {‘hello’, 3}
>> my_eucdist( v1, v2 ) >> my_eucdist( v1, v2’ ) >> my_eucdist( v1, v2 ) >> 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 >> v1 = [1 4 5 2]
>> v2 = [5 3 2 5 2 7 9]
if ~isnumeric(v1) || ~isnumeric(v2) >> my_eucdist( v1, v2 )
error('입력값이 벡터가 아닙니다.');
end Error using my_eucdist (line 8)
두 벡터의 길이가 서로 다릅니다.
if length(v1) ~= length(v2)
error('두 벡터의 길이가 서로 다릅니다.');
end >> v2 = {'hello', 3}
>> my_eucdist( v1, v2)
if iscolumn(v1) ~= iscolumn(v2)
v1 = v1'; Error using my_eucdist (line 8)
end
입력값이 벡터가 아닙니다.
dist = sqrt( sum( (v1-v2).^2 ) );
end 20
MATLAB Programming
sort 함수
배열 X를 정렬하는 함수
Y= 정렬 방향 Y=
>> M = randi(100,3,5) 45 28 17 12 23 12 35 49 68 71
49 71 66 50 35 45 50 59 66 76
M= 65 76 68 96 59 17 23 28 65 96
65 76 68 96 59 71 68 49 35 12
49 71 66 50 35 76 66 59 50 45
45 28 17 12 23 96 65 28 23 17
21
MATLAB Programming
sort 함수
배열 X를 정렬하는 함수
Y= 정렬 방향 Y=
>> M = randi(100,3,5)
45 28 17 12 23 12 35 49 68 71
49 71 66 50 35 45 50 59 66 76
M=
65 76 68 96 59 17 23 28 65 96
49 71 68 12 35
45 76 66 50 59
I= I=
65 28 17 96 23
2 3 3 1 3 4 5 1 3 2
1 1 2 2 1 1 4 5 3 2
3 2 1 3 2 3 5 2 1 4
22
MATLAB Programming
sortrows 함수
행렬 X에서 특정 열 값을 기준으로 행 단위로 정렬하는 함수
Y = 정렬 대상 열 Y= 정렬 대상 열
>> M = randi(100,3,5)
65 28 17 96 23 65 28 17 96 23
49 71 68 12 35 49 71 68 12 35
M=
45 76 66 50 59 45 76 66 50 59
49 71 68 12 35
45 76 66 50 59
I= I=
65 28 17 96 23
3 3
1 1
2 2
23
MATLAB Programming
김탁은
kmste2@kaist.ac.kr
24
MATLAB Programming
25
MATLAB Programming
26
MATLAB Programming
x = -pi:0.1:pi;
y1 = sin(x);
y2 = cos(x);
plot( x, y1, ‘o’, x, y2, ‘:’ );
27
MATLAB Programming
Figure 창 컨트롤
그래프
회전
그래프 범례
그래프 그래프 포커스 표시
저장 확대 및 축소 이동
28
MATLAB Programming
MATLAB의 2D Plotting 원리
X 값과 Y 값이 아래와 같이 길이가 n인 벡터로 주어졌다고 가정
29
MATLAB Programming
MATLAB의 2D Plotting 원리
X=0..pi 범위에서 sin(X) 를 그린다고 하면, X 와 Y 벡터를 아래와 같이 생성
MATLAB에서 plot(x, y) 수행 시,
• 1. 동일한 인덱스를 가지는 𝑥𝑥𝑘𝑘 , 𝑦𝑦𝑘𝑘 값에 대해 𝑥𝑥𝑘𝑘 , 𝑦𝑦𝑘𝑘 ≔ 𝑥𝑥𝑘𝑘 , sin 𝑥𝑥𝑘𝑘 값을 좌표로 하여
점을 찍음
• 2. 모든 𝑥𝑥𝑘𝑘 , 𝑦𝑦𝑘𝑘 점에 대해, 인접한 점 𝑥𝑥𝑘𝑘+1 , 𝑦𝑦𝑘𝑘+1 을 선으로 연결
x 값이 촘촘할 수록
더 정확한 모양의
그래프가 그려짐!!
30
MATLAB Programming
MATLAB의 2D Plotting 원리
벡터 X의 원소 개수 (x축 분할 개수)에 따른 그래프의 변화
x = linspace(-2,2,500);
y = exp(x) .* sin(1./x);
plot(x,y)
x = linspace(-2,2,100);
y = exp(x) .* sin(1./x);
plot(x,y)
31
MATLAB Programming
그래프 곡선 속성
x = -pi:0.1:pi;
y1 = sin(x);
y2 = cos(x);
plot( x, y1, ‘o’, x, y2, ‘:’ );
32
MATLAB Programming
그래프 곡선 속성
곡선의 선 모양, 색상, 기호 등을 각기 다르게 표현 가능
• 각 속성들을 조합해서 그래프 드로잉
곡선 속성 기호 의미 곡선 속성 기호 의미
. 점 b 파란색
x x표 r 빨강색
o 원 g 녹색
+ 플러스 기호 c 청록색
색종류
* 별표 m 자홍색
s 정방형 y 노란색
기호 d 다이아몬드 w 흰색
v 삼각형 (위쪽) k 검은색
^ 삼각형 (아래쪽)
곡선 속성 기호 의미
< 삼각형 (왼쪽)
- 실선
> 삼각형 (오른쪽)
: 점선
p 오각형 선모양
-. 반점선
h 육각형
-- 긴점선
33
MATLAB Programming
그래프 곡선 속성
실습: 그래프 곡선 속성들을 다양하게 조합하여 그래프를 그려보자
34
MATLAB Programming
범례
• legend( 문자열, 문자열, 범례위치 )
35
MATLAB Programming
범례(legend)의 위치
옵션 범례의 위치
0 데이터와 겹치지 않는 최적 위치
1 축의 오른쪽 위 모서리
2 축의 왼쪽 위 모서리
3 축의 왼쪽 아래 모서리
4 축의 오른쪽 아래 모서리
-1 그래프의 오른쪽
36
MATLAB Programming
축(axis) 속성
axis tight 또는 axis(‘tight’)
x = 0:0.1:2*pi;
y = cos(x);
plot(x,y);
37
MATLAB Programming
축(axis) 속성
axis( [xmin xmax ymin ymax] )
axis 명령어 옵션 의미
axis auto 기본 축 한계로 되돌아감
axis equal x, y, z 축 상의 데이터 단위를 동일화
axis off 축을 제거
axis square 축 박스를 정사각형으로 설정
xlim( [xmin xmax] ) x축 한계를 설정
ylim( [ymin ymax] ) y축 한계를 설정
38