44
MATLAB Programming 오늘 강의 내용 (2014/01/08) MATLAB 데이터 타입 struct (구조체) M-file 프로그래밍 스크립트 M-file 함수 M-file 프로그램 흐름 제어 if, for, while, switch, continue, break, try-catch 1

오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

오늘 강의 내용 (2014/01/08)

MATLAB 데이터 타입• struct (구조체)

M-file 프로그래밍• 스크립트 M-file• 함수 M-file

프로그램 흐름 제어• if, for, while, switch, continue, break, try-catch

1

Page 2: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

struct (구조체) 데이터 타입

예) 학사 데이터• 성명: 홍길동• 학번: 20010132• 학점: 3.9

서로 연관 있는 데이터들을 하나의 묶음으로 관리할 수 있도록 하는데이터 타입• 성명, 학번, 학점 등의 데이터는 서로 연관성이 있으므로, 이를 묶어서

관리하는 것이 편리함

Cell과 비슷하게 서로 다른 타입의 데이터들을 저장 가능

Cell과 다르게 각 데이터들은 인덱스가 아니라 이름으로 접근• 성명, 학번, 학점 등

C/C++의 struct와 동일한 개념

C{1,1} = ‘홍길동’C{2,1} = 20010132C{3,1} = 3.9

Cell로 관리하는 것이 편리할까?

2

Page 3: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

struct 데이터 타입

struct 데이터 생성

struct의 각 field 접근

>> s = struct('name', '홍길동', 'id', 20010132, 'gpa', 3.9)

s = name: '홍길동'id: 20010132

gpa: 3.9000

>> s.name

ans =

홍길동

>> s.id

ans =

20010132

>> s.gpa

ans =

3.9000

>> s = struct;>> s.name = '홍길동';>> s.id = 20010132;>> s.gpa = 3.9;>> s

s =

name: '홍길동'id: 20010132

gpa: 3.9000

또는

빈 구조체 정의

각 필드 정의

3

Page 4: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

struct 데이터 타입

struct의 각 field 값 변경

기존 struct에 새로운 field 추가

>> s.name = '홍길도'

s = name: '홍길도'id: 20010132

gpa: 3.9000

>> s.id = 140001

s = name: '홍길도'id: 140001

gpa: 3.9000

>> s.gpa = 4.3

s = name: '홍길도'id: 140001

gpa: 4.3000

>> s.major = 'Computer Science'

s = name: '홍길도'

id: 140001gpa: 4.3000

major: 'Computer Science' 새로 추가된 필드

4

Page 5: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

struct 데이터 생성

다양한 타입의 데이터로 구성 가능

>> a = struct;>> a.city = '서울';>> a.temperature = [0 -3 -5 -7 -1 0 1];>> a.wind = {'북서풍', '약함'}

a =

city: '서울'temperature: [0 -3 -5 -7 -1 0 1]

wind: {'북서풍' '약함'}

>> a.info = struct('pressure', [1013.2 1013.5],'time', [9 10 11]);

>> a

a =

city: '서울'temperatures: [0 -3 -5 -7 2 1]

wind: {'북서풍' '약함'}info: [1x1 struct]

>> a.info

ans = pressure: [1.0132e+03 1.0135e+03]

time: [9 10 11]

구조체내에구조체저장

5

Page 6: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

구조체 배열 (struct array)

동일한 구조체들의 나열

구조체 배열 생성 및 각 배열 원소에 접근

>> a = struct;>> a.city = '서울';>> a.temperature = [0 -3 -5 -7 -1 0 1];>> a.wind = {'북서풍', '약함'};

a = city: '서울'

temperature: [0 -3 -5 -7 -1 0 1]wind: {'북서풍' '약함'}

>> weather(10) = a

weather =

1x10 struct array with fields:

citytemperaturewind

>> weather(10)ans =

city: '서울'temperature: [0 -3 -5 -7 -1 0 1]

wind: {'북서풍' '약함'}

>> weather(3)ans =

city: []temperature: []

wind: []

>> weather(10).city

ans =서울

>> weather(10).temperature(4)

ans =-7

6

Page 7: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

구조체 배열

구조체 배열 생성 방법 II• 어느 한 필드라도 그 값이 cell array로 정의되면, 모든 필드의 값들도 똑같은

size의 cell array가 된다.

>> weather = struct(‘city’, {‘서울’, ‘대전’, ‘부산‘}, …‘temp’, {-5, 1, 3}, …‘time’, 13)

weather =

1x3 struct array with fields:

citytemptime

