lec 01. introduction to matlab

73
MATLAB Programming MATLAB 시작하기 김탁은 [email protected] 1

Upload: tak-eun-kim

Post on 15-Jun-2015

2.367 views

Category:

Education


16 download

TRANSCRIPT

Page 1: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 시작하기

김 탁 은[email protected]

1

Page 2: Lec 01. Introduction to MATLAB

MATLAB Programming

시작하기에 앞서

강의 시간

• 1월 20일 ~ 1월 29 (월~금)

• 14:00 ~ 18:00 (총 30시간)

• 50분 강의, 10분 휴식

강의 교재

• 쉽게 배우는 MATLAB 입문과 활용 (2판)

• 임종수의 MATLAB 7

연락처

• 강사 김탁은 ( [email protected] )

• 조교 김도형 ( [email protected] )

• IT 아카데미 사무국 ( [email protected], 042-350-8941~3)

2

Page 3: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 강좌에서 다루는 내용들

MATLAB 기본 연산• 벡터, 행렬 연산 (덧셈, 뺄셈, 곱셈), 각종 수학 함수

프로그래밍 작성 기법• 연산자, 데이터 타입, 프로그램 흐름 제어, M-파일 스크립트 및 M-파일 함수 작성

그래프 드로잉• 각종 2D, 3D 그래프 (막대 그래프, 로그 그래프, 3차원 그래프, …)

각종 수학 문제 해결 기법• 심볼릭 툴박스, 선형 대수, 방정식, 미분과 적분

데이터 분석• 회귀 분석

파일 입출력• 데이터 파일 읽기 및 저장

GUI Interface• 간단한 GUI Application 만들어보기

3

Page 4: Lec 01. Introduction to MATLAB

MATLAB Programming

오늘 강의 내용

MATLAB 소개 및 역사

MATLAB 인터페이스 둘러보기

MATLAB 기본 명령어

벡터/행렬 기본 연산

기본적인 수학 함수 사용법

4

Page 5: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB?

MATrix LABoratory

다양한 수치 해석 문제에 대한total solution 제공

Script 언어로, 사용자의 입력에대한 결과 즉시 확인 가능

강력한 시각화 도구 제공

다양한 툴박스 지원

• Control System Toolbox• Signal Processing Toolbox• Image Processing Toolbox• Wavelet Toolbox• …

5

Page 6: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB?

GUI Interface

Simulink• Model-based design tool

개발용 및 상용 보드 지원• 각종 device driver• VxWare 등

Embedded Solution 제공• MATLAB Code C, VHDL, …

6

Page 7: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 역사

Early 1970s

• Linear algebra 문제 해결을 위한 LINPACK 라이브러리,

eigenvalue/eigenvector를 계산하기 위한 EISPACK 라이브러리 개발

Late 1970s

• Cleve Moler 교수가 New Mexico 대학 재직 시 학생들이 LINPACK,

EISPACK 라이브러리를 Fortran을 배우지 않고 사용할 수 있도록

소프트웨어 개발

1984

• Cleve Moler가 Stanford 대학에서 강의. 학생이었던 Jack Little가

강의에 감명 받음. 상업적 성공 예감.

• MATLAB을 C로 포팅. 라이브러리 작성. Mathworks 창업

Cleve Moler

Jack Little

7

Page 8: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 역사

관련 자료

• Cleve Moler

– http://www.mathworks.co.kr/company/aboutus/founders/clevemoler.html

• Jack Little

– http://www.mathworks.co.kr/company/aboutus/founders/jacklittle.html

• Origins of MATLAB 비디오

– http://www.mathworks.co.kr/videos/origins-of-matlab-

70332.html?type=shadow

8

Page 9: Lec 01. Introduction to MATLAB

MATLAB Programming

오늘날의 MATLAB

테크니컬 컴퓨팅

• 데이터 수집 – 수집 보드, 계측 장비 등 하드웨어와 통신하여 데이터 수집

• 데이터 분석 – 강력한 수리 엔진으로 통계적 분석, 이미지 분석, 신호 분석 등을 쉽고 빠르게 처리

• 수학적 모델링 – curve fitting, 통계학, 최적화 등 수학적 도구 제공

• 알고리즘 개발 – C++/Fortran 대비 빠른 설계, 다양한 알고리즘 및 과학/수학 함수 제공

• 병렬 컴퓨팅 – 대규모 데이터를 멀티코어, 클러스터, 그리드 및 클라우드 등을 통해 처리

• 데스크탑 및 웹 배포 – 개발한 알고리즘 또는 프로그램을 데스트탑 또는 웹으로 배포 기능

시뮬레이션 및 모델 기반 설계

• 시스템 설계와 시뮬레이션 – 사전 정의된 라이브러리 블록으로 시스템 모델링

• 이산 이벤트 시뮬레이션 – 큐잉 시스템이나 에이전트 기반 시스템 시뮬레이션

• 임베디드 코드 생성 – MATLAB 코드로부터 C/C++ 코드 생성, 특정 프로세서 아키텍처를 위한 코드 최적화

• HDL 코드 생성 및 검증 – VHDL, Verilog 코드 생성, 소프트웨어와 하드웨어 Cosimulation

• 확인, 검증 및 테스트 – 임베디드 소프트웨어, 디지털/아날로그 하드웨어의 가상 테스트를 통한

프로젝트 문제 제거 및 개발시간 단축

9

Page 10: Lec 01. Introduction to MATLAB

MATLAB Programming

오늘날의 MATLAB

다양한 프로그램

• 임베디드 시스템• 제어 시스템• 디지털 신호 처리• 통신 시스템• 이미지 및 비디오 처리• FPGA 설계• 메카트로닉스• 테스트 및 측정• 계산 생명공학• 계산 금융

다양한 산업

