matlab for c/c++ programmers - ita.kaist.ac.kr · pdf file• 강사 김탁은 (...

73
MATLAB 시작하기 [email protected] 1

Upload: vanhanh

Post on 21-Feb-2018

350 views

Category:

Documents


14 download

TRANSCRIPT

Page 1: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 시작하기

김 탁 은

[email protected]

1

Page 2: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

시작하기에 앞서

강의 시간

• 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: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 강좌에서 다루는 내용들

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

프로그래밍 작성 기법

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

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

각종 수학 문제 해결 기법

• 심볼릭 툴박스, 선형 대수, 방정식, 미분과 적분

데이터 분석

• 회귀 분석

파일 입출력

• 데이터 파일 읽기 및 저장

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

3

Page 4: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

오늘 강의 내용

MATLAB 소개 및 역사

MATLAB 인터페이스 둘러보기

MATLAB 기본 명령어

벡터/행렬 기본 연산

기본적인 수학 함수 사용법

4

Page 5: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB?

MATrix LABoratory

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

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

강력한 시각화 도구 제공

다양한 툴박스 지원

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

5

Page 6: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB?

GUI Interface

Simulink • Model-based design tool

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

• VxWare 등

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

6

Page 7: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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 창업

7

Cleve Moler

Jack Little

Page 9: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

오늘날의 MATLAB

테크니컬 컴퓨팅

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

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

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

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

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

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

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

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

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

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

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

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

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

9

Page 10: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

오늘날의 MATLAB

다양한 프로그램

• 임베디드 시스템

• 제어 시스템

• 디지털 신호 처리

• 통신 시스템

• 이미지 및 비디오 처리

• FPGA 설계

• 메카트로닉스

• 테스트 및 측정

• 계산 생명공학

• 계산 금융

10

다양한 산업

• 항공 우주 및 국방

• 자동차

• 생명 과학 및 제약

• 통신

• 전자 및 반도체

• 에너지

• 금융 서비스

• 산업 자동화 및 기계

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

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

Page 11: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 시작하기!

11

Page 12: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 소프트웨어 구하기

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

13

Page 14: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 설치하기 및 인증하기

14

Page 15: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 인증하기

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

15

Page 16: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 인증하기

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

16

Page 17: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 첫화면 (R2012b)

17

Page 18: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 인터페이스

18

Editor

Command Window

Current

Folder

Workspace

Command

History

Page 19: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 인터페이스

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

액션이 실행됨

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

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

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

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

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

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

명령어들의 목록을 보여줌

19

Editor

Command Window

Current

Folder

Workspace

Command

History

Page 20: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 인터페이스

본인의 MATLAB 인터페이스가 다르게 나타날 때 • Layout의 Default를 누름

• Editor 화면은 나타나지 않음

20

Page 21: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Command Window 폰트 설정

21

Page 22: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Keyboard Mapping 변경

22

Page 23: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 인터페이스 익숙해지기

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

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

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

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

23

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

>> A

Page 24: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 인터페이스 익숙해지기

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

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

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

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

24

Page 25: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

MATLAB 조작 기본 명령어

MATLAB 종료하기

Command Window 깨끗하게 만들기

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

MATLAB 도움말 이용하기

25

>> clc

>> clear

또는

>> clear all

>> quit

>> help cos

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

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

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

Page 26: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

변수 할당 및 수식 연산

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

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

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

변수 할당 예제

26

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

>> A = 5 * 3

A =

15

>> a = A * 10

a =

150

주의할 점!

• 변수명은 무조건 영문자로 시작해야 한다.

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

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

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

변수이다.

Page 27: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

변수 할당 및 수식 연산

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

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

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

27

>> 5 * 3 + 6

>> 5 * 3 + 6

ans =

26

>> ans * 3

ans =

63

Page 28: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

수식 표현에 익숙해지기

28

>> 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

Page 29: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz

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

29

Page 30: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz Sol.

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

30

>> x = 5;

>> - (3*sin(x)*cos(x)^2-sin(x)^3)/(x^2-2)

ans =

-0.0283

>> x = 5;

>> (exp(i*x)+exp(-i*x))/2 * (exp(i*x)-exp(-i*x))/(2*i)

ans =

-0.2720

Page 31: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터 (vector)

벡터란? • 정의: 크기와 방향을 갖는 물리적인 양

• 표현: 순서를 가지는 어떠한 수들의 나열

MATLAB에서 벡터 기술하기 • 괄호[ ] 사이에 숫자를 나열

• 숫자 간 구분은 공백(space) 또는 컴마(,)

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

31

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

u =

-3 2 4 8 11

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

u =

-3 2 4 8 11

or

>> u = [1; 2; 3]

u =

1

2

3

Page 32: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터 (vector)

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

벡터 원소 참조하기

32

>> u = [-3 2 4]

u =

-3 2 4

>> u’

u =

-3

2

4

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

u =

-3

2

4

>> u’

u =

-3 2 4

>> u(1)

ans =

-3

>> u(2)

ans =

2

>> u(3)

ans =

4

>> u(4)

Index exceeds matrix dimensions.

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

Page 33: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

순차적인 행벡터 생성

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

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

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

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

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

• 방법 III. linspace 함수 사용

33

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

>> u = 1:100

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

Page 34: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

순차적인 행벡터 생성

콜론 연산자 사용법

• 의미: “시작값” 부터 “종료값” 까지 “증가/감소분”씩 증가/감소하는 수들의 벡터

• 증가값 생략시 증가값은 1로 설정

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

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

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

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

34

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

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

>> u = 2:-1:-5

>> u = 0:0.01:1

Page 35: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

순차적인 행벡터 생성

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

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

순차적 행벡터 생성 예

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

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

35

>> 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

Page 36: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

단일 벡터 연산

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

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

36

>> 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 .^ 2

ans =

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

절대값

올림

내림

Page 37: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터와 스칼라 연산

37

>> a = [1 2 3 4];

>> c = 5;

>> a + c

ans =

6 7 8 9

>> a – c

ans =

-4 -3 -2 -1

>> c – a

ans =

4 3 2 1

>> a*c

ans =

5 10 15 20

>> c*a

ans =

5 10 15 20

>> a/c

ans =

0.2000 0.4000 0.6000 0.8000

>> c./a

ans =

5.0000 2.5000 1.6667 1.2500

Page 38: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터 간 연산

다음 두 벡터가 있을 때,

두 벡터의 합과 차

두 벡터의 내적

두 벡터의 외적

38

>> x = [-1 0 1]

>> y = [3 4 5]

>> dot(x, y)

ans =

2

>> cross(x, y)

ans =

-4 8 4

>> x’ * y

ans =

-3 4 -5

0 0 0

3 4 5

>> x + y

ans =

2 4 6

>> x-y

ans =

-4 -4 -4

>> x .* y

ans =

-3 0 5

>> x ./ y

ans =

-0.3333 0 0.2000

Page 39: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터와 통계량

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

39

>> 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

최소값

최대값

전체 합

평균

분산

표준편차

Page 40: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz

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

• 1) 각 과목 별 평균

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

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

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