>> weather(1)

ans = city: '서울'temp: -5time: 13

>> weather(2)

ans = city: '대전'temp: 1time: 13

>> weather(3)

ans = city: '부산'temp: 3time: 13

7

Page 8: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

구조체 배열

구조체 배열 생성 방법 II• 어느 한 필드라도 그 값이 cell array로 정의되면, 모든 필드의 값들도 똑같은 size의 cell

array가 된다.

• cell의 각각 원소가 하나씩 뽑혀져 구조체를 생성하고, 그 구조체가 순서대로 모여구조체 배열을 이룸

>> weather = struct(‘city’, {‘서울’, ‘대전’, ‘부산‘}, …‘temp’, {-5, 1, 3}, …‘time’, 13)

weather =

1x3 struct array with fields:

citytemptime

>> weather(1)

ans = city: '서울'temp: -5time: 13

>> weather(2)

ans = city: '대전'temp: 1time: 13

>> weather(3)

ans = city: '부산'temp: 3time: 13 8

Page 9: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

구조체 배열

구조체 배열 생성 방법 II

• 서로 다른 필드에서 cell size가 동일하지 않으면?

>> weather = struct(‘city’, {‘서울’, ‘대전’, ‘부산‘}, …‘temp’, {-5, 1}, …‘time’, 13)

Error using structArray dimensions of input '4' must match those of input '2', or be scalar.

1 x 3 cell array

1 x 2 cell array

9

Page 10: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

구조체 배열

빈 구조체 배열 생성 방법 III

• 한 field에 빈 cell을 생성하면, 해당 cell 크기와 동일한 크기의 구조체 배열생성

>> weather = struct('city', cell(1,5), 'temp', [], 'time', [])

weather =

1x5 struct array with fields:

citytemptime

>> weather(1)

ans =

city: []temp: []time: []

1 x 5 cell array

10

Page 11: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

struct 데이터 생성시 주의할 점

두 결과가 왜 다른가?

>> a = struct;>> a.city = '서울';>> a.temperature = [0 -3 -5 -7 -1 0 1];>> a.wind = {'북서풍', '약함'}

a =

city: '서울'temperature: [0 -3 -5 -7 -1 0 1]

wind: {'북서풍' '약함'}

>> a = struct('city', '서울', 'temperatures',[0 -3 -5 -7 2 1], 'wind', {'북서풍', '약함'})

a =

1x2 struct array with fields:

citytemperatureswind

>> a(1)

ans =

city: '서울'temperatures: [0 -3 -5 -7 2 1]

wind: '북서풍'

>> a(2)

ans =

city: '서울'temperatures: [0 -3 -5 -7 2 1]

wind: '약함'

11

Page 12: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

struct 데이터 생성시 주의할 점

두 결과를 같게 만드려면?• cell array를 제외한 필드를 먼저 생성하고, cell array를 위한 필드를 추가

>> a = struct;>> a.city = '서울';>> a.temperature = [0 -3 -5 -7 -1 0 1];>> a.wind = {'북서풍', '약함'}

a =

city: '서울'temperature: [0 -3 -5 -7 -1 0 1]

wind: {'북서풍' '약함'}

>> a = struct('city', '서울', 'temperatures',[0 -3 -5 -7 2 1]);

>> a.wind = {'북서풍', '약함'}

a =

city: '서울'temperatures: [0 -3 -5 -7 2 1]

wind: {'북서풍' '약함'}

12

Page 13: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

Quiz

아래와 같이 학적에 관한 구조체를 생성해봅시다.

student

student(1)

.name

“김철수”

.id

20130142

.gpa

.semester

봄학기

.score

[3.4 3.5 3.9 4.1]

student(2)

.name

“이민수”

.id

20130562

.gpa

.semester

봄학기

.score

[3.5 3.1 3.9 3.6]

13

Page 14: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

배열 내 구조체 여러 필드에 동시에 접근하기

앞의 Quiz에서 생성한 students 구조체 배열에서, 모든 학생들의 이름을얻어오고 싶을 때• 방법 I. students 배열의 길이만큼 변수를 적어준다.

• 방법 II. 동일한 길이의 좌변 (LHS) 배열에 할당해준다.

>> [n1, n2] = students.name

n1 =김철수

n2 =이민수

>> z = {}>> [z{1,1:length(students)}] = students.name

>> z(1)

ans = '김철수'

>> z(2)

ans = '이민수'

14

Page 15: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

구조체 필드 조작 명령어

필드 삭제 : rmfield

구조체의 필드 이름 얻어오기