• 항공 우주 및 국방• 자동차• 생명 과학 및 제약• 통신• 전자 및 반도체• 에너지• 금융 서비스• 산업 자동화 및 기계

단순히 수학 계산을 위한 프로그램이 아니라,

산업 전반에서 활용되는 강력한 도구!!

10

Page 11: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 시작하기!

11

Page 12: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 소프트웨어 구하기

KAIST 학생/직원

• 학교에서 MATLAB License를 구매하였음

• 학교 이메일 주소 (*@kaist.ac.kr) 이나 연구실 메일 주소(*@*.kaist.ac.kr로 끝나는

메일)만 있으면 Mathworks 홈페이지에 등록 후 설치 가능

• http://circnts.kaist.ac.kr/에서 다운로드 후 설치

License가 없는 분

• 아진 출판사 (http://ajin.to)에서

학생용 MATLAB 구매 후 사용

• 학생임을 증명하기 위한 학생증

사본 등이 필요

• MATLAB은 불법 복제 단속이

심하므로 정식으로 구매하여

사용하시길 바랍니다

12

Page 13: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 소프트웨어 구하기

circnts.kaist.ac.kr 로그인 Etc Products MATLAB

13

Page 14: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 설치하기 및 인증하기

14

Page 15: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 인증하기

KAIST 재학생인 경우• 두번째 “I need to create an Account” 선택

15

Page 16: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 인증하기

빈칸 입력 후 이메일 인증• Activation Key:

16

Page 17: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 첫화면 (R2012b)

17

Page 18: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 인터페이스

Editor

Command Window

CurrentFolder

Workspace

CommandHistory

18

Page 19: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 인터페이스

Current Folder• 현재 작업 디렉토리의 파일 리스트를 보여줌• 파일을 더블 클릭하면 해당 파일 확장자에 따른

액션이 실행됨

Editor• M-파일 스크립트 파일을 작성하기 위한 에디터

Command Window• MATLAB 명령어를 직접 입력하여 실행

Workspace• 현재 MATLAB에서 사용되고 있는 데이터에

대한 정보를 기록• 더블 클릭하여 해당 데이터를 Excel과 같은

spread sheet 구조로 볼 수 있으며, 수정도 가능

Command History• MATLAB을 사용하는 동안 실행한 모든

명령어들의 목록을 보여줌

Editor

Command Window

CurrentFolder

Workspace

CommandHistory

19

Page 20: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 인터페이스

본인의 MATLAB 인터페이스가 다르게 나타날 때• Layout의 Default를 누름• Editor 화면은 나타나지 않음

20

Page 21: Lec 01. Introduction to MATLAB

MATLAB Programming

Command Window 폰트 설정

21

Page 22: Lec 01. Introduction to MATLAB

MATLAB Programming

Keyboard Mapping 변경

22

Page 23: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 인터페이스 익숙해지기

[실습] 2 x 3 행렬을 만들고, Workspace에서 값을 바꿔봅시다.

1. Command Window에서 아래 명령어를 입력합니다.

2. Workspace에 “A”를 더블 클릭하여 아래와 같은 spread sheet가 나타나는지확인합니다.

3. 값을 변경한 다음, 우측 상단의 X 표시를 눌러 spread sheet를 끕니다. 그리고 아래 명령어를 입력하여 값이 변경되었는지 확인합니다.

>> A = [1 2 3; 4 5 6]

>> A

23

Page 24: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 인터페이스 익숙해지기

[실습] 방금 전에 입력한 명령어를 화살표 키를 이용하여불러봅시다.

1. 마우스로 Command Window를 선택하면 창이 활성화되어 타이틀 바의색이 진하게 되고, 프롬프트(>>)에 커서가 깜박거립니다.

2. 키보드의 위/아래 화살표 키를 눌러보세요. 이전에 입력했던 명령어가프롬프트에 나타나는지 확인합니다.

3. 화살표 키를 조작하는 대신 Command History 창에 나타난 명령어를 더블클릭하여 실행해봅시다.

24

Page 25: Lec 01. Introduction to MATLAB

MATLAB Programming

MATLAB 조작 기본 명령어

MATLAB 종료하기

Command Window 깨끗하게 만들기

MATLAB에서 사용하는 모든 변수와 함수 지우기

MATLAB 도움말 이용하기

>> clc

>> clear또는>> clear all

>> quit

>> help cos

또는, workspace에서변수를선택한다음마우스

오른쪽버튼클릭하여 delete를선택하거나,

키보드의 delete 키를누르면해당변수삭제

25

Page 26: Lec 01. Introduction to MATLAB

MATLAB Programming

변수 할당 및 수식 연산

변수 할당• 다른 프로그래밍 언어(C/JAVA 등)에서 변수 할당 방법과 동일하게

= 연산자 사용하여 변수 할당

• = 는 “동치”가 아니라, 오른쪽의 값을 왼쪽의 변수에 “할당”하라는 뜻!

변수 할당 예제

>> 변수명(variable) = 수식(expression)

>> A = 5 * 3A =

15

>> a = A * 10a =

150

주의할 점!• 변수명은무조건영문자로시작해야한다.

숫자, 특수문자, 언더바등으로시작할수없다.

• MATLAB에서는대소문자를다르게처리한다.

• 따라서변수명 a와변수명 A는서로다른

변수이다.

26

Page 27: Lec 01. Introduction to MATLAB

MATLAB Programming

변수 할당 및 수식 연산

변수명 없이 수식만 쓰는 경우는?

• MATLAB이 자동으로 계산 결과를 ans 변수에 할당함

• ans 변수는 일반 변수처럼 사용 가능

>> 5 * 3 + 6

>> 5 * 3 + 6ans =

26

>> ans * 3ans =

63

27

Page 28: Lec 01. Introduction to MATLAB

MATLAB Programming

수식 표현에 익숙해지기

다음 수식을 MATLAB 수식 표현으로 기술하기

• 𝜋𝜋 = 3.141592 …는 pi 로 기술

• 자연상수 e는 exp(1)로 기술. 𝑒𝑒𝑥𝑥는 exp(x)로 기술

• i와 j는 복소수(complex number)의 허수를 의미

8 +6 × 1 + 5

243 × 𝜋𝜋 × 103

𝑒𝑒 3 + 𝜋𝜋 × 103

𝑒𝑒𝜋𝜋 × −1

>> 8 + (6 * (1 + sqrt(5))) / 2

>> 4 / 3 * pi * 10^3

>> exp(sqrt(3)) + pi * 10^3

>> exp(pi * sqrt(-1)) >> exp(pi * i)or

28

Page 29: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz

x = 5 일 때, 다음 수식들을 계산해 봅시다.

−3 sin 𝑥𝑥 𝑐𝑐𝑐𝑐𝑐𝑐2 𝑥𝑥 − 𝑐𝑐𝑠𝑠𝑠𝑠3(𝑥𝑥)

𝑥𝑥2 − 2

𝑒𝑒𝑖𝑖𝑥𝑥 + 𝑒𝑒−𝑖𝑖𝑥𝑥

2𝑒𝑒𝑖𝑖𝑥𝑥 − 𝑒𝑒−𝑖𝑖𝑥𝑥

2𝑠𝑠

29

Page 30: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz Sol.

x = 5 일 때, 다음 수식들을 계산해 봅시다.

−3 sin 𝑥𝑥 𝑐𝑐𝑐𝑐𝑐𝑐2 𝑥𝑥 − 𝑐𝑐𝑠𝑠𝑠𝑠3(𝑥𝑥)

𝑥𝑥2 − 2

>> x = 5;>> - (3*sin(x)*cos(x)^2-sin(x)^3)/(x^2-2)ans =

-0.0283

𝑒𝑒𝑖𝑖𝑥𝑥 + 𝑒𝑒−𝑖𝑖𝑥𝑥

2𝑒𝑒𝑖𝑖𝑥𝑥 − 𝑒𝑒−𝑖𝑖𝑥𝑥

2𝑠𝑠

>> x = 5;>> (exp(i*x)+exp(-i*x))/2 * (exp(i*x)-exp(-i*x))/(2*i)ans =

-0.2720

30

Page 31: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터 (vector)

벡터란?• 정의: 크기와 방향을 갖는 물리적인 양• 표현: 순서를 가지는 어떠한 수들의 나열

MATLAB에서 벡터 기술하기• 괄호[ ] 사이에 숫자를 나열• 숫자 간 구분은 공백(space) 또는 컴마(,)

행(row)벡터 & 열(column)벡터• 열 벡터는 숫자 사이에 세미콜론(;)을 사용하여 생성

>> u = [-3 2 4 8 11]u =

-3 2 4 8 11

>> u = [-3, 2, 4, 8, 11]u =

-3 2 4 8 11or

>> u = [1; 2; 3]u =

123

31

Page 32: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터 (vector)

행 벡터 ↔ 열 벡터 변환하기• 괄호 끝에 프라임 기호(‘) 붙이기

벡터 원소 참조하기

>> u = [-3 2 4]u =

-3 2 4>> u’u =

-324

>> u = [-3; 2; 4]u =

-324

>> u’u =

-3 2 4

>> u(1)ans =

-3>> u(2)ans =

2>> u(3)ans =

4

>> u(4)Index exceeds matrix dimensions.

• 벡터의 시작 인덱스는 1• 벡터 범위를 벗어난 원소 접근시

32

Page 33: Lec 01. Introduction to MATLAB

MATLAB Programming

순차적인 행벡터 생성

[1, 2, 3, …, 100] 인 행벡터를 생성하는 방법

• 방법 I: 숫자들을 일일이 기술

– 손도 아프고.. 시간도 없고.. 만약 중간에 입력하다가 틀리면??

• 방법 II: 콜론 연산자 (colon operator) 사용

– 쉽고 빠르게 원하는 행벡터 생성!!

• 방법 III. linspace 함수 사용

>> u = [1 2 3 4 5 … 100]

>> u = 1:100

>> u = linspace(1,100,100)

33

Page 34: Lec 01. Introduction to MATLAB

MATLAB Programming

순차적인 행벡터 생성

콜론 연산자 사용법

• 의미: “시작값” 부터 “종료값” 까지 “증가/감소분”씩 증가/감소하는 수들의 벡터• 증가값 생략시 증가값은 1로 설정

다양한 순차적 행벡터 생성 예

• 예 1) -5부터 2까지 정수로 구성된 순차적 행벡터를 생성하라

