MATLAB 시작하기 김탁은 kmste2@kaist.ac.kr 1
시작하기에앞서 강의시간 1월 20일 ~ 1월 29 ( 월 ~ 금 ) 14:00 ~ 18:00 ( 총 30시간 ) 50분강의, 10분휴식 강의교재 쉽게배우는 MATLAB 입문과활용 (2 판 ) 임종수의 MATLAB 7 연락처 강사김탁은 ( kmste2@kaist.ac.kr ) 조교김도형 ( ehgud5@kaist.ac.kr ) IT 아카데미사무국 ( ita@kaist.ac.kr, 042-350-8941~3) 2
MATLAB 강좌에서다루는내용들 MATLAB 기본연산 벡터, 행렬연산 ( 덧셈, 뺄셈, 곱셈 ), 각종수학함수 프로그래밍작성기법 연산자, 데이터타입, 프로그램흐름제어, M- 파일스크립트및 M- 파일함수작성 그래프드로잉 각종 2D, 3D 그래프 ( 막대그래프, 로그그래프, 3 차원그래프, ) 각종수학문제해결기법 심볼릭툴박스, 선형대수, 방정식, 미분과적분 데이터분석 회귀분석 파일입출력 데이터파일읽기및저장 GUI Interface 간단한 GUI Application 만들어보기 3
오늘강의내용 MATLAB 소개및역사 MATLAB 인터페이스둘러보기 MATLAB 기본명령어 벡터 / 행렬기본연산 기본적인수학함수사용법 4
MATLAB? MATrix LABoratory 다양한수치해석문제에대한 total solution 제공 Script 언어로, 사용자의입력에대한결과즉시확인가능 강력한시각화도구제공 다양한툴박스지원 Control System Toolbox Signal Processing Toolbox Image Processing Toolbox Wavelet Toolbox 5
MATLAB? GUI Interface Simulink Model-based design tool 개발용및상용보드지원 각종 device driver VxWare 등 Embedded Solution 제공 MATLAB Code C, VHDL, 6
MATLAB 역사 Early 1970s Linear algebra 문제해결을위한 LINPACK 라이브러리, eigenvalue/eigenvector 를계산하기위한 EISPACK 라이브러리개발 Late 1970s Cleve Moler 교수가 New Mexico 대학재직시학생들이 LINPACK, EISPACK 라이브러리를 Fortran 을배우지않고사용할수있도록 소프트웨어개발 Cleve Moler 1984 Cleve Moler가 Stanford 대학에서강의. 학생이었던 Jack Little가강의에감명받음. 상업적성공예감. MATLAB을 C로포팅. 라이브러리작성. Mathworks 창업 Jack Little 7
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
오늘날의 MATLAB 테크니컬컴퓨팅 데이터수집 수집보드, 계측장비등하드웨어와통신하여데이터수집 데이터분석 강력한수리엔진으로통계적분석, 이미지분석, 신호분석등을쉽고빠르게처리 수학적모델링 curve fitting, 통계학, 최적화등수학적도구제공 알고리즘개발 C++/Fortran 대비빠른설계, 다양한알고리즘및과학 / 수학함수제공 병렬컴퓨팅 대규모데이터를멀티코어, 클러스터, 그리드및클라우드등을통해처리 데스크탑및웹배포 개발한알고리즘또는프로그램을데스트탑또는웹으로배포기능 시뮬레이션및모델기반설계 시스템설계와시뮬레이션 사전정의된라이브러리블록으로시스템모델링 이산이벤트시뮬레이션 큐잉시스템이나에이전트기반시스템시뮬레이션 임베디드코드생성 MATLAB 코드로부터 C/C++ 코드생성, 특정프로세서아키텍처를위한코드최적화 HDL 코드생성및검증 VHDL, Verilog 코드생성, 소프트웨어와하드웨어 Cosimulation 확인, 검증및테스트 임베디드소프트웨어, 디지털 / 아날로그하드웨어의가상테스트를통한프로젝트문제제거및개발시간단축 9
오늘날의 MATLAB 다양한프로그램 임베디드시스템 제어시스템 디지털신호처리 통신시스템 이미지및비디오처리 FPGA 설계 메카트로닉스 테스트및측정 계산생명공학 계산금융 다양한산업 항공우주및국방 자동차 생명과학및제약 통신 전자및반도체 에너지 금융서비스 산업자동화및기계 단순히수학계산을위한프로그램이아니라, 산업전반에서활용되는강력한도구!! 10
MATLAB 시작하기! 11
MATLAB 소프트웨어구하기 KAIST 학생 / 직원 학교에서 MATLAB License 를구매하였음 학교이메일주소 (*@kaist.ac.kr) 이나연구실메일주소 (*@*.kaist.ac.kr 로끝나는 메일 ) 만있으면 Mathworks 홈페이지에등록후설치가능 http://circnts.kaist.ac.kr/ 에서다운로드후설치 License 가없는분 아진출판사 (http://ajin.to) 에서 학생용 MATLAB 구매후사용 학생임을증명하기위한학생증 사본등이필요 MATLAB 은불법복제단속이 심하므로정식으로구매하여 사용하시길바랍니다 12
MATLAB 소프트웨어구하기 circnts.kaist.ac.kr 로그인 Etc Products MATLAB 13
MATLAB 설치하기및인증하기 14
MATLAB 인증하기 KAIST 재학생인경우 두번째 I need to create an Account 선택 15
MATLAB 인증하기 빈칸입력후이메일인증 Activation Key: 16382-21637-19669-05795-17079 16
MATLAB 첫화면 (R2012b) 17
MATLAB 인터페이스 Editor Workspace Current Folder Command Window Command History 18
MATLAB 인터페이스 Current Folder 현재작업디렉토리의파일리스트를보여줌 파일을더블클릭하면해당파일확장자에따른액션이실행됨 Editor Workspace Editor M- 파일스크립트파일을작성하기위한에디터 Current Folder Command Window Command History Command Window MATLAB 명령어를직접입력하여실행 Workspace 현재 MATLAB 에서사용되고있는데이터에대한정보를기록 더블클릭하여해당데이터를 Excel 과같은 spread sheet 구조로볼수있으며, 수정도가능 Command History MATLAB 을사용하는동안실행한모든명령어들의목록을보여줌 19
MATLAB 인터페이스 본인의 MATLAB 인터페이스가다르게나타날때 Layout 의 Default 를누름 Editor 화면은나타나지않음 20
Command Window 폰트설정 21
Keyboard Mapping 변경 22
MATLAB 인터페이스익숙해지기 [ 실습 ] 2 x 3 행렬을만들고, Workspace 에서값을바꿔봅시다. 1. Command Window 에서아래명령어를입력합니다. >> A = [1 2 3; 4 5 6] 2. Workspace 에 A 를더블클릭하여아래와같은 spread sheet 가나타나는지확인합니다. 3. 값을변경한다음, 우측상단의 X 표시를눌러 spread sheet 를끕니다. 그리고아래명령어를입력하여값이변경되었는지확인합니다. >> A 23
MATLAB 인터페이스익숙해지기 [ 실습 ] 방금전에입력한명령어를화살표키를이용하여불러봅시다. 1. 마우스로 Command Window 를선택하면창이활성화되어타이틀바의색이진하게되고, 프롬프트 (>>) 에커서가깜박거립니다. 2. 키보드의위 / 아래화살표키를눌러보세요. 이전에입력했던명령어가프롬프트에나타나는지확인합니다. 3. 화살표키를조작하는대신 Command History 창에나타난명령어를더블클릭하여실행해봅시다. 24
MATLAB 조작기본명령어 MATLAB 종료하기 >> quit Command Window 깨끗하게만들기 >> clc MATLAB 에서사용하는모든변수와함수지우기 >> clear 또는 >> clear all MATLAB 도움말이용하기 또는, workspace 에서변수를선택한다음마우스 오른쪽버튼클릭하여 delete 를선택하거나, 키보드의 delete 키를누르면해당변수삭제 >> help cos 25
변수할당및수식연산 변수할당 다른프로그래밍언어 (C/JAVA 등 ) 에서변수할당방법과동일하게 = 연산자사용하여변수할당 = 는 동치 가아니라, 오른쪽의값을왼쪽의변수에 할당 하라는뜻! >> 변수명 (variable) = 수식 (expression) 변수할당예제 >> A = 5 * 3 A = 15 >> a = A * 10 a = 150 주의할점! 변수명은무조건영문자로시작해야한다. 숫자, 특수문자, 언더바등으로시작할수없다. MATLAB에서는대소문자를다르게처리한다. 따라서변수명 a와변수명 A는서로다른변수이다. 26
변수할당및수식연산 변수명없이수식만쓰는경우는? >> 5 * 3 + 6 MATLAB 이자동으로계산결과를 ans 변수에할당함 >> 5 * 3 + 6 26 ans 변수는일반변수처럼사용가능 >> ans * 3 63 27
수식표현에익숙해지기 다음수식을 MATLAB 수식표현으로기술하기 8 + 6 1 + 5 2 4 3 ππ 103 ee 3 + ππ 10 3 >> 8 + (6 * (1 + sqrt(5))) / 2 >> 4 / 3 * pi * 10^3 >> exp(sqrt(3)) + pi * 10^3 ee ππ 1 >> exp(pi * sqrt(-1)) or >> exp(pi * i) ππ = 3.141592 는 pi 로기술 자연상수 e 는 exp(1) 로기술. ee xx 는 exp(x) 로기술 i 와 j 는복소수 (complex number) 의허수를의미 28
Quiz x = 5 일때, 다음수식들을계산해봅시다. 3 sin xx cccccc2 xx ssssss 3 (xx) xx 2 2 ee iiii + ee iiii ee iiii ee iiii 2 2ii 29
Quiz Sol. x = 5 일때, 다음수식들을계산해봅시다. 3 sin xx cccccc2 xx ssssss 3 (xx) xx 2 2 >> x = 5; >> - (3*sin(x)*cos(x)^2-sin(x)^3)/(x^2-2) -0.0283 ee iiii + ee iiii ee iiii ee iiii 2 2ii >> x = 5; >> (exp(i*x)+exp(-i*x))/2 * (exp(i*x)-exp(-i*x))/(2*i) -0.2720 30
벡터 (vector) 벡터란? 정의 : 크기와방향을갖는물리적인양 표현 : 순서를가지는어떠한수들의나열 MATLAB 에서벡터기술하기 괄호 [ ] 사이에숫자를나열 숫자간구분은공백 (space) 또는컴마 (,) >> u = [-3 2 4 8 11] u = -3 2 4 8 11 or >> u = [-3, 2, 4, 8, 11] u = -3 2 4 8 11 행 (row) 벡터 & 열 (column) 벡터 열벡터는숫자사이에세미콜론 (;) 을사용하여생성 >> u = [1; 2; 3] u = 1 2 3 31
벡터 (vector) 행벡터 열벡터변환하기 괄호끝에프라임기호 ( ) 붙이기 >> 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) -3 >> u(2) 2 >> u(3) 4 벡터의시작인덱스는 1 벡터범위를벗어난원소접근시 >> u(4) Index exceeds matrix dimensions. 32
순차적인행벡터생성 [1, 2, 3,, 100] 인행벡터를생성하는방법 방법 I: 숫자들을일일이기술 >> u = [1 2 3 4 5 100] 손도아프고.. 시간도없고.. 만약중간에입력하다가틀리면?? 방법 II: 콜론연산자 (colon operator) 사용 >> u = 1:100 쉽고빠르게원하는행벡터생성!! 방법 III. linspace 함수사용 >> u = linspace(1,100,100) 33
순차적인행벡터생성 콜론연산자사용법 >> u = 시작값 : 증가 / 감소분 : 종료값 의미 : 시작값 부터 종료값 까지 증가 / 감소분 씩증가 / 감소하는수들의벡터 증가값생략시증가값은 1 로설정 다양한순차적행벡터생성예 예 1) -5 부터 2 까지정수로구성된순차적행벡터를생성하라 >> u = -5:2 or >> u = -5:1:2 예 2) 2 부터 -5 까지정수로구성된순차적행벡터를생성하라 >> u = 2:-1:-5 예 3) 0 부터 1 까지 0.01 씩증가하는순차적행벡터를생성하라 >> u = 0:0.01:1 34
순차적인행벡터생성 linspace (linearly spaced vector) 간격이일정한수들의벡터를생성 >> u = linspace( 시작값, 종료값, 생성할값개수 ) 생성할값개수생략시 100 으로설정 순차적행벡터생성예 예 1) -1 부터 1 까지간격이동일한 9 개의값을생성하라 >> u = linspace(-1, 1, 9) -1.0000-0.7500-0.5000-0.2500 0 0.2500 0.5000 0.7500 1.0000 예 2) 1 부터 -1 까지역순으로간격이동일한 5 개의값을생성하라 >> u = linspace(1, -1, 5) 1.0000 0.5000 0-0.5000-1.0000 35
단일벡터연산 각종수학함수 벡터의각원소에대해적용 >> a = [1 2 3]; >> exp(a) 2.7183 7.3891 20.0855 >> log(a) 0 0.6931 1.0986 >> sqrt(a) 1.0000 1.4142 1.7321 벡터의각원소의 n- 제곱근 >> a = [1 2 3] >> a.^ 2 1 4 9 >> a = [-0.4 1.2 0.6-1.3] a = -0.4000 1.2000 0.6000-1.3000 >> abs(a) 절대값 0.4000 1.2000 0.6000 1.3000 >> floor(a) -1 1 0-2 >> ceil(a) 0 2 1-1 주의할점! 내림 올림 n- 제곱근을의미하는 ^ 기호는스칼라에대해정의 따라서벡터에대해 a^3 와같이사용하면에러 36
벡터와스칼라연산 벡터 AA = (aa 1, aa 2, aa nn ) 와, 스칼라변수 c 가있을때, AA + cc = cc + AA = (cc + aa 1, cc + aa 2, cc + aa nn ) AA cc = (aa 1 cc, aa 2 cc, aa nn cc) cc AA = (cc aa 1, cc aa 2, cc aa nn ) AA cc = cc AA = (cc aa 1, cc aa 2, cc aa nn ) AA/cc = (aa 1 /cc, aa 2 /cc, aa nn /cc) cc./aa = (cc/aa 1, cc/aa 2, cc/aa nn ) >> a = [1 2 3 4]; >> c = 5; >> a + c 6 7 8 9 >> a c -4-3 -2-1 >> c a 4 3 2 1 >> a*c 5 10 15 20 >> c*a 5 10 15 20 >> a/c 0.2000 0.4000 0.6000 0.8000 >> c./a 5.0000 2.5000 1.6667 1.2500 37
벡터간연산 다음두벡터가있을때, >> x = [-1 0 1] >> y = [3 4 5] 두벡터의합과차 >> x + y 2 4 6 >> x-y -4-4 -4 두벡터의내적 >> dot(x, y) 2 두벡터의외적 >> cross(x, y) -4 8 4 xx yy = 11 00 11 >> x * y -3 4-5 0 0 0 3 4 5 33 44 55 두벡터의각원소간곱셈 >> x.* y -3 0 5 두벡터의각원소간나눗셈 >> x./ y -0.3333 0 0.2000 38
벡터와통계량 벡터가주어졌을때, 벡터의통계량을계산 통계량 : 최대값, 최소값, 전체합, 평균, 분산, 표준편차등 >> x = [5 3 8 4]; >> min(x) 3 최소값 >> mean(x) 5 평균 >> max(x) 8 >> sum(x) 20 최대값 전체합 >> var(x) 4.6667 >> std(x) 2.1602 분산 표준편차 39
Quiz 대전초등학교 6 학년 1 반의성적이다음과같다고할때, 여러가지값들을구해봅시다. 6 학년 1 반의성적 국어수학과학체육 영희 98 83 89 89 철수 89 92 97 87 민수 78 86 91 96 1) 각과목별평균 2) 각학생별총점및평균 3) 각학생별최고점을받은과목의점수 4) 반전체점수합계및평균 40
Quiz Sol. 대전초등학교 6 학년 1 반의성적이다음과같다고할때, 여러가지값들을구해봅시다. 국어 수학 과학 체육 영희 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]; 1) 각과목별평균 >> (s1+s2+s3)/3 2) 각학생별총점및평균 >> sum(s1) >> mean(s1) 3) 각학생별최고점을받은과목의점수 >> max(s1) 4) 반전체점수합계및평균 >> sum(s1+s2+s3) >> sum(s1+s2+s3) / 12 >> (mean(s1)+mean(s2)+mean(s3))/3 41
벡터일부원소가져오기 벡터 x 가아래와같이 10 개의원소를가진다고하자 >> x = linspace(1,100,10) x = 1 12 23 34 45 56 67 78 89 100 3~6 번째에위치한 ( 연속된 ) 원소들만을가져오고싶을때 >> x(3:6) x = 23 34 45 56 Colon Operator 1, 5, 7 번째에위치한 ( 떨어진 ) 원소들만을뽑아내고싶을때 >> x( [1 5 7] ) x = 1 45 67 3, 7~9 번째에위치한원소들을뽑아내고싶을때 >> x( [3 7:9] ) x = 23 67 78 89 42
벡터일부원소가져오기 벡터 x 가아래와같이 10 개의원소를가진다고하자 >> x = linspace(1,100,10) x = 1 12 23 34 45 56 67 78 89 100 3 번째에위치한원소의값을 10 으로바꾸고싶을때 >> x(3) = 10 x = 1 12 10 34 45 56 67 78 89 100 5:7 번째에위치한원소들의값을 -5 로바꾸고싶을때 >> x(5:7) = -5 x = 1 12 10 34-5 -5-5 78 89 100 3, 7~9 번째에위치한원소들의값을 105 로바꾸고싶을때 >> x([3 7:9]) = 105 x = 1 12 105 34-5 -5 105 105 105 100 6~8 번째위치한원소들의값을각각 100, 200, 300 으로바꾸고싶을때 >> x(6:8) = [100 200 300] x = 1 12 105 34-5 100 200 300 105 100 주의할점! 들어갈자리의개수와, 바꿀값의개수가동일해야함 43
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
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: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 45
벡터합치기 여러행벡터합치기 x = [1 2 3], y = [4 5], z = [6 7] 일때, 직접타이핑하지않고쉽고빠르게 [1 2 3 4 5 6 7] 벡터를생성하는방법은? >> x = [1 2 3]; >> y = [4 5]; >> z = [6 7]; >> [x y z] 1 2 3 4 5 6 7 주의할점! 벡터를합칠때, 둘다열벡터이거나행벡터이어야함 [ 실습 6] MATLAB 프롬프트에 [x y x] 를입력했을때어떠한결과가나오는지확인해봅시다. [x y ] 를입력했을때어떠한결과가나오는지확인해봅시다. 여러열벡터합치기 세미콜론을사용하면, 열벡터를열 (column) 방향으로병합한다. >> x = [1; 2; 3]; >> y = [4; 5]; >> [x; y] 1 2 3 4 5 46
행렬 (Matrix) 47
행렬 (Matrix) 행렬이란? 숫자를네모꼴로배열한것 벡터와행렬과의관계 행벡터 : 1 x n 행렬 열벡터 : n x 1 행렬 지금까지배운벡터의연산에관한내용들이사실은모두행렬연산 48
2 차원행렬만들기 행순으로원소를나열하고, 다음행의원소를나열하기전세미콜론 (;) 을적어줌 MM = 22 11 44 66 33 55 행렬생성하기 (2 x 3 행렬 ) >> M = [2 1 4; 6 3 5] M = 2 1 4 6 3 5 MM = 22 44 55 33 66 11 행렬생성하기 (3 x 2 행렬 ) >> M = [2 3; 4 6; 5 1] M = 2 3 4 6 5 1 49
다양한 2 차원행렬생성방법 행렬 MM = 22 11 44 66 33 55 77 33 99 를생성 < 방법 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 ] 50
특수목적의행렬생성함수 zeros, ones, eye, rand, randn zeros( m, n ) ones( m, n ) eye( m ) rand( m, n ) randn( m, n ) magic( m ) 모든원소가 0인 m x n 행렬생성모든원소가 1인 m x n 행렬생성대각선원소가 1로구성된 m x m 정방행렬생성 0~1 사이의 uniform 분포를가지는 m x n 행렬생성 0~1 사이의 normal 분포를가지는 m x n 행렬생성가로의합과세로의합이모두동일한 m x m 정방행렬 51
특수목적의행렬생성함수 [ 실습 7] 아래행렬생성함수들을직접입력해보고, m 과 n 값을 바꿔가며행렬을다양하게생성해봅시다. >> zeros(4, 3) >> ones(5, 3) >> eye(6) >> rand(3,5) >> randn(5,7) 52
행렬원소에접근하기 행렬원소는변수명 ( 열번호, 행번호 ) 로접근가능 MM = 1 2 3 4 5 6 7 8 9 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 4 5 6 7 8 9 10 11 12 >> M(2,3) 7 53
행렬의여러원소에접근하기 Colon Operator 를이용하여행렬의일부원소그룹에접근가능 MM = 1 2 3 4 5 6 7 8 9 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
end 인덱스기호사용한행렬원소접근 end 는마지막행또는마지막열을가리키는인덱스 MM = 1 2 3 4 5 6 7 8 9 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
행렬을배열처럼접근하기 n 차원행렬을 1 개의접근인덱스로접근가능 MM = 1 2 3 4 5 6 7 8 9 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 = 1 5 9 2 6 10... 56
행렬원소가져오기 MM = 1 4 7 2 5 8 3 6 9 10 13 11 14 12 15 행렬 M 에서 1 번째, 3 번째열들만을가져오기 >> M = [1 4 7 10 13; 2 5 8 11 14; 3 6 9 12 15]; >> M(:, [1,3]) 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]) 1 7 1 7 2 8 2 8 3 9 3 9 57
행렬원소가져오기 MM = 1 4 7 2 5 8 3 6 9 10 13 11 14 12 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) 1 10 2 11 3 12 MM = 1 4 7 2 5 8 3 6 9 10 13 11 14 12 15 BB = 1 0 0 1 0 58
Quiz 10 x 10 magic 행렬을생성에서짝수행, 짝수열인원소들을가져와서 5 x 5 행렬을만들어봅시다. 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 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 59
Quiz Sol. 10 x 10 magic 행렬을생성에서짝수행, 짝수열인원소들을가져와서 5 x 5 행렬을만들어봅시다. 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 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) 60
행렬원소고치기 MM = 1 4 7 2 5 8 3 6 9 10 13 11 14 12 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 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 61
Quiz 10 x 10 magic 행렬을생성에서짝수행, 홀수열인원소들의값을 5 x 5 magic 행렬값으로대체하시오. 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 62
Quiz Sol. 10 x 10 magic 행렬을생성에서짝수행, 홀수열인원소들의값을 5 x 5 magic 행렬값으로대체하시오. 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) 63
행렬연산하기 각종수학함수 행렬의각원소에대해적용 >> M = magic( 3 ); >> exp(m) 1.0e+03 * 2.9810 0.0027 0.4034 0.0201 0.1484 1.0966 0.0546 8.1031 0.0074 >> log(m) 2.0794 0 1.7918 1.0986 1.6094 1.9459 1.3863 2.1972 0.6931 >> sqrt(m) 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) 1.3000 2.4000 4.3000 2.9000 >> floor(m) -2 2 4-3 >> ceil(m) -1 3 5-2 절대값 내림 올림 64
행렬과스칼라연산 m x n 행렬 MM, 스칼라변수 c 가있을때, MM + cc = cc + MM MM cc cc MM MM cc = cc MM MM/cc MM./cc >> M = magic(2); >> c = 5; >> M + c 6 8 9 7 >> M c -4-2 -1-3 >> c a 4 2 1 3 >> a*c 5 15 20 10 >> c*a 5 15 20 10 >> a/c 0.2000 0.6000 0.8000 0.4000 >> c./a 5.0000 1.6667 1.2500 2.5000 65
행렬간연산 차원이동일한두벡터가있을때, >> x = [1 2 3; 4 5 6] >> y = [0 1-1; 3 2 4] 두행렬의합과차 >> x+y 1 3 2 7 7 10 >> x-y 1 1 4 1 3 2 두행렬의각원소간곱셈 >> x.* y 0 2-3 12 10 24 두행렬의각원소간나눗셈 >> x./ y Inf 2.0000-3.0000 1.3333 2.5000 1.5000 행렬의 n- 제곱근 >> x.^ 3 1 8 27 64 125 216 66
행렬연산하기 n x d 행렬과, d x m 행렬의곱 AA = 1 2 3 3 2 4 5 6, BB = 5 6 1 3 >> A = [1 2 3; 4 5 6]; >> B = [3 2; 5 6; 1 3]; >> A * B 16 23 43 56 67
Quiz Cayley-Hamilton 정리는아래와같다. (I 는항등행렬 ) AA = aa bb cc dd 일때, AA2 aa + dd AA + aaaa bbbb II = 0 행렬 AA = 2 1 1 4 일때, AA2 6AA + 9II = 0 임을보여라. 68
Quiz Sol. Cayley-Hamilton 정리는아래와같다. (I 는항등행렬 ) AA = aa bb cc dd 일때, AA2 aa + dd AA + aaaa bbbb II = 0 행렬 AA = 2 1 1 4 일때, AA2 6AA + 9II = 0 임을보여라. >> A = [2 1; -1 4] A = 2 1-1 4 >> A^2-6*A+9*eye(2) 0 0 0 0 69
Quiz 다음방정식을행렬로표현하고, 방정식의근을행렬연산을통해계산해봅시다. -3x 1 x 3 = -3 2x 1 + 5x 2 7x 3 = 1 -x 1 + 4x 2 + 8x 3 = 2 힌트 방정식의근구하는방법 Ax = b A -1 Ax = x = A -1 b m x m 정방행렬이 M 일때, M 의역행렬을구하는함수 : inv(m) 70
Quiz Sol. 다음방정식을행렬로표현하고, 방정식의근을행렬연산을통해 계산해봅시다. -3x 1 x 3 = -3 2x 1 + 5x 2 7x 3 = 1 -x 1 + 4x 2 + 8x 3 = 2 >> 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 71
행렬과통계량 행렬이주어졌을때, 행렬의통계량을계산 행렬의열단위로계산 >> M = [5 3 8; 2 4 3]; >> min(m) 2 3 3 >> max(m) 5 4 8 >> sum(m) 7 7 11 최소값 최대값 전체합 >> mean(m) 평균 3.5000 3.5000 5.5000 >> var(m) 분산 4.5000 0.5000 12.5000 >> std(m) 표준편차 2.1213 0.7071 3.5355 72
행렬사용에익숙해지기 [ 실습 11] 대전초등학교 6 학년 1 반의성적이다음과같다고할때, 여러가지값들을구해봅시다. 6 학년 1 반의성적 국어수학과학체육 영희 98 83 89 89 철수 89 92 97 87 민수 78 86 91 96 1) 각과목별평균, 분산, 최고점및최저점 2) 각학생별총점및평균 3) 각학생별최고점을받은과목의점수 4) 반전체점수합계및평균 [ 실습 12] 6 학년 1 반의성적이행렬로주어져있을때, 채점오류로모든학생의체육점수를 3 점올리고, 과학점수를 2 점씩내리는작업을행렬연산을통해수행해봅시다. 73