>> students = rmfield(students, 'gpa')

students =

1x2 struct array with fields:

nameid

>> fieldnames(students)

ans =

'name''id'

15

Page 16: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

M-file 프로그래밍

김 탁 은[email protected]

16

Page 17: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

M-file

MATLAB 명령어들을 포함하는 텍스트 파일

실행할 명령어가 길어서 일일이 Command Window에 입력할 수 없거나, 반복적으로 사용해야 하는 경우를 위해 M-file이 필요

확장자는 반드시 “.m”이어야 함

M-file 종류• 스크립트 M-file

– 연속적인 MATLAB 명령어들의 모임

• 함수 M-file– 입력 매개변수와 출력 매개변수, 매개변수들을 처리하는 routine

M-file 편집기• 일반 텍스트 편집기• MATLAB 에디터

17

Page 18: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

스크립트 M-file

연속적인 MATLAB 명령어들의 모임

실행하면 M-file에 적힌 명령어들이 순서대로 실행

스크립트 M-file의 파일명은 원하는 대로 정할 수 있음

실행 방법은• 1) Editor를 실행하여 “Run” 버튼을 누르거나,• 2) Command Window에서 스크립트 M-file의 이름 (.m 확장자 제외) 입력

명령어들이 실행되면서 생성된 변수들은 Workspace상에 나타남• 만약 스크립트 M-file이 함수 M-file 내에서 호출된다면, 스크립트 M-file에서

생성된 변수들은 MATLAB GUI 상의 Workspace에 나타나지 않음

18

Page 19: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file

입력/출력 매개변수를 가지는 routine

함수 정의부(헤더)에 함수 이름을 부여해야 함

함수 M-file의 파일 이름 (확장자 .m 제외) 에 따라 함수 이름이 결정됨• 파일 이름과 함수 이름이 다르면, 파일명을 함수 이름으로 사용함• 따라서 파일 이름과 함수 이름이 일치하도록 해야 함

함수 내에서 생성된 변수들은 함수 workspace에서만 사용 됨• 함수 내에서 사용되는 변수들은 지역 변수(또는 내부 변수) 이므로, MATLAB

GUI 상의 Workspace에는 나타나지 않음• 변수들은 함수의 호출이 끝나는 시점에 사라짐

함수의 실행• Command Window의 프롬프트에서 호출하거나, 다른 함수 또는 스크립트

M-file에서 함수 호출

19

Page 20: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

스크립트 M-file 편집 및 실행

“New Script” 아이콘 클릭하거나, Ctrl+N 키로 Editor 실행

20

Page 21: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

스크립트 M-file 편집 및 실행

명령어 입력, 파일 저장, 실행

21

Page 22: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

스크립트 M-file 실행과 Profiler

“Run and Time” 클릭 시 수행 결과와 함께 Profiler 실행

22

Page 23: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M–file 작성하는 두 가지 방법

방법 1) “New” “Function” 선택 방법 2) “New Script” 선택 후 Editor에서 function 헤더 직접 입력

23

Page 24: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

간단한 함수 M-file

Factorial 계산하는 함수• 아래와 같이 함수 작성 후 factorial.m 으로 저장

• 함수 실행을 위해 Command Window에서 다음과 같이 입력

>> factorial(5)

24

Page 25: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file의 구조

함수 몸체

함수 헤더

함수 끝

함수명입력 매개변수출력

매개변수

25

Page 26: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file의 작동 원리

함수 실행 위해 프롬프트에서 다음을 입력

• 1. Current Directory에서 factorial.m 파일이 있는지 확인• 2. factorial.m 파일이 함수 M-file인지 확인

>> a = factorial( 5 )

26

Page 27: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file의 작동 원리

함수 실행 위해 프롬프트에서 다음을 입력

• 1. Current Directory에서 factorial.m 파일이 있는지 확인• 2. factorial.m 파일이 함수 M-file인지 확인• 3. 입력 매개변수 복사

>> a = factorial( 5 )

function [ y ] = factorial( n )% 팩토리얼 계산 함수

y = 1;

for i = 1:ny = y * i;

end

end

27

Page 28: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file의 작동 원리

함수 실행 위해 프롬프트에서 다음을 입력

• 1. Current Directory에서 factorial.m 파일이 있는지 확인• 2. factorial.m 파일이 함수 M-file인지 확인• 3. 입력 매개변수 복사• 4. 출력 매개변수에 결과값 복사

>> a = factorial( 5 )

function [ y ] = factorial( n )% 팩토리얼 계산 함수