• 예 2) 2부터 -5까지 정수로 구성된 순차적 행벡터를 생성하라

• 예 3) 0부터 1까지 0.01씩 증가하는 순차적 행벡터를 생성하라

>> u = 시작값:증가/감소분:종료값

>> u = -5:2 or >> u = -5:1:2

>> u = 2:-1:-5

>> u = 0:0.01:1

34

Page 35: Lec 01. Introduction to MATLAB

MATLAB Programming

순차적인 행벡터 생성

linspace (linearly spaced vector)• 간격이 일정한 수들의 벡터를 생성

• 생성할 값 개수 생략시 100으로 설정

순차적 행벡터 생성 예

• 예 1) -1부터 1까지 간격이 동일한 9개의 값을 생성하라

• 예 2) 1부터 -1까지 역순으로 간격이 동일한 5개의 값을 생성하라

>> u = linspace(시작값, 종료값, 생성할 값 개수)

>> u = linspace(-1, 1, 9)ans =

-1.0000 -0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000

>> u = linspace(1, -1, 5)ans =

1.0000 0.5000 0 -0.5000 -1.0000

35

Page 36: Lec 01. Introduction to MATLAB

MATLAB Programming

단일 벡터 연산

각종 수학 함수• 벡터의 각 원소에 대해 적용

