2. GIST 정보통신공학과
Winter School 2015, 강재욱
강 사 소 개
§ GIST 정보통신공학과 박사과정
§ 센서통신 연구실 (김기선 교수)
§ Student Chair in IEEE student branch (since 2014 Apr.)
§ 연구분야:
§ Belief propagation 기반의 compressive sensing 복구 알고리즘
§ 역 선형 변환을 위한 Approximate message-passing 알고리즘
§ 기계학습 기반의 무선통신 수신기 설계
2
§ 대표논문:
Jaewook Kang, Heung-No Lee, Kiseon Kim, "Bayesian Hypothesis Test using
Nonparametric Belief Propagation for Noisy Sparse Recovery," IEEE Trans. on Signal
process., vol. 63, no. 4, pp. 935-948, Feb. 2015
§ Contact point:
Lab. phone: +82-62-715-2264
E-mail : jwkkang@gist.ac.kr
Hompage: https://sites.google.com/site/jwkang10/
Jaewook Kang (강재욱)
3. GIST 정보통신공학과
Winter School 2015, 강재욱
강의 일정
3
일 정 시간 내 용 강 사
Day 1 (2/11)
Lab. 1 3
- MATLAB 프로그래밍 일반
- Vectorized 코딩 1
강재욱
Lab. 2 3
- 국내외 산업분야 활용 사례 소개
- 수치해석에서 테크니컬 컴퓨팅까지
- 공학기초를 위한 MATLAB과 Symbolic Math
활용법
Mathwork
초빙강사
Day 2 (2/12)
Lab. 3 3
- Vectorized 코딩 2
- 고급 MATLAB 함수 활용
강재욱
Lab. 4 3 - DATA Acquisition with Labview 송하준
Day 3 (2/13)
Lab. 5 3 - MATLAB을 이용한 통신시스템 모델링 1
장재혁
Lab. 6 3 - MATLAB을 이용한 통신시스템 모델링 2
4. GIST 정보통신공학과
Winter School 2015, 강재욱
목 차
일 정 내 용
1일차 (3시간)
1. MATLAB Programs General
1. MATLAB Program Organization
2. User-defined function
3. Variable scope
4. Debugging Techniques
2. Vectorized Code
1. Loops with Vectors and Matrices
2. Operations on Vectors and Matrices
3. Vectors and Matrices as Function Arguments
2일차 (3시간)
1. Vectorized Code
4. Logical Vectors
5. Vectorizing Code
2. Advanced MATLAB Functions
1. Anonymous Functions
2. Uses of Function Handles
3. Variable Number of Arguments
4
6. GIST 정보통신공학과
Winter School 2015, 강재욱
Why MATLAB ?
v MATLAB 장점
§ “수식 to 프로그램” 이식이 간편함
§ Vectorized 코딩: 빠르고 간단한 벡터/행렬 기반 프로그래밍
§ 다양한 MATLAB 함수: 통계, 확률, 신호처리
§ 강력한 함수/데이터의 도시화 기능
6
MATLAB Mathmetica
- MathWork (1984)
- 공학시뮬레이션
- 수치적 계산& 시뮬레이션
- 계산효율성 좋음
-Wolfram (1988)
- 공학시스템의 수학적 모델링
- 심볼릭 연산!: 수학기호를 그
대로 연산
- 계산효율성 보통
7. 1. MATLAB Programs General
1. MATLAB Program Organization
2. User-defined function
3. Variable scope
4. Debugging Techniques
7
8. GIST 정보통신공학과
Winter School 2015, 강재욱
MATLAB Program Organization
v MATLAB 파일 (m-file)의 종류
– Script 파일:
• MATLAB statement의 모음이 저장된 m-file
• 해당 M-file을 실행하면 그안에 있는 모든 statement가 실행됨
– User-define Function 파일:
• 사용자가 정의한 작업을 수행하고 특정값을 리턴하는 함수가 저장된
m-file
• 해당 함수는 MATLAB 커맨드 윈도우나 다른 script 파일에서 호출하여
사용이 가능함
8
함수 파일 스크립트 파일
9. GIST 정보통신공학과
Winter School 2015, 강재욱
MATLAB Program Organization
v MATLAB 프로그램의 구성
– MATLAB 프로그램은 다양한 “MATLAB 함수 파일”과, 그 함수들을 호출하는
“Script 파일”로 구성된다.
v Modular 프로그래밍
– 전체작업을 여러 개의 작은 모듈로 나누고, 각 모듈을 함수로 구현하여
프로그램을 구현하는 방식 (cf. divide and conquer)
– 여기서 Script함수가 main program이 된다. (cf. C언어 main 함수)
9
% This m-file is a script file for the Main Program
func_for_task1(); % function cal l for the task 1
func_for_task2(); % function cal l for the task 2
…
Func_for_taskN(); % function cal l for the task N
10. GIST 정보통신공학과
Winter School 2015, 강재욱
User-define Functions
v 정의: 사용자 정의 한 작업을 수행하는 함수
– 임의의 script파일이나 command window에서 호출가능
v ex1: function_name.m
10
% Function Header
function [output_arguments]= function_name(input_arguments)
% body of the function
end
§ 모든작업 statement를 포함
§ 모든 출력인자에 값을 할당해야함
§ 함수이름은
저장하는 M-
file이름과
동일하게
§ 여러 개의 입력인자의
구분은 컴마“,” 사용
12. GIST 정보통신공학과
Winter School 2015, 강재욱
User-define Functions
v Practice1: 넓이 & 원주 계산 함수 (areacirc.m)
12
% Function Header
function [area, circum] = areacirc(rad)
% areacirc returns the area and
% the circumference of a circle
% Format: areacirc(radius)
area = pi * rad * rad;
circum = 2 * pi * rad;
end
§ “help”를 통해서
나오는 함수에 대한
설명 주석
§ 두개의 출력인자에
값 할당
13. GIST 정보통신공학과
Winter School 2015, 강재욱
User-define Functions
v ex2: 입력인자(input arguments)가 없는 함수 (stringprompt.m)
v ex3: 출력인자(output arguments)가 없는 함수 (printem.m)
13
function outstr = stringprompt()
% Also, “function outstr=stringprompt()” is fine.
% 문자열을 입력 받고 그 값을 리턴하는 함수
disp('When prompted, enter a string of any length.');
outstr = input('Enter the string here: ', 's');
end
§ “()” 괄호 안을 비워둠
또는 괄호 제거 가능
function printem(a,b)
% 두 입력 인자 값을 출력하는 함수
disp(sprintf('The first number is %.1f and the second is %.1fn',a,b));
end
§ 출력인자가 없음
§ 출력인자 값 할당
15. GIST 정보통신공학과
Winter School 2015, 강재욱
User-define Functions
v Practice2: 넓이 & 원주 계산 프로그램 (calcareacirc.m)
– Modular 프로그램밍 방식을 이용하여 다음 작업을 수행하는
프로그램을 작성하시오
• Task 1: 반지름값 입력 받기 (input 함수 이용)
• Task 2: 넓이 & 원주 계산하기 (practice 1 참조)
• Task 3: 계산한 값 도시 하기 (disp() 함수 이용)
% This script prompts the user for the radius of a circle,
% calls a function to calculate and return both the area
% and the circumference, and prints the results
% It ignores units and error-checking for simplicity
radius =input('Please enter the radius of the circle: ');
[area circ] = areacirc(radius);
disp(sprintf('For a circle with a radius of %.1f,n', radius));
disp(sprintf('the area is %.1f and the circumference is %.1fn',area, circ));
15
16. GIST 정보통신공학과
Winter School 2015, 강재욱 16
Variable Scope
v Local variable (지역변수)
– 호출된 함수 안에서 정의된 변수
– 해당 함수가 호출 됐을 때에 제한되어 접근 가능
– MATLAB workspace에서 보이지 않음
v Global variable (전역변수)
– Workspace 뿐만 아니라 호출된 함수 안에서도 접근 가능한 변수
– -global 키워드로 사전 선언 필요함 하고 함수 안에서 사용시 global 선언이 필요함
v ex4: mysum.m + who (workspace변수를 도시하는 함수)
16
function runsum = mysum(vec)
% mysum returns the sum of a vector
runsum = 0;
for i=1:length(vec)
runsum = runsum + vec(i);
end
end
>> clear
>> who
>> disp(mysum([5 4 1]));
10
>> who
§ Worksparce에 변수
없음
§ 함수 실행 이후에도
Worksparce에 변수
없음
17. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Scope
v ex5: mysumscript.m + who (workspace변수를 도시하는 함수)
17
% mysumscript.m
vec=1:5
runsum = 0;
for i=1:length(vec)
runsum = runsum + vec(i);
end
disp(runsum)
>> clear
>> who
>> mysumscript
15
>> who
Your variables are:
i runsum vec
§ Script 실행
§ Script 실행 후
workspace에 변수 생성
§ Script 실행 전
workspace에 변수 없음
17
18. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Scope
v Persistent variables
– persistent로 정의된 변수는, 함수종료시 값이 clear되지 않고, 다음
함수호출까지 이전 함수에서의 값을 유지한다.
– Persistent 변수를 초기화 하기위해서는 “clear” 명령어를 사용
v ex6: Counting number (func1.m, func2.m)
function func1
% func1 increments a normal variable "count"
count = 0;
count = count +1;
disp(sprintf('The value of count is %dn',count));
end
function func2
% func2 increments a persistent variable "count"
persistent count
if isempty(count)
count =0;
end
count = count + 1;
disp(sprintf('The value of count is %dn',count));
end
§ Persistent 변수 “count”
§ 일반 변수 “count”
18
20. GIST 정보통신공학과
Winter School 2015, 강재욱
Debugging Techniques
v프로그램 오류의 종류
– 1) Syntax errors: MATLAB language의 오류가 원인이 되어 발생
à MATLAB compiler에서 처리됨
– 2) Runtime error: 프로그램이 실행되는 동안 발생하는 오류
à 프로그램이 실행 도중에 오류로 작업을 멈춤
– 3) Logical errors: 프로그램어의 논리적추론이 잘못되어 발생à 가장 찾기
어려움
20
>>mystr = 'how are you;
??? mystr = 'how are you;
Error: A MATLAB string constant is not terminated properly.
>> vec = 3:5;
>> for i = 1:4 disp(vec(i)); end
3
4
5
??? Attempted to access vec(4); index
out of bounds because
numel(vec)= 3.
Error in => runtimeEx at 6
disp(vec(i))
21. GIST 정보통신공학과
Winter School 2015, 강재욱
Debugging Techniques
vDebugging 기법 1: Tracing
– Loop (“for or “while”)나 분기문 (“if” or “switch”)을 추적하는 기법
v Ex7) 변수값의 범위 판별 (testifelse.m)
21
>> testifelse(4)
In middle of range
>> testifelse(7)
In middle of range
>> testifelse(-2)
In middle of range
function testifelse(x)
% testifelse will test the debugger
if 3 < x < 6
disp('In middle of range')
else
disp('Out of range')
end
end
§ A Logical error!
23. GIST 정보통신공학과
Winter School 2015, 강재욱
Debugging Techniques
vDebugging 기법 2: Breakingpoint의 설정
v Ex9) dbstop()&dbcont() 함수의 사용
– 함수 실행 도중 Breakingpoint를 만들어 중간시점에서 코드를 점검할 수
있다.
23
>> dbstop testifelse 5
>> testifelse(-2)
5 disp('In middle of range')
K>> x
X =
-2
K>> 3 < x
ans =
0
K>> 3 < x < 6
ans =
1
K>> dbcont
In middle of range
end
§ testifelse 함수
5번째 라인에
breakingpoint를
설정
§ testifelse 함수
5번째 라인
§ Breakingpoint
종료
24. GIST 정보통신공학과
Winter School 2015, 강재욱
Debugging Techniques
vDebugging 기법 2: Breakingpoint의 설정
v Ex9) dbstop()&dbcont() 함수의 사용
– 함수 실행 도중 Breakingpoint를 만들어 중간시점에서 코드를 점검할 수
있다.
24
>> dbstop testifelse 5
>> testifelse(-2)
5 disp('In middle of range')
K>> x
x =
-2
K>> 3 < x
ans =
0
K>> 3 < x < 6
ans =
1
K>> dbcont
In middle of range
end
§ 오류의 이유는
if문의 조건 설정이
잘못됨
§ 3< x <6 은
complier가
(3 < x ) < 6로 이해
§ 즉 결과는
è ( 3 < -2 ) <6
è 0 < 6
è 1
§ 결과적으로, 항상
“in middle of range”
가 출력됨
25. 2. Vectorized Code
1. Loops with Vectors and Matrices
2. Operations on Vectors and Matrices
3. Vectors and Matrices as Function Arguments
25
26. GIST 정보통신공학과
Winter School 2015, 강재욱
Loops with Vectors and Matrices
v MATLAB에서는 벡터/행렬 단위의 계산이 가능함
– 모든 연산자에 대해서 성립
– 벡터/행렬의 각 항에 접근하기 위한 loop가 필요없음
v Ex10) vectorized coding with scalar
26
>> v=[3 7 2 1]
>> for i = 1:length(v)
v(i) = v(i) * 3;
end
>> v
v =
9 21 6 3
% MATLAB에서만 가능함
>> v=[3 7 2 1]
>> v=v*3
v =
9 21 6 3
Conventional coding Vectorized coding
§ Loop가
필요없음
27. GIST 정보통신공학과
Winter School 2015, 강재욱
Operations on Vectors and Matrices
v Array operation 1 – 덧셈 ( + ) /뺄셈( - )
– Term by term or element by element operation
v Ex11) array operation: 덧셈
27
>> v1 = 2:5
v1 =
2 3 4 5
>> v2 = [33 11 5 1]
v2 =
33 11 5 1
>> v1 + v2
ans =
35 14 9 6
>> mata = [5:8; 9:-2:3]
mata =
5 6 7 8
9 7 5 3
>> matb = reshape(1:8,2,4)
matb =
1 3 5 7
2 4 6 8
>> mata - matb
ans =
4 3 2 1
7 3 1 5
§ 1:8까지를
2by4 행렬로
만들어주는
함수
28. GIST 정보통신공학과
Winter School 2015, 강재욱
Operations on Vectors and Matrices
v Array operation 2 –지수셈 (.^)
– Term by term or element by element operation
v Ex12) array operation: 지수셈
– 요소단위로 연산을 하는 경우 연산자 앞에 반드시 ‘.’ dot이
필요하다 즉 (.^).
28
>> v = [3 7 2 1];
>> v ^ 2
??? Error using ==> mpower
Inputs must be a scalar and a
square matrix.
To compute elementwise
POWER, use POWER (.^) instead.
>> v .^ 2
ans =
9 49 4 1
29. GIST 정보통신공학과
Winter School 2015, 강재욱
Operations on Vectors and Matrices
v Array operation 3 – 곱셈 (.*), 나눗셈 ( ./ ),
– Term by term or element by element operation
v Ex13) array operation: 곱셈&나눗셈
- 연산자 앞에 반드시 ‘.’ dot이 필요하다 즉 (.*), (./).
29
>> v1 = 2:5
v1 =
2 3 4 5
>> v2 = [33 11 5 1]
v2 =
33 11 5 1
>> v1 .* v2
ans =
66 33 20 5
>> mata = [5:8; 9:2:3]
mata =
5 6 7 8
9 7 5 3
>> matb = reshape(1:8, 2,4)
matb =
1 3 5 7
2 4 6 8
>> mata ./ matb
ans =
5.0000 2.0000 1.4000 1.1429
4.5000 1.7500 0.8333 0.3750
30. GIST 정보통신공학과
Winter School 2015, 강재욱
Operations on Vectors and Matrices
vPractice 3: array operation
– Create a vector variable and add 2 to every element in it.
– Create a matrix variable and divide every element by 3.
– Create a matrix variable and square every element.
30
31. GIST 정보통신공학과
Winter School 2015, 강재욱
Vectors and Matrices
as Function Arguments
v MATLAB에서는 벡터&행렬을 입력인자로 전달 할 수 있다.
– 함수의 출력인자와 입력인자는 같은 사이즈의 벡터/행렬이다.
v Ex14) MATLAB bulit-in 함수 with vector input arguments
31
>> vec = 2:1
vec =
2 1 0 1
>> sinvec = sin(vec)
sinvec =
0.9093 0.8415 0 0.8415
>> mat = [0 4 -3; -1 0 2]
mat =
0 4 3
1 0 2
>> sign(mat)
ans =
0 1 1
1 0 1
32. GIST 정보통신공학과
Winter School 2015, 강재욱
Vectors and Matrices
as Function Arguments
v Ex15) User-define 함수 with vector input arguments (calcarea.m)
v 함수 calcarea()을 어떻게 수정해야 하는가?
32
function area = calcarea(rad)
% calcarea calculates the area of a circle
% Returns the area
area = pi * rad * rad;
end
>> calcarea(1:3)
??? Error using ==> mtimes
Inner matrix dimensions must agree.
Error in ==> calcarea at 6
area ¼ pi * rad * rad;
33. GIST 정보통신공학과
Winter School 2015, 강재욱
Vectors and Matrices
as Function Arguments
v Ex16) User-define 함수 with vector input arguments (calcarea.m)
v 함수 calcarea()을 어떻게 수정해야 하는가?
33
function area = calcarea(rad)
% calcarea calculates the area of a circle
% Returns the area
area = pi * rad * rad;
end
>> calcarea(1:3)
??? Error using ==> mtimes
Inner matrix dimensions must agree.
Error in ==> calcarea at 6
area ¼ pi * rad * rad;
function area = calcareaii(rad)
% calcarea calculates the area of a circle
% The input argement can be a vector of radii
% Returns the area
area = pi * rad. * rad;
%We can also use area = pi * rad. ^2;
end
34. GIST 정보통신공학과
Winter School 2015, 강재욱
Warping up – Day 1
1. MATLAB Programs General
1. MATLAB Program Organization
2. User-defined function
3. Variable scope
4. Debugging Techniques
2. Vectorized Code
1. Loops with Vectors and Matrices
2. Operations on Vectors and Matrices
3. Vectors and Matrices as Function Arguments
34
36. GIST 정보통신공학과
Winter School 2015, 강재욱
강의 일정
36
일 정 시간 내 용 강 사
Day 1 (2/11)
Lab. 1 3
- MATLAB 프로그래밍 일반
- Vectorized 코딩 1
강재욱
Lab. 2 3
- 국내외 산업분야 활용 사례 소개
- 수치해석에서 테크니컬 컴퓨팅까지
- 공학기초를 위한 MATLAB과 Symbolic Math
활용법
Mathwork
초빙강사
Day 2 (2/12)
Lab. 3 3
- Vectorized 코딩 2
- 고급 MATLAB 함수 활용
강재욱
Lab. 4 3 - DATA Acquisition with Labview 송하준
Day 3 (2/13)
Lab. 5 3 - MATLAB을 이용한 통신시스템 모델링 1
장재혁
Lab. 6 3 - MATLAB을 이용한 통신시스템 모델링 2
37. GIST 정보통신공학과
Winter School 2015, 강재욱
목 차
일 정 내 용
1일차 (3시간)
1. MATLAB Programs General
1. MATLAB Program Organization
2. User-defined function
3. Variable scope
4. Debugging Techniques
2. Vectorized Code
1. Loops with Vectors and Matrices
2. Operations on Vectors and Matrices
3. Vectors and Matrices as Function Arguments
2일차 (3시간)
1. Vectorized Code
4. Logical Vectors
5. Vectorizing Code
2. Advanced MATLAB Functions
1. Anonymous Functions
2. Uses of Function Handles
3. Variable Number of Arguments
37
39. GIST 정보통신공학과
Winter School 2015, 강재욱
Logical Vectors
v 정의: 논리값(true or false)을 요소로 가지는 벡터
v Ex17) 벡터의 논리 연산
39
>> vec=[5 9 3 4 6 11];
>> isg = vec <5
0 1 0 0 1 1
>> whos
Name Size Bytes Class
isg 1x6 6 logical array
vec 1x6 48 double array
>> sum(isg)
ans =
3
>> vec(isg)
ans =
9 6 11
§ ‘1’ or ‘0’로만
표현됨
§ Low memory
사용
§ Sum()으로 vec<5 을
만족한 요소의 수를
구할수 있음
§ Logical vector는
벡터변수의 index로
사용이 가능함
40. GIST 정보통신공학과
Winter School 2015, 강재욱
Logical Vectors
v Ex 18) Logical vector변수의 선언
– Logical () , false(), true()함수를 사용하여 logical vector를 선언할 수 있다.
40
>> logical(zeros(2))
ans =
0 0
0 0
>> logical(ones(1,5))
ans =
1 1 1 1 1
>> false(2)
ans =
0 0
0 0
>> true(1,5)
ans =
1 1 1 1 1
§ logical 함수는
double값을 logical
datatype으로 변환
§ false() 와 true()를
이용하면 더욱 빠른
생성이 가능함
41. GIST 정보통신공학과
Winter School 2015, 강재욱
Logical Vectors
v Ex 19) Logical built-in 함수 ( any() & all() )
– any()와 all() 함수의 사용:
– any() 함수는 입력인자 vec의 요소가 하나라도 nonzero인 경우 true를 리턴
– all() 함수는 입력인자 모두가 nonzero인 경우 true를 리턴
41
>> vec1 = [1 3 1 1 2];
>> any(vec1)
ans =
1
>> all(vec1)
ans =
1
>> vec2 = [1 1 0 1]
vec2 =
1 1 0 1
>> any(vec2)
ans =
1
>> all(vec2)
ans =
0
§ vec의 요소는 모두
nonzero인 경우
§ 적어도 하나의
nonzero를
포함함으로 any()는
‘true’를 리턴
§ 모두 nonzero가
아니므로 all()는
‘false’를 리턴
42. GIST 정보통신공학과
Winter School 2015, 강재욱
Logical Vectors
v Ex 20) Logical built-in 함수 ( find() )
– find() 함수의 사용: 입력 조건문을 만족시키는 요소의 인덱스와 값을 리턴
42
>> vec = [5 3 6 7 2]
vec =
5 3 6 7 2
>>[index, value]= find(vec > 5)
index =
3 4
value =
6 7
47. GIST 정보통신공학과
Winter School 2015, 강재욱
Vectorizing codes
v Ex22) 행렬의 각 요소의 부호를 알아보는 함수 ( signum.m)
47
function outmat =signum(mat)
% signum imitates the sign function
[r c] = size(mat);
for i = 1:r
for j = 1:c
if mat(i,j) > 0
outmat(i,j) = 1;
elseif mat(i,j) == 0
outmat(i,j) = 0;
else
outmat(i,j) = -1;
end
end
end
end
>> mat = [0 4 -3; -1 0 2]
mat =
0 4 -3
-1 0 2
>> signum(mat)
ans =
0 1 -1
-1 0 1
48. GIST 정보통신공학과
Winter School 2015, 강재욱
Vectorizing codes
v Ex22) 행렬의 각 요소의 부호를 알아보는 함수 ( signum.m)
– 동일연산이 MATLAB built-in 함수인 sign()을 사용하여 효율적으로 수행될 수 있음
– 대부분의 수학연산 함수, sqrt(),exp(),log(),가 벡터/행렬 연산을 지원함
48
function outmat =signum(mat)
% signum imitates the sign function
[r c] = size(mat);
for i = 1:r
for j = 1:c
if mat(i,j) > 0
outmat(i,j) = 1;
elseif mat(i,j) == 0
outmat(i,j) = 0;
else
outmat(i,j) = -1;
end
end
end
end
>> mat = [0 4 -3; -1 0 2]
mat =
0 4 -3
-1 0 2
>> signum(mat)
ans =
0 1 -1
-1 0 1
51. GIST 정보통신공학과
Winter School 2015, 강재욱
Vectorizing codes
v Ex25) Preallocation (tictocprealloc.m)
51
>> tictocprealloc
No preallocation
Elapsed time is 0.070526 seconds.
Preallocation
Elapsed time is 0.001177 seconds..
% tictocprealloc.m shows the timing difference between preallocating a vector vs. not
clear
disp('No preallocation')
tic
for i = 1:10000
x(i) = sqrt(i);
end
toc
disp('Preallocation')
tic
y =zeros(1,10000);
for i = 1:10000
y(i) = sqrt(i);
end
toc
§ Preallocation을
사용하지 않는 경우
§ Preallocation을
사용하는 경우
52. 3. Advanced MATLAB Functions
1. Anonymous Functions
2. Uses of Function handles
3. Variable Number of Arguments
52
53. GIST 정보통신공학과
Winter School 2015, 강재욱
Anonymous Function
v Anonymous Function
– 따로 m-file로 저장하지 않고, 단순 연산을 one-line으로 정의하여 사용하는 함수
• Function handle: 함수호출 시 사용하는 reference
• Arguments: 입력인자
• Function body: 함수연산 내용
•
v Ex 26) 원 넓이 구하는 함수 (ver. anonymous function)
53
fnhandle= @ (arguments) functionbody;
cirarea= @(rad) pi*rad .^2;
>> cirarea(4)
ans =
50.2655
>> cirarea(1:4)
ans =
3.1416 12.5664 28.2743 50.2655.
§ (.^)을 사용하여
벡터연산도 가능함
54. GIST 정보통신공학과
Winter School 2015, 강재욱
Anonymous Function
v Anonymous Function
– M-file 함수와는 달리 입력인자가 없는 경우에도 괄호 ()를 포함 해야 한다.
– 괄호 () 를 포함하지 않는 호출의 경우 function handle은 함수 정의를
보여준다.
v Practice 6: Anonymous function을 사용하여 원주를 계산하는
프로그램을 작성하시오
54
>> prtran =@ () disp( sprintf('%.2fn',rand) );
>> prtran()
0.95
>> prtran
Prtran =
@ () disp( sprintf('%.2fn',rand) )
55. GIST 정보통신공학과
Winter School 2015, 강재욱
Uses of Function handles
v Function handle은 일반함수에 대해서도 생성될 수 있다.
– “@” 는 일반함수로 부터 Function handle을 얻는 연산자임
55
>> facth = @factorial;
>> facth (5)
ans =
120
§ facth는 built-in 함수
factorial()의 function
handle임
§ function handle을
사용한 함수호출
56. GIST 정보통신공학과
Winter School 2015, 강재욱
Uses of Function handles
v Function handle을 사용하는 이유
– Function handle를 다른 함수의 입력인자로 전달하기 위해서임
– 입력 Function handle에 따라서 다른 작업수행을 하는 함수를 정의가능
v Ex 27) Function handle을 입력인자로 받는 함수 (fnfnexamp.m)
56
function fnfnexamp(funh)
% fnfnexamp receives the handle of a function
% and plots that function of x (which is 1:.25:6)
x =1:.25:6;
y = funh(x);
plot(x,y,'ko')
xlabel('x')
ylabel('fn(x)')
title(func2str(funh))
end
§ 입력인자 function
handle에 따라서 다른
동작을 수행
§ 작업수행결과를 plot
§ 입력인자에
function handle
57. GIST 정보통신공학과
Winter School 2015, 강재욱
Uses of Function handles
v Function handle을 사용하는 이유
– Function handle를 다른 함수의 입력인자로 전달하기 위해서임
– 입력 Function handle에 따라서 다른 작업수행을 하는 함수를 정의가능
v Ex 27) Function handle을 입력인자로 받는 함수 (fnfnexamp.m)
57
>> fnfnexamp(@sin) >> fnfnexamp(@cos)
§ 입력인자 function
handle에 따라서 다른
동작을 수행
§ 입력인자에
function handle
58. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Number of Arguments
v Variable number of input arguments
– varargin : 입력인자를 저장하는 cell array
– nargin: 입력인자의 개수
v Ex 28) 원의 넓이는 계산하는 함수 (varargin.m)
– 첫째 입력인자는 반지름
– 두째 입력인자는 단위를 정한다.
– 함수에 첫째 입력인자만 전달되는 경우 default로 ‘feet’ 단위로 계산
– 두번째 입력인자가 ‘i’인 경우 ‘inche’ 단위로 계산
58
59. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Number of Arguments
v Ex 28) 원의 넓이는 계산하는 함수 함수 (areafori.m)
59
function area = areafori(varargin)
% areafori returns the area of a circle in feet
% The radius is passed, and potentially the unit of
% inches is also passed, in which case the result will be
% given in inches instead of feet
n = nargin; % number of input arguments
radius = varargin{1}; % Given in feet by default
if n ==2
unit = varargin{2};
% if inches is specified, convert the radius
if unit == 'i'
radius = radius * 12;
end
end
area = pi * radius .^ 2;
end
§ 입력인자가 2개고
두째인자가 ‘i'인
경우 inche로 변환
60. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Number of Arguments
v Ex 28) 원의 넓이는 계산하는 함수 함수 (areafori.m)
v Practice 7: 등비수열의 합 계산 함수
1 + 𝑟 + 𝑟2 + 𝑟3 + 𝑟4 +⋅⋅⋅ +𝑟6
– 첫째인자: r의 값
– 둘째인자: n의 값
– 리턴: 합의 값
– 둘째 인자가 없는경우 n을 [5,30]에서 랜덤하게 발생해서 계산
60
>> areafori(3)
ans =
28.2743
>> areafori(1,'i')
ans =
452.3893
61. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Number of Arguments
v Variable number of output arguments
– varargout : 출력인자를 저장하는 cell array
– nargout: 출력인자의 개수
v Ex 29) 입력의 데이터타입과 사이즈를 리턴하는 함수 (typesize.m)
– 입력인자가 스칼라인경우 ‘s’를 출력
– 입력인자가 벡터인 경우 ‘v’를 출력하고 길이를 출력
– 입력인자가 행렬인 경우 ‘m’을 출력하고 ‘행’/’열’ 길이를 출력
61
62. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Number of Arguments
v Ex 29) 입력의 데이터타입과 사이즈를 리턴하는 함수 (typesize.m)
62
function [arrtype, varargout] = typesize(inputval)
% typesize returns a character 's' for scalar, 'v'
% for vector, or 'm' for matrix input argument
% also returns length of a vector or dimensions of matrix
[r c ] = size(inputval);
if r==1 && c==1
arrtype = 's';
elseif r==1 || c==1
arrtype ='v';
varargout{1} = length(inputval);
else
arrtype = 'm';
varargout{1} = r;
varargout{2} = c;
end
end
§ 스칼라인 경우
-‘s’만 출력
§ 벡터인 경우
- ‘v’출력
-길이 출력
§ 행렬인 경우
- ‘m’ 출력
- 행 길이 출력
- 열 길이 출력
63. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Number of Arguments
v Ex 29) 입력의 데이터타입과 사이즈를 리턴하는 함수 (typesize.m)
63
>> typesize(5)
ans =
s
>> [arrtype, len] = typesize(4:6)
arrtype =
v
len =
3
>> [arrtype, r, c] = typesize([4:6;3:5])
arrtype =
m
r =
2
c =
3
§ 스칼라인 경우
-‘s’만 출력
§ 벡터인 경우
- ‘v’출력
-길이 출력
§ 행렬인 경우
- ‘m’ 출력
- 행 길이 출력
- 열 길이 출력
64. GIST 정보통신공학과
Winter School 2015, 강재욱
Variable Number of Arguments
v Ex 30) 출력인자 개수에 따라 추가적인 정보를 제공하는 함수(mysize.m)
64
function [row col varargout] = mysize(mat)
% mysize returns dimensions of input argument
% and possibly also total # of elements
[row col] = size(mat);
if nargout == 3
varargout{1} = row*col;
end
end
§ 세번째 출력인자를
요구하는 경우 “전체
elem의 개수”를 출력
>> [r c] = mysize(eye(3))
r =
3
c =
3
>> [r c elem] = mysize(eye(3))
r =
3
c =
3
elem =
9
§ 세번째 출력인자를
요구하는 경우 “전체
elem의 개수”를 출력
§ Eye(3)=
1
1
1
65. GIST 정보통신공학과
Winter School 2015, 강재욱
Warping up – Day 2
1. Vectorized Code
4. Logical Vectors
5. Vectorizing Code
2. Advanced MATLAB Functions
1. Anonymous Functions
2. Uses of Function Handles
3. Variable Number of Arguments
65