40

국어 수학 과학 체육

영희 98 83 89 89

철수 89 92 97 87

민수 78 86 91 96

Page 41: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz Sol.

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

• 1) 각 과목 별 평균

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

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

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

41

국어 수학 과학 체육

영희 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)

Page 42: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터 일부 원소 가져오기

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

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

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

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

42

>> 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

Page 43: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터 일부 원소 가져오기

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

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

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

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

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

43

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

x =

1 12 23 34 45 56 67 78 89 100

>> x(3) = 10

x =

1 12 10 34 45 56 67 78 89 100

>> x(5:7) = -5

x =

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

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

x =

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

주의할 점! • 들어갈 자리의 개수와, 바꿀 값의

개수가 동일해야 함

Page 44: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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 함수, 스칼라와 벡터의 차, 벡터의 일부 원소 변경

45

>> x = 1:10

x =

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

Page 46: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

벡터 합치기

여러 행벡터 합치기 • 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) 방향으로 병합한다.

46

>> 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 =

1

2

3

4

5

Page 47: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 (Matrix)

47

Page 48: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 (Matrix)

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

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

– 열벡터: n x 1 행렬

48

• 지금까지 배운 벡터의 연산에 관한 내용들이

사실은 모두 행렬 연산

Page 49: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

2차원 행렬 만들기