• 벡터의 각 원소의 n-제곱근

>> a = [1 2 3];>> exp(a)ans =

2.7183 7.3891 20.0855

>> log(a)ans =

0 0.6931 1.0986

>> sqrt(a)ans =

1.0000 1.4142 1.7321

>> a = [1 2 3]>> a .^ 2ans =

1 4 9

주의할 점!• n-제곱근을의미하는 ^ 기호는스칼라에대해정의

• 따라서벡터에대해 a^3와같이사용하면에러

>> a = [-0.4 1.2 0.6 -1.3]a =

-0.4000 1.2000 0.6000 -1.3000

>> abs(a)ans =

0.4000 1.2000 0.6000 1.3000

>> floor(a)ans =

-1 1 0 -2

>> ceil(a)ans =

0 2 1 -1

절대값

올림

내림

36

Page 37: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터와 스칼라 연산• 벡터 𝐴𝐴 = (𝑎𝑎1,𝑎𝑎2 … , 𝑎𝑎𝑛𝑛)와, 스칼라 변수 c가 있을 때,

– 𝐴𝐴 + 𝑐𝑐 = 𝑐𝑐 + 𝐴𝐴 = (𝑐𝑐 + 𝑎𝑎1, 𝑐𝑐 + 𝑎𝑎2 … , 𝑐𝑐 + 𝑎𝑎𝑛𝑛)– 𝐴𝐴 − 𝑐𝑐 = (𝑎𝑎1 − 𝑐𝑐, 𝑎𝑎2 − 𝑐𝑐… ,𝑎𝑎𝑛𝑛 − 𝑐𝑐)– 𝑐𝑐 − 𝐴𝐴 = (𝑐𝑐 − 𝑎𝑎1, 𝑐𝑐 − 𝑎𝑎2 … , 𝑐𝑐 − 𝑎𝑎𝑛𝑛)– 𝐴𝐴 ∗ 𝑐𝑐 = 𝑐𝑐 ∗ 𝐴𝐴 = (𝑐𝑐 ∗ 𝑎𝑎1, 𝑐𝑐 ∗ 𝑎𝑎2 … , 𝑐𝑐 ∗ 𝑎𝑎𝑛𝑛)– 𝐴𝐴/𝑐𝑐 = (𝑎𝑎1/𝑐𝑐,𝑎𝑎2/𝑐𝑐… ,𝑎𝑎𝑛𝑛/𝑐𝑐)– 𝑐𝑐 ./𝐴𝐴 = (𝑐𝑐/𝑎𝑎1, 𝑐𝑐/𝑎𝑎2 … , 𝑐𝑐/𝑎𝑎𝑛𝑛)

>> a = [1 2 3 4];>> c = 5;

>> a + cans =

6 7 8 9

>> a – cans =

-4 -3 -2 -1

>> c – aans =

4 3 2 1

>> a*cans =

5 10 15 20

>> c*aans =

5 10 15 20

>> a/cans =

0.2000 0.4000 0.6000 0.8000

>> c./aans =

5.0000 2.5000 1.6667 1.2500 37

Page 38: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터 간 연산

다음 두 벡터가 있을 때,

두 벡터의 합과 차

두 벡터의 내적

두 벡터의 외적

>> x = [-1 0 1]>> y = [3 4 5]

>> dot(x, y)ans =

2

>> cross(x, y)ans =

-4 8 4

𝐱𝐱′𝐲𝐲 =−𝟏𝟏𝟎𝟎𝟏𝟏

𝟑𝟑 𝟒𝟒 𝟓𝟓

두 벡터의 각 원소간 곱셈

두 벡터의 각 원소간 나눗셈

>> x’ * yans =

-3 4 -50 0 03 4 5

>> x + yans =

2 4 6>> x-yans =

-4 -4 -4>> x .* yans =

-3 0 5

>> x ./ yans =

-0.3333 0 0.2000

38

Page 39: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터와 통계량

벡터가 주어졌을 때, 벡터의 통계량을 계산• 통계량: 최대값, 최소값, 전체 합, 평균, 분산, 표준편차 등

>> x = [5 3 8 4];>> min(x)ans =

3

>> max(x)ans =

8

>> sum(x)ans =

20

>> mean(x)ans =

5

>> var(x)ans =

4.6667

>> std(x)ans =

2.1602

최소값

최대값

전체 합

평균

분산

표준편차

39

Page 40: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz

대전 초등학교 6학년 1반의 성적이 다음과 같다고 할 때, 여러 가지값들을 구해봅시다.• 6학년 1반의 성적

• 1) 각 과목 별 평균• 2) 각 학생 별 총점 및 평균• 3) 각 학생 별 최고점을 받은 과목의 점수• 4) 반 전체 점수 합계 및 평균

국어 수학 과학 체육

영희 98 83 89 89

철수 89 92 97 87

민수 78 86 91 96

40

Page 41: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz Sol.

대전 초등학교 6학년 1반의 성적이 다음과 같다고 할 때, 여러 가지 값들을구해봅시다.

• 1) 각 과목 별 평균

• 2) 각 학생 별 총점 및 평균

• 3) 각 학생 별 최고점을 받은 과목의 점수

• 4) 반 전체 점수 합계 및 평균

국어 수학 과학 체육

영희 98 83 89 89

철수 89 92 97 87

민수 78 86 91 96

>> s1 = [98 83 89 89];>> s2 = [89 92 97 87];>> s3 = [78 86 91 96];

>> (s1+s2+s3)/3

>> sum(s1)>> mean(s1)…