y = 1;

for i = 1:ny = y * i;

end

end

28

Page 29: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file: 다수의 입력 및 출력 매개변수

함수 M-file은 다수의 입력 및 출력 매개변수를 가질 수 있음 함수 호출 시 다수의 입출력 매개변수는 아래와 같이 전달됨

>> [a, b, c, d, e] = my_func( m, n, p, q, r, s )

function [ o1, o2, o3, o4, o5 ] = my_func( i1, i2, i3, i4, i5, i6 )

% 함수 본체를 여기에 기술

o1 = …; o2 = …; o3 = …; o4 = …; o5 = …;

end

29

Page 30: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file: 다수의 입력 및 출력 매개변수

함수 M-file은 다수의 입력 및 출력 매개변수를 가질 수 있음 함수 호출 시 다수의 입출력 매개변수는 아래와 같이 전달됨

>> [a, b, c, d, e] = my_func( m, n, p, q, r, s )

function [ o1, o2, o3, o4, o5 ] = my_func( i1, i2, i3, i4, i5, i6 )

% 함수 본체를 여기에 기술

o1 = …; o2 = …; o3 = …; o4 = …; o5 = …;

end

입력매개변수값전달

30

Page 31: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

함수 M-file: 다수의 입력 및 출력 매개변수

함수 M-file은 다수의 입력 및 출력 매개변수를 가질 수 있음 함수 호출 시 다수의 입출력 매개변수는 아래와 같이 전달됨

>> [a, b, c, d, e] = my_func( m, n, p, q, r, s )

function [ o1, o2, o3, o4, o5 ] = my_func( i1, i2, i3, i4, i5, i6 )

% 함수 본체를 여기에 기술

o1 = …; o2 = …; o3 = …; o4 = …; o5 = …;

end

출력매개변수에결과값리턴

31

Page 32: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

Quiz

n-차원 공간상의 두 점을 입력 받아 두 점 사이의 맨해튼 거리와유클리디안 거리를 계산해주는 함수를 작성해 봅시다.

• Note– n-차원 공간상의 점 ≡ 1 x n 벡터– 두 점 (x1, x2, …, xn)와 (y1, y2, …, yn)의 맨해튼 거리 : |x1-y1| + |x2-y2| + … + |xn-yn|

32

Page 33: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

프로그램 흐름 제어 (Flow Control)

프로그램 흐름제어를 위한 statements• if, for, while, switch, continue, break

흐름 제어?• 프로그램 수행 중 조건에 따른 명령어의 분기 (if, switch)• 명령어의 반복 (for, while)• 명령어 pass (continue)• 명령어 중단 (break)

33

Page 34: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

if 문

Syntax

• 조건 논리식이 맞지 않으면, 그 다음 조건 논리식을 검사• 조건 논리식이 맞으면 명령어 문장을 수행하고 if문 종료

if (조건 논리식)(명령어 문장들)

elseif (조건 논리식)(명령어 문장들)

else(명령어 문장들)

end

𝑓𝑓 𝑡𝑡 =

1 , 𝑡𝑡 = 0sin(𝜋𝜋𝑡𝑡)𝜋𝜋𝑡𝑡 , 𝑡𝑡 > 0

−1 , 𝑡𝑡 < 0

if t == 0f = 1

elseif t > 0f = sin(pi*t)/(pi*t)

elsef = -1

end

조건이맞지않으면…

34

Page 35: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

if 문

여러 줄에 걸쳐 쓰거나, 한 줄에 써도 무방

조건 논리식에 scalar 값이 아니라, 배열(array) 값이 주어질 수도 있음• 배열의 모든 원소의 값이 0 (즉, False)가 아니어야 조건 논리식이 참(True)

if x > 0x = sqrt(x);

endif x > 0, x = sqrt(x); end≡

>> M = magic(2)

M =

1 34 2

>> if M, disp(‘nonzero array!’); endnonzero array!

>> M = diag([1 2])

M =

1 00 2

>> if M, disp(‘nonzero array!’); end>>

35

Page 36: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

Quiz

입력 변수 x의 값이 짝수인지, 홀수인지 판별하고, 짝수이면 0, 홀수이면 1을 반환하는 함수 M-file을 작성해봅시다.

• Hint– mod(a,b) 함수 : a/b를 하여 나머지를 반환하는 함수

36

Page 37: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

for 문

Syntax

• 증가분을 입력하지 않으면, 기본값은 1

for 인덱스변수=초기값:증가분:최종값(명령어 문장들)

end

% 팩토리얼