49

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

M =

2 1 4

6 3 5

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

M =

2 3

4 6

5 1

Page 50: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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

50

<방법 1>

>> M = [2 1 4]

M =

2 1 4

>> M = [M; 6 3 5]

M =

2 1 4

6 3 5

>> M = [A; 7 3 9]

M =

2 1 4

6 3 5

7 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 ]

Page 51: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

특수 목적의 행렬 생성 함수

zeros, ones, eye, rand, randn

51

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 정방 행렬

Page 52: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

특수 목적의 행렬 생성 함수

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

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

52

>> zeros(4, 3)

>> ones(5, 3)

>> eye(6)

>> rand(3,5)

>> randn(5,7)

Page 53: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 원소에 접근하기

53

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

M =

1 2 3 4

5 6 7 8

9 10 11 12

>> M(2,3)

ans =

7

Page 54: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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

54

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번째 열에 해당하는 원소를 가져옴

Page 55: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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

55

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번째~마지막 행의 모든 원소를 가져옴

Page 56: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬을 배열처럼 접근하기

56

>> M( : )

M =

1

5

9

2

6

10

...

Page 57: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 원소 가져오기

57

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

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

ans =

1 7

2 8

3 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 7

2 8 2 8

3 9 3 9

Page 58: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 원소 가져오기

58

>> 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 10

2 11

3 12

Page 59: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz

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

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

59

M =

92 99 1 8 15 67 74 51 58 40

98 80 7 14 16 73 55 57 64 41

4 81 88 20 22 54 56 63 70 47

85 87 19 21 3 60 62 69 71 28

86 93 25 2 9 61 68 75 52 34

17 24 76 83 90 42 49 26 33 65

23 5 82 89 91 48 30 32 39 66

79 6 13 95 97 29 31 38 45 72

10 12 94 96 78 35 37 44 46 53

11 18 100 77 84 36 43 50 27 59

ans =

80 14 73 57 41

87 21 60 69 28

24 83 42 26 65

6 95 29 38 72

18 77 36 50 59

Page 60: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz Sol.

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

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

60

M =

92 99 1 8 15 67 74 51 58 40

98 80 7 14 16 73 55 57 64 41

4 81 88 20 22 54 56 63 70 47

85 87 19 21 3 60 62 69 71 28

86 93 25 2 9 61 68 75 52 34

17 24 76 83 90 42 49 26 33 65

23 5 82 89 91 48 30 32 39 66

79 6 13 95 97 29 31 38 45 72

10 12 94 96 78 35 37 44 46 53

11 18 100 77 84 36 43 50 27 59

ans =

80 14 73 57 41

87 21 60 69 28

24 83 42 26 65

6 95 29 38 72

18 77 36 50 59

>> M = magic( 10 );

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

Page 61: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 원소 고치기

61

>> 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 13

2 5 8 11 14

3 -1 9 -1 15

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

M =

1 -5 7 -6 13

2 5 8 11 14

3 -7 9 -8 15

Page 62: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz

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

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

62

M =

92 99 1 8 15 67 74 51 58 40

98 80 7 14 16 73 55 57 64 41

4 81 88 20 22 54 56 63 70 47

85 87 19 21 3 60 62 69 71 28

86 93 25 2 9 61 68 75 52 34

17 24 76 83 90 42 49 26 33 65

23 5 82 89 91 48 30 32 39 66

79 6 13 95 97 29 31 38 45 72

10 12 94 96 78 35 37 44 46 53

11 18 100 77 84 36 43 50 27 59

M =

92 99 1 8 15 67 74 51 58 40

17 80 24 14 1 73 8 57 15 41

4 81 88 20 22 54 56 63 70 47

23 87 5 21 7 60 14 69 16 28

86 93 25 2 9 61 68 75 52 34

4 24 6 83 13 42 20 26 22 65

23 5 82 89 91 48 30 32 39 66

10 6 12 95 19 29 21 38 3 72

10 12 94 96 78 35 37 44 46 53

11 18 18 77 25 36 2 50 9 59

Page 63: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz Sol.

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

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

63

M =