>> sum(s1+s2+s3)>> sum(s1+s2+s3) / 12>> (mean(s1)+mean(s2)+mean(s3))/3

>> max(s1)

41

Page 42: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터 일부 원소 가져오기

• 벡터 x가 아래와 같이 10개의 원소를 가진다고 하자

• 3~6번째에 위치한 (연속된) 원소들만을 가져오고 싶을 때

• 1, 5, 7번째에 위치한 (떨어진) 원소들만을 뽑아내고 싶을 때

• 3, 7~9 번째에 위치한 원소들을 뽑아내고 싶을 때

>> x = linspace(1,100,10)x =

1 12 23 34 45 56 67 78 89 100

>> x( [1 5 7] )x =

1 45 67

>> x(3:6)x =

23 34 45 56

Colon Operator

>> x( [3 7:9] )x =

23 67 78 89

42

Page 43: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터 일부 원소 가져오기

• 벡터 x가 아래와 같이 10개의 원소를 가진다고 하자

• 3번째에 위치한 원소의 값을 10으로 바꾸고 싶을 때

• 5:7번째에 위치한 원소들의 값을 -5로 바꾸고 싶을 때

• 3, 7~9 번째에 위치한 원소들의 값을 105로 바꾸고 싶을 때

• 6~8번째 위치한 원소들의 값을 각각 100, 200, 300 으로 바꾸고 싶을 때

>> x = linspace(1,100,10)x =

1 12 23 34 45 56 67 78 89 100

>> x(3) = 10x =

1 12 10 34 45 56 67 78 89 100

>> x(5:7) = -5x =

1 12 10 34 -5 -5 -5 78 89 100

>> x([3 7:9]) = 105x =

1 12 105 34 -5 -5 105 105 105 100

>> x(6:8) = [100 200 300]x =

1 12 105 34 -5 100 200 300 105 100

주의할 점!

• 들어갈자리의개수와, 바꿀값의개수가동일해야함

43

Page 44: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz

1부터 10까지 10개의 연속된 숫자를 가진 벡터 x가 있을 때, 벡터 x의

짝수를 벡터 x의 최대값에서 자기 자신을 뺀 값으로 대체하여 봅시다.

• 즉, x = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 벡터가 주어졌을 때, 2는 10-2, 4는 10-4,…

10은 10-10 을 계산하여, 최종적으로 (1, 8, 3, 6, 5, 4, 7, 2, 9, 0)이 결과로

나오게 만들어 봅시다.

• 힌트: Colon operator, max 함수, 스칼라와 벡터의 차, 벡터의 일부 원소 변경

44

Page 45: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz Sol.

1부터 10까지 10개의 연속된 숫자를 가진 벡터 x가 있을 때, 벡터 x의

짝수를 벡터 x의 최대값에서 자기 자신을 뺀 값으로 대체하여 봅시다.

• 즉, x = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 벡터가 주어졌을 때, 2는 10-2, 4는 10-4,…

10은 10-10 을 계산하여, 최종적으로 (1, 8, 3, 6, 5, 4, 7, 2, 9, 0)이 결과로

나오게 만들어 봅시다.

• 힌트: Colon operator, max 함수, 스칼라와 벡터의 차, 벡터의 일부 원소 변경

>> x = 1:10x =

1 2 3 4 5 6 7 8 9 10>> x(2:2:10) = max(x) – x(2:2:10)x =

1 8 3 6 5 4 7 2 9 0

45

Page 46: Lec 01. Introduction to MATLAB

MATLAB Programming

벡터 합치기

여러 행벡터 합치기• x = [1 2 3], y = [4 5], z = [6 7] 일 때, 직접 타이핑 하지 않고 쉽고 빠르게 [1 2 3 4 5 6

7] 벡터를 생성하는 방법은?

• [실습 6] MATLAB 프롬프트에 [x y x] 를 입력했을 때 어떠한 결과가 나오는지확인해봅시다. [x y’]를 입력했을 때 어떠한 결과가 나오는지 확인해 봅시다.

여러 열벡터 합치기• 세미콜론을 사용하면, 열벡터를 열(column) 방향으로 병합한다.

>> x = [1 2 3];>> y = [4 5];>> z = [6 7];>> [x y z]ans =

1 2 3 4 5 6 7

주의할 점!

• 벡터를합칠때, 둘다열벡터이거나행벡터이어야함

>> x = [1; 2; 3];>> y = [4; 5];>> [x; y]ans =

12345

46

Page 47: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 (Matrix)

47

Page 48: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 (Matrix)

행렬이란?• 숫자를 네모꼴로 배열한 것

• 벡터와 행렬과의 관계– 행벡터: 1 x n 행렬– 열벡터: n x 1 행렬

• 지금까지배운벡터의연산에관한내용들이사실은모두행렬연산

48

Page 49: Lec 01. Introduction to MATLAB

MATLAB Programming

2차원 행렬 만들기

행 순으로 원소를 나열하고, 다음 행의 원소를 나열하기 전 세미콜론(;)을 적어줌

• 𝑴𝑴 = 𝟐𝟐 𝟏𝟏 𝟒𝟒𝟔𝟔 𝟑𝟑 𝟓𝟓 행렬 생성하기 (2 x 3 행렬)

• 𝑴𝑴 =𝟐𝟐 𝟑𝟑𝟒𝟒 𝟔𝟔𝟓𝟓 𝟏𝟏

행렬 생성하기 (3 x 2 행렬)

>> M = [2 1 4; 6 3 5]

M =2 1 46 3 5

>> M = [2 3; 4 6; 5 1]

M =2 34 65 1

49

Page 50: Lec 01. Introduction to MATLAB

MATLAB Programming

다양한 2차원 행렬 생성 방법