>> y = 1>> for x = 1:5, y = y * x; end>> y

y =

120

for 인덱스변수= 배열(명령어 문장들)

end

>> for x = [pi/6 pi/4 pi/3], disp([x sin(x)]); end

0.5236 0.50000.7854 0.70711.0472 0.8660

37

Page 38: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

for 문

for 문의 중첩• (i, j) 원소가 j ≥ i일 때, i/j인 5 x 5 행렬 A 생성

for문과 continue의 사용• 5 이하의 값은 출력 하지 않음

n = 5;A = eye(n);for j = 2:n

for i = 1:j-1A(i, j) = i / j;

endend

>> A

A =1.0000 0.5000 0.3333 0.2500 0.2000

0 1.0000 0.6667 0.5000 0.40000 0 1.0000 0.7500 0.60000 0 0 1.0000 0.80000 0 0 0 1.0000

for i = 1:10if i < 5, continue; enddisp(i);

end

5678910

38

Page 39: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

Quiz

for 문을 이용하여 황금률 𝟏𝟏+ 𝟓𝟓𝟐𝟐를 근사적으로 나타내는 다음과 같은

연속되는 분수를 계산해 봅시다.

1 +1

1 + 11 + 1

1 + 11 + 1

1 + 11 + 1

1 + 11 + 1

1 + 1

39

Page 40: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

Quiz

지난 시간에 배운 Upper Triangular Matrix를 만드는 함수 triu(M, k)를함수 M-file로 직접 구현해봅시다.

• Hint: for, if, continue 사용

% my_triu.m

function [ uM ] = my_triu( M, k )

[m, n] = size( M );uM = zeros( m, n );

% 이 부분을 채워봅시다.

end

함수정의

40

Page 41: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

while 문

Syntax

• 논리 조건식이 참이면 명령어 문장들이 수행• 논리 조건식이 거짓이면 반복문을 빠져 나옴

while (논리 조건식)(명령어 문장들)

end

% 0이 아닌 가장 작은 부동 소수점

x = 1;while true

xmin = x;x = x / 2;if x == 0, break, end

endxmin

xmin =4.9407e-324

% 무한 수열의 합

n = 1;oldsum = -1;newsum = 0;while newsum > oldsum

oldsum = newsum;newsum = newsum + n^(-4);n = n + 1;

endnewsum

newsum =1.0823

114

+ 124

+ 134

+ …

41

Page 42: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

switch 문

Syntax

• 표현이 평가된 후, 그 값이 일치하는 case 문의명령어 문장들을 수행

• 일치하는 값이 없는 경우 otherwise 의 명령어문장들을 수행

• otherwise는 생략 가능

switch (표현)case (값)

(명령어 문장들)case (값)

(명령어 문장들)otherwise

(명령어 문장들)end

% count.m

function y = count ( x )

switch xcase 1

y = ‘one’case 2

y = ‘two’otherwise

y = ‘many’end

>> count(1)ans =one

>> count(2)ans =two

>> count(3)ans =many

42

Page 43: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

Quiz

벡터 𝑿𝑿 = 𝒙𝒙𝟏𝟏,𝒙𝒙𝟐𝟐, … , 𝒙𝒙𝒏𝒏 가 있을 때, 벡터 X의 1-norm, 2-norm, ∞-norm은다음과같이정의됩니다.

• 𝑋𝑋 1 ≔ ∑𝑖𝑖=1𝑛𝑛 𝑥𝑥𝑖𝑖• 𝑋𝑋 2 ≔ ∑𝑖𝑖=1𝑛𝑛 𝑥𝑥𝑖𝑖2

• 𝑋𝑋 ∞ ≔ max( 𝑥𝑥𝑖𝑖 )

벡터 X와 p값을입력으로받아 p-norm의값을계산하는함수를작성해봅시다. (switch 문을사용하여작성해봅시다)

• p 는 1, 2, Inf 값을 사용

43

Page 44: 오늘강의내용 (2014/01/08) MATLAB · 2014-01-08 · – 연속적인MATLAB 명령어들의모임 • 함수M-file – 입력매개변수와출력매개변수, 매개변수들을처리하는routine

MATLAB Programming

try-catch

try-catch 문은 프로그램 수행 시 오류가 발생될 경우 예외 처리를 하기위해 사용

Syntax

try(명령어 문장들)

catch(명령어 문장들)

end

x = [4 2 6];y = [5 3];

tryz = dot(x, y)

catchdisp(‘x와 y는 차원이 다름.’)

end

에러발생시…

44