92 99 1 8 15 67 74 51 58 40

98 80 7 14 16 73 55 57 64 41

4 81 88 20 22 54 56 63 70 47

85 87 19 21 3 60 62 69 71 28

86 93 25 2 9 61 68 75 52 34

17 24 76 83 90 42 49 26 33 65

23 5 82 89 91 48 30 32 39 66

79 6 13 95 97 29 31 38 45 72

10 12 94 96 78 35 37 44 46 53

11 18 100 77 84 36 43 50 27 59

M =

92 99 1 8 15 67 74 51 58 40

17 80 24 14 1 73 8 57 15 41

4 81 88 20 22 54 56 63 70 47

23 87 5 21 7 60 14 69 16 28

86 93 25 2 9 61 68 75 52 34

4 24 6 83 13 42 20 26 22 65

23 5 82 89 91 48 30 32 39 66

10 6 12 95 19 29 21 38 3 72

10 12 94 96 78 35 37 44 46 53

11 18 18 77 25 36 2 50 9 59

>> M = magic( 10 );

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

Page 64: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 연산하기

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

64

>> M = magic( 3 );

>> exp(M)

ans =

1.0e+03 *

2.9810 0.0027 0.4034

0.0201 0.1484 1.0966

0.0546 8.1031 0.0074

>> log(M)

ans =

2.0794 0 1.7918

1.0986 1.6094 1.9459

1.3863 2.1972 0.6931

>> sqrt(M)

ans =

2.8284 1.0000 2.4495

1.7321 2.2361 2.6458

2.0000 3.0000 1.4142

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

M =

-1.3000 2.4000

4.3000 -2.9000

>> abs(M)

ans =

1.3000 2.4000

4.3000 2.9000

>> floor(M)

ans =

-2 2

4 -3

>> ceil(M)

ans =

-1 3

5 -2

절대값

올림

내림

Page 65: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬과 스칼라 연산

65

>> M = magic(2);

>> c = 5;

>> M + c

ans =

6 8

9 7

>> M – c

ans =

-4 -2

-1 -3

>> c – a

ans =

4 2

1 3

>> a*c

ans =

5 15

20 10

>> c*a

ans =

5 15

20 10

>> a/c

ans =

0.2000 0.6000

0.8000 0.4000

>> c./a

ans =

5.0000 1.6667

1.2500 2.5000

Page 66: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 간 연산

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

두 행렬의 합과 차

66

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

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

두 행렬의 각 원소간 곱셈

두 행렬의 각 원소간 나눗셈

행렬의 n-제곱근

>> x+y

ans =

1 3 2

7 7 10

>> x-y

ans =

1 1 4

1 3 2

>> x .* y

ans =

0 2 -3

12 10 24

>> x ./ y

ans =

Inf 2.0000 -3.0000

1.3333 2.5000 1.5000

>> x .^ 3

ans =

1 8 27

64 125 216

Page 67: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 연산하기

67

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

>> B = [3 2; 5 6; 1 3];

>> A * B

ans =

16 23

43 56

Page 68: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz

68

Page 69: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz Sol.

69

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

A =

2 1

-1 4

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

ans =

0 0

0 0

Page 70: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

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: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

Quiz Sol.

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

계산해봅시다.

• -3x1 – x3 = -3

• 2x1 + 5x2 – 7x3 = 1

• -x1 + 4x2 + 8x3 = 2

71

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

A =

-3 0 -1

2 5 -7

-1 4 8

>> b = [-3 1 2]‘

b =

-3

1

2

>> x = inv(A) * b

x =

0.9124

0.2028

0.2627

Page 72: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬과 통계량

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

• 행렬의 열 단위로 계산

72

>> 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

최소값

최대값

전체 합

평균

분산

표준편차

Page 73: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF file• 강사 김탁은 ( kmste2@kaist.ac.kr ) ... (*@*.kaist.ac.kr로 끝나는 메일)만 있으면 Mathworks 홈페이지에

행렬 사용에 익숙해지기

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

• 1) 각 과목 별 평균, 분산, 최고점 및 최저점

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

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

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

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

73

국어 수학 과학 체육

영희 98 83 89 89

철수 89 92 97 87

민수 78 86 91 96