행렬 𝑴𝑴 =𝟐𝟐 𝟏𝟏 𝟒𝟒𝟔𝟔𝟕𝟕

𝟑𝟑𝟑𝟑

𝟓𝟓𝟗𝟗

를 생성

<방법 1>>> M = [2 1 4]M =

2 1 4

>> M = [M; 6 3 5]M =

2 1 46 3 5

>> M = [A; 7 3 9]M =

2 1 46 3 57 3 9

<방법 2>>> M = [ [2 1 4]; [6 3 5]; [7 3 9] ]

<방법 3>>> r1 = [2 1 4]; >> r2 = [6 3 5];>> r3 = [7 3 9];>> M = [ r1; r2; r3 ] 50

Page 51: Lec 01. Introduction to MATLAB

MATLAB Programming

특수 목적의 행렬 생성 함수

zeros, ones, eye, rand, randn

zeros( m, n ) 모든원소가 0인 m x n 행렬생성

ones( m, n ) 모든원소가 1인 m x n 행렬생성

eye( m ) 대각선원소가 1로구성된 m x m 정방행렬생성

rand( m, n ) 0~1 사이의 uniform 분포를가지는 m x n 행렬생성

randn( m, n ) 0~1 사이의 normal 분포를가지는 m x n 행렬생성

magic( m ) 가로의합과세로의합이모두동일한 m x m 정방행렬

51

Page 52: Lec 01. Introduction to MATLAB

MATLAB Programming

특수 목적의 행렬 생성 함수

[실습 7] 아래 행렬 생성 함수들을 직접 입력해보고, m과 n값을

바꿔가며 행렬을 다양하게 생성해봅시다.

>> zeros(4, 3)

>> ones(5, 3)

>> eye(6)

>> rand(3,5)

>> randn(5,7)

52

Page 53: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 원소에 접근하기

행렬 원소는 변수명(열번호,행번호)로 접근 가능

• 𝑀𝑀 =1 2 3 45 6 7 89 10 11 12

의 경우,

– M(1, 1) = 1, M(2,3) = 7, M(3,2) = 10, …

– 각 인덱스는 1부터 시작

>> M = [1 2 3 4; 5 6 7 8; 9 10 11 12]M =

1 2 3 45 6 7 89 10 11 12

>> M(2,3)ans =

7

53

Page 54: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬의 여러 원소에 접근하기

Colon Operator를 이용하여 행렬의 일부 원소 그룹에 접근 가능

• 𝑀𝑀 =1 2 3 45 6 7 89 10 11 12

행렬이 주어져 있을 때,

M 또는 M( :, : ) 행렬 M 전체를가리킴 (콜론( : )은 “전체”를의미

M( :, k ) 행렬 M의 k번째열의모든원소를가져옴

M( k, : ) 행렬 M의 k번째행의모든원소를가져옴

M( m:n, : ) 행렬 M의 m~n번째행의모든원소를가져옴

M( :, m:n ) 행렬 M의 m~n번째열의모든원소를가져옴

M( m:n, p:q ) 행렬 M의 m~n번째행, p~q번째열에해당하는원소를가져옴

54

Page 55: Lec 01. Introduction to MATLAB

MATLAB Programming

“end” 인덱스 기호 사용한 행렬 원소 접근

“end”는 마지막 행 또는 마지막 열을 가리키는 인덱스

• 𝑀𝑀 =1 2 3 45 6 7 89 10 11 12

행렬이 주어져 있을 때,

M( :, end ) 행렬 M의마지막열의모든원소를가져옴

M( end, : ) 행렬 M의마지막행의모든원소를가져옴

M( k, end ) 행렬 M의 k번째행, 마지막열의원소를가져옴

M( end, k ) 행렬 M의마지막행, k번째열의원소를가져옴

M( :, m:end ) 행렬 M의 m번째~마지막 열의모든원소를가져옴

M( m:end, : ) 행렬 M의 m번째~마지막 행의모든원소를가져옴

55

Page 56: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬을 배열처럼 접근하기

n차원 행렬을 1개의 접근 인덱스로 접근 가능

• 𝑀𝑀 =1 2 3 45 6 7 89 10 11 12

• M(1) = 1, M(2) = 5, M(3) = 9, …, M(10) = 4, M(11) = 8, M(12) = 12• M(end) = 12

행렬의 벡터 변환• 콜론(:)을 사용하면 행렬의 전체 원소가 선택됨• 위와 동일한 방법으로 행렬의 개별 원소들이 순차적으로 접근되고, 이들원소들을 벡터로 나열

>> M( : )M =

159 2610...

56

Page 57: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 원소 가져오기

• 𝑀𝑀 =1 4 72 5 83 6 9

10 1311 1412 15

• 행렬 M에서 1번째, 3번째 열들만을 가져오기

• 동일 열들을 여러 번 가져오기

>> M = [1 4 7 10 13; 2 5 8 11 14; 3 6 9 12 15];

>> M(: , [1,3])ans =

1 72 83 9

>> M = [1 4 7 10 13; 2 5 8 11 14; 3 6 9 12 15];

>> M(: , [1,3, 1, 3])ans =

1 7 1 72 8 2 83 9 3 9

57

Page 58: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 원소 가져오기

• 𝑀𝑀 =1 4 72 5 83 6 9

10 1311 1412 15

• Bit Mask를 이용하여 선택된 열 가져오기

>> M = [1 4 7 10 13; 2 5 8 11 14; 3 6 9 12 15];>> B = logical([ 1 0 0 1 0 ]);>> M(: , B)ans =

1 102 113 12

𝑀𝑀 =1 4 72 5 83 6 9

10 1311 1412 15

𝐵𝐵 = 1 0 0 1 0

58

Page 59: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz

10 x 10 magic 행렬을 생성에서 짝수 행, 짝수 열인 원소들을 가져와서

5 x 5 행렬을 만들어 봅시다.

M =

92 99 1 8 15 67 74 51 58 4098 80 7 14 16 73 55 57 64 414 81 88 20 22 54 56 63 70 47

85 87 19 21 3 60 62 69 71 2886 93 25 2 9 61 68 75 52 3417 24 76 83 90 42 49 26 33 6523 5 82 89 91 48 30 32 39 6679 6 13 95 97 29 31 38 45 7210 12 94 96 78 35 37 44 46 5311 18 100 77 84 36 43 50 27 59

ans =

80 14 73 57 4187 21 60 69 2824 83 42 26 656 95 29 38 72

18 77 36 50 59

59

Page 60: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz Sol.

10 x 10 magic 행렬을 생성에서 짝수 행, 짝수 열인 원소들을 가져와서

5 x 5 행렬을 만들어 봅시다.

M =

92 99 1 8 15 67 74 51 58 4098 80 7 14 16 73 55 57 64 414 81 88 20 22 54 56 63 70 47

85 87 19 21 3 60 62 69 71 2886 93 25 2 9 61 68 75 52 3417 24 76 83 90 42 49 26 33 6523 5 82 89 91 48 30 32 39 6679 6 13 95 97 29 31 38 45 7210 12 94 96 78 35 37 44 46 5311 18 100 77 84 36 43 50 27 59

ans =

80 14 73 57 4187 21 60 69 2824 83 42 26 656 95 29 38 72

18 77 36 50 59

>> M = magic( 10 );

>> M(2:2:end, 2:2:end)

60

Page 61: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 원소 고치기

𝑀𝑀 =1 4 72 5 83 6 9

10 1311 1412 15

• 선택된 행과 열들을 우변의 스칼라 값으로 대체– M(행인덱스:열인덱스) = 스칼라

• 선택된 행과 열을 우변의 행렬 값으로 대체– M(행 인덱스:열 인덱스 = 행렬

>> M = [1 4 7 10 13; 2 5 8 11 14; 3 6 9 12 15];

>> M( [1,3], [2,4] ) = -1

M =1 -1 7 -1 132 5 8 11 143 -1 9 -1 15

>> M( [1,3], [2,4] ) = [-5, -6; -7, -8];

M =1 -5 7 -6 132 5 8 11 143 -7 9 -8 15

61

Page 62: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz

10 x 10 magic 행렬을 생성에서 짝수 행, 홀수 열인 원소들의 값을 5 x

5 magic 행렬 값으로 대체하시오.

M =

92 99 1 8 15 67 74 51 58 4098 80 7 14 16 73 55 57 64 41

4 81 88 20 22 54 56 63 70 4785 87 19 21 3 60 62 69 71 2886 93 25 2 9 61 68 75 52 3417 24 76 83 90 42 49 26 33 6523 5 82 89 91 48 30 32 39 6679 6 13 95 97 29 31 38 45 7210 12 94 96 78 35 37 44 46 5311 18 100 77 84 36 43 50 27 59

M =

92 99 1 8 15 67 74 51 58 4017 80 24 14 1 73 8 57 15 41

4 81 88 20 22 54 56 63 70 4723 87 5 21 7 60 14 69 16 2886 93 25 2 9 61 68 75 52 34

4 24 6 83 13 42 20 26 22 6523 5 82 89 91 48 30 32 39 6610 6 12 95 19 29 21 38 3 7210 12 94 96 78 35 37 44 46 5311 18 18 77 25 36 2 50 9 59

62

Page 63: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz Sol.

10 x 10 magic 행렬을 생성에서 짝수 행, 홀수 열인 원소들의 값을 5 x

5 magic 행렬 값으로 대체하시오.

M =

92 99 1 8 15 67 74 51 58 4098 80 7 14 16 73 55 57 64 41

4 81 88 20 22 54 56 63 70 4785 87 19 21 3 60 62 69 71 2886 93 25 2 9 61 68 75 52 3417 24 76 83 90 42 49 26 33 6523 5 82 89 91 48 30 32 39 6679 6 13 95 97 29 31 38 45 7210 12 94 96 78 35 37 44 46 5311 18 100 77 84 36 43 50 27 59

M =

92 99 1 8 15 67 74 51 58 4017 80 24 14 1 73 8 57 15 41

4 81 88 20 22 54 56 63 70 4723 87 5 21 7 60 14 69 16 2886 93 25 2 9 61 68 75 52 34

4 24 6 83 13 42 20 26 22 6523 5 82 89 91 48 30 32 39 6610 6 12 95 19 29 21 38 3 7210 12 94 96 78 35 37 44 46 5311 18 18 77 25 36 2 50 9 59

>> M = magic( 10 );

>> M(2:2:end, 1:2:end) = magic(5)

63

Page 64: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 연산하기

각종 수학 함수• 행렬의 각 원소에 대해 적용

>> M = magic( 3 );>> exp(M)ans =

1.0e+03 *

2.9810 0.0027 0.40340.0201 0.1484 1.09660.0546 8.1031 0.0074

>> log(M)ans =

2.0794 0 1.79181.0986 1.6094 1.94591.3863 2.1972 0.6931

>> sqrt(M)ans =

2.8284 1.0000 2.44951.7321 2.2361 2.64582.0000 3.0000 1.4142

>> M = [-1.3 2.4; 4.3 -2.9]M =

-1.3000 2.40004.3000 -2.9000

>> abs(M)ans =

1.3000 2.40004.3000 2.9000

>> floor(M)ans =

-2 24 -3

>> ceil(M)ans =

-1 35 -2

절대값

올림

내림

64

Page 65: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬과 스칼라 연산

• m x n 행렬 𝑀𝑀, 스칼라 변수 c가 있을 때,– 𝑀𝑀 + 𝑐𝑐 = 𝑐𝑐 + 𝑀𝑀– 𝑀𝑀 − 𝑐𝑐– 𝑐𝑐 − 𝑀𝑀– 𝑀𝑀 ∗ 𝑐𝑐 = 𝑐𝑐 ∗ 𝑀𝑀– 𝑀𝑀/𝑐𝑐– 𝑀𝑀 ./𝑐𝑐

>> M = magic(2);>> c = 5;

>> M + cans =

6 89 7

>> M – cans =

-4 -2-1 -3

>> c – aans =

4 21 3

>> a*cans =

5 1520 10

>> c*aans =

5 1520 10

>> a/cans =

0.2000 0.60000.8000 0.4000

>> c./aans =

5.0000 1.66671.2500 2.5000

65

Page 66: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 간 연산

차원이 동일한 두 벡터가 있을 때,

두 행렬의 합과 차

>> x = [1 2 3; 4 5 6]>> y = [0 1 -1; 3 2 4]

두 행렬의 각 원소간 곱셈

두 행렬의 각 원소간 나눗셈

행렬의 n-제곱근

>> x+yans =

1 3 27 7 10

>> x-yans =

1 1 41 3 2

>> x .* yans =

0 2 -312 10 24

>> x ./ yans =

Inf 2.0000 -3.00001.3333 2.5000 1.5000

>> x .^ 3ans =

1 8 2764 125 216

66

Page 67: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 연산하기

n x d 행렬과, d x m 행렬의 곱

• 𝐴𝐴 = 1 2 34 5 6 , 𝐵𝐵 =

3 25 61 3

>> A = [1 2 3; 4 5 6];>> B = [3 2; 5 6; 1 3];>> A * B

ans =

16 2343 56

67

Page 68: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz

Cayley-Hamilton 정리는 아래와 같다. (I는 항등행렬)

• 𝐴𝐴 = 𝑎𝑎 𝑏𝑏𝑐𝑐 𝑑𝑑 일 때, 𝐴𝐴2 − 𝑎𝑎 + 𝑑𝑑 𝐴𝐴 + 𝑎𝑎𝑑𝑑 − 𝑏𝑏𝑐𝑐 𝐼𝐼 = 0

행렬 𝐴𝐴 = 2 1−1 4 일 때, 𝐴𝐴2 − 6𝐴𝐴 + 9𝐼𝐼 = 0 임을 보여라.

68

Page 69: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz Sol.

Cayley-Hamilton 정리는 아래와 같다. (I는 항등행렬)

• 𝐴𝐴 = 𝑎𝑎 𝑏𝑏𝑐𝑐 𝑑𝑑 일 때, 𝐴𝐴2 − 𝑎𝑎 + 𝑑𝑑 𝐴𝐴 + 𝑎𝑎𝑑𝑑 − 𝑏𝑏𝑐𝑐 𝐼𝐼 = 0

행렬 𝐴𝐴 = 2 1−1 4 일 때, 𝐴𝐴2 − 6𝐴𝐴 + 9𝐼𝐼 = 0 임을 보여라.

>> A = [2 1; -1 4]

A =

2 1-1 4

>> A^2-6*A+9*eye(2)

ans =

0 00 0

69

Page 70: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz

다음 방정식을 행렬로 표현하고, 방정식의 근을 행렬 연산을 통해

계산해봅시다.

• -3x1 – x3 = -3

• 2x1 + 5x2 – 7x3 = 1

• -x1 + 4x2 + 8x3 = 2

• 힌트

– 방정식의 근 구하는 방법

• Ax = b A-1Ax = x = A-1b

– m x m 정방 행렬이 M일 때, M의 역행렬을 구하는 함수: inv(M)

70

Page 71: Lec 01. Introduction to MATLAB

MATLAB Programming

Quiz Sol.

다음 방정식을 행렬로 표현하고, 방정식의 근을 행렬 연산을 통해

계산해봅시다.

• -3x1 – x3 = -3

• 2x1 + 5x2 – 7x3 = 1

• -x1 + 4x2 + 8x3 = 2

>> A = [-3 0 -1; 2 5 -7; -1 4 8]A =

-3 0 -12 5 -7-1 4 8

>> b = [-3 1 2]‘b =

-312

>> x = inv(A) * bx =

0.91240.20280.2627

71

Page 72: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬과 통계량

행렬이 주어졌을 때, 행렬의 통계량을 계산

• 행렬의 열 단위로 계산

>> M = [5 3 8; 2 4 3];>> min(M)ans =

2 3 3

>> max(M)ans =

5 4 8

>> sum(M)ans =

7 7 11

>> mean(M)ans =

3.5000 3.5000 5.5000

>> var(M)ans =

4.5000 0.5000 12.5000

>> std(M)ans =

2.1213 0.7071 3.5355

최소값

최대값

전체 합

평균

분산

표준편차

72

Page 73: Lec 01. Introduction to MATLAB

MATLAB Programming

행렬 사용에 익숙해지기

[실습 11] 대전 초등학교 6학년 1반의 성적이 다음과 같다고 할 때, 여러 가지값들을 구해봅시다.

• 6학년 1반의 성적

• 1) 각 과목 별 평균, 분산, 최고점 및 최저점• 2) 각 학생 별 총점 및 평균• 3) 각 학생 별 최고점을 받은 과목의 점수• 4) 반 전체 점수 합계 및 평균

[실습 12] 6학년 1반의 성적이 행렬로 주어져 있을 때, 채점 오류로 모든 학생의체육 점수를 3점 올리고, 과학 점수를 2점씩 내리는 작업을 행렬 연산을 통해수행해봅시다.

국어 수학 과학 체육

영희 98 83 89 89

철수 89 92 97 87

민수 78 86 91 96

73