기초 Matlab 교육 여성공학인재양성 (WE UP) https://kr.mathworks.com WE UP MATLAB 1
기초 Matlab 교육 Matlab 소개 Matlab 실습 WE UP MATLAB 2
Matlab 소개 WE UP MATLAB 3
현재사용프로그래밍언어중 10 위 지난달에는 12위였어요 WE UP MATLAB 4 https://www.tiobe.com/tiobe index/
전자공학에서는 공학수학 신호및시스템 통신시스템 제어공학 : Simulink 영상처리등등의시뮬레이션에서사용 수학, 물리, 인문학, 경제학, 의료공학등에서도사용 WE UP MATLAB 5
Matlab: MATrix LABoratory 행렬연산을위한간단하고유용한하이레벨언어 데이터시각화에유용 인터프리터언어 (C++ 등 : 컴파일언어 ) 매우쉬운프로그램환경 : 문법과디버깅이쉬움 C 언어기반 타입이나크기를선언할필요가없음 루프구문보다는벡터화하여병렬연산 WE UP MATLAB 6
https://kr.mathworks.com/products/matlab mobile.html WE UP MATLAB 7
https://kr.mathworks.com/academia.html?s_tid=gn_acad WE UP MATLAB 8
Matlab 설치 학교이메일로가입하고인증받아서설치가능 https://kr.mathworks.com/downloads/web_downloads/download_release?release=r2017b WE UP MATLAB 9
Matlab 기본화면 WE UP MATLAB 10
앱 Toolbox (1/2) Toolbox signal processing Image processing Communications Filter design 수학, 통계, 및최적화 제어시스템 신호처리및무선통신 신호처리, 통계학, 영상처리, 제어, fuzzy logic, 재정, 화학공정, 등등 이미지프로세싱및컴퓨터비전 WE UP MATLAB 11
앱 Toolbox (2/2) 테스트및측정 계산금융 계산생물학 코드생성 응용프로그램개발 데이터베이스액세스및리포팅 WE UP MATLAB 12
m 파일에디터 / 디버거 함수나스트립트를확장자 m (*.m) 으로저장 커맨드창에 m파일명을입력하여실행함 WE UP MATLAB 13
기본기호 % 주석 (comment) %% Section divider : 벡터나행렬제어 ( ) 벡터나행렬, 다항식의항 [ ] 벡터, 행렬, 다항식. 벡터나행렬의항끼리 (element wise) 계산시.. 상위디렉토리... 계속명령문입력, 행렬에서열구분 ; 행렬에서행구분혹은, 수식끝에서사용시에는화면 (command windows) 에출력을방지 전치 (transpose) text 문자열 WE UP MATLAB 14
기본키워드 (1/2) help doc lookfor clc ctrl+c save load clear close diary 명령창에표시되는함수도움말도움말브라우저내함수도움말문서페이지모든도움말항목의키워드검색 명령창지우기 강제종료 작업공간변수를파일에저장 save filename %workspace 내의모든변수저장 save myvariables A B C % myvariables.mat 으로변수 A B C 저장 파일의변수를작업공간 (Workspace) 으로로드 load myvariables 작업공간에서항목을제거하여시스템메모리늘리기 clear A B C % 변수명 Figure 제거 명령창텍스트를파일에저장 diary myfirstmatlab.txt diary off WE UP MATLAB 15
기본키워드 (2/2) who whos what which end size length ans pi inf NaN i,j 작업공간에있는변수나열작업공간의변수를크기및유형과함께나열 List MATLAB files in folder Locate functions and files 코드블록을종료하거나마지막배열인덱스를표시함 배열크기 [r,c]=size(a) r=size(a,1), c=size(a,2) 가장큰배열차원의길이 가장최근에얻은답 π% 원의원주와지름의비율 무한대 숫자가아님 (Not a Number) 허수단위 (Imaginary Unit) WE UP MATLAB 16
수식기호 = 변수할당 % 변수명 (variable) = 수식 (expression) % 변수명은영문으로시작 % 대소문자다르게처리즉, A, a 다른변수 + 더하기 +. 항끼리더하기 빼기. 항끼리빼기 * 곱하기.* 항끼리곱하기 ^ 거듭제곱.^ 각항의거듭제곱 / 오른쪽나누기 xa=b; x=b/a=ba -1./ 항끼리나누기 \ \ 왼쪽나누기 Ax=b; x=a\b=a -1 b.\.\ 왼쪽배열나누기 WE UP MATLAB 17
기본수학함수와삼각함수 수학함수 abs(x) x의절댓값을계산 sqrt(x) x의근호값을계산 round(x) x를가까운정수로반올림 ceil(x) x를가까운큰정수로올림 floor(x) x를가까운작은정수로내림 sign(x) x가 0보다작으면 -1, 0이면 0. 0보다크면 1 rem(x,y) x/y의나머지를계산 exp(x) e^x를계산 imag(x) 복소수의허수부 (Imaginary Part) real(x) 복소수의실수부 log(x) 자연로그 (Natural Logarithm) log10(x) 상용로그 ( 밑 10) conj(x) 켤레복소수 (Complex Conjugate) sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) atan2(x,y) 삼각함수 sin(x) 계산 cos(x) 계산 tan(x) 계산 1/sin(x) 계산 1/cos(x) 계산 1/tan(x) 계산 1/tan(y/x) 계산 WE UP MATLAB 18
벡터연산 기본벡터구문 : ( 콜론 ) 을사용하여증가나감소하는벡터를쉽게제어함 x = [2 2*pi sqrt(2) 3] x = first:last x = first:increment:last x = linspace(first, last, n) x = logspace(first, last, n) 2, 2*pi, sqrt(2), 3 의 4 개의항을갖는행벡터 x 를생성 first 에서시작하여 1 씩증가하고 last 로끝나는행백터 x 를생성 first 에서시작하여 increment 씩증가하고 last 로끝나는행백터 x 를생성 first 에서시작하여 last 로끝나고항을 n 개갖는행백터 x 를생성 10^first 에서시작하여 10^last 로끝나고항을 n 개갖는행백터 x 를생성 WE UP MATLAB 19
배열생성함수 [ ] 빈배열생성 zeros ones eye magic(n) rand randn inv det eig 모두 0 으로구성된배열생성 모두 1 로구성된배열생성 단위행렬 (Identity Matrix) 마방진 (Magic Square): 행과열의합계가동일하고 1 ~ n^2 범위의정수로생성된 nxn 행렬을생성 구간 (0,1) 에균일하게분포된난수생성 정규분포된난수생성 역행렬 (Matrix Inverse) 행렬식 (Matrix Determinant) 고유값 (Eigenvalue) 과고유벡터 (Eigenvector) WE UP MATLAB 20
그래픽함수 plot plot(xdata, ydata, 'color_linestyle_marker') xdata와 ydata의크기가일치해야함 figure 새로운그림창을생성 legend legend( 문자열1, 문자열2,...) title title( 그래프의제목 ) xlabel xlabel( X축이름 ) ylabel ylabel( Y축이름 ) subplot subplot(mni) or subplot(m,n,i) M: 행의개수, N: 열의개수, I: 순서 axis axis([x1,x2,y1,y2]) xlim xlim([x1,x2]) : x축제한 ylim ylim([y1,y2]) : y축제한 WE UP MATLAB 21
논리연산, 관계연산 & and == 같은 or ~= 같지않은 ~ not > 큰 xor xor < 작은 >= 크거나같은 <= 작거나같은 WE UP MATLAB 22
반복문 Fixed repetition: for loop for expression statements end Indefinite repetition : while loop while logical_expression statements end Multiple options: if/elseif/else construct if logical_expression #1 block #1 statements elseif logical_expression #2 block #2 statements else default statements end Single decision: if/else construct if logical_expression block #1 statements else default statements end WE UP 10 23 MATLAB Multiple options with multiple tags: switch construct switch switch_expression case case_expression_list #1 block #1 otherwise default block end
Matlab 실습 WE UP MATLAB 24
Matlab 실습 스크립트 m 파일 help 명령어 변수 내장함수및상수 배열, 벡터와행렬 데이터다루기 (load/save) 배열요소다루기 배열계산 데이터시각화 논리연산 반복문 함수생성 WE UP MATLAB 25
스크립트 m 파일 disp 변수이름을출력하지않고변수의값을표시 WE UP MATLAB 26
help doc randi % 로그인필요 help randi 1에서 20사이에균일하게분포된정수형난수의 5행 7열의행렬을변수 x에할당해보세요! WE UP MATLAB 27
명령어 = 변수할당 % 변수명 (variable) = 수식 (expression) % 변수명은영문으로시작 % 대소문자다르게처리즉, A, a 다른변수 1. 3곱하기 5 2. 변수 m에 3 곱하기 5 할당 3. m=m+1 4. 변수 y에 m/2 할당 5. k=y 2; 6. m=3*k ( 위화살표키이용 ) 7. y값을다시계산 ( 위화살표키이용 ) WE UP MATLAB 28
변수 = 변수할당 % 변수명 (variable) = 수식 (expression) % 변수명은영문으로시작 % 대소문자다르게처리즉, A, a 다른변수 1. 변수 3sq에 9 할당 2. clear 한후작업공간의변화살펴보기 3. clc 한후명령창의변화살펴보기 WE UP MATLAB 29
내장함수와상수 pi sin(x) sqrt(x) π% 원의원주와지름의비율 sin(x) 계산 x의근호값을계산 1. 변수 x에 π/2 할당 2. 변수 y에 sin(x) 할당 3. 변수 z에 9의제곱근 (sqrt) 할당 WE UP MATLAB 30
[ ] 벡터, 행렬, 다항식 배열, 행렬에서열구분 ; 행렬에서행구분 1. 변수 x에 4 할당 2. 배열 x에 7과 9를갖는행벡터할당 3. 배열 x에 7과 9를갖는열벡터할당 (; 이용 ) 4. 크기가 (1,3) 인행벡터 x에 3, 10, 5 할당 5. 크기가 (3,1) 인열벡터 x에 8, 2, 4 할당 6. 다음과같은행렬 x 생성 5 6 7 8 9 10 7. 크기가 (1,2) 인행벡터 x에 sqrt(10), pi^2 (π 2 ) 할당 WE UP MATLAB 31
벡터 x = f:l x = f:i:l x = linspace(f, l, n) f 에서시작하여 1 씩증가하고 l 로끝나는행백터 x 를생성 f 에서시작하여 i 씩증가하고 l 로끝나는행백터 x 를생성 f 에서시작하여 l 로끝나고항을 n 개갖는행백터 x 를생성 1. 행벡터 x에 1, 2, 3 할당 2. 행벡터 x에 : 기호를사용하여 1, 2, 3 할당 3. 행벡터 x에 1부터 0.5간격으로 5까지할당 4. 행벡터 x에 3부터 2간격으로 13까지할당 5. 행벡터 x에 1부터 10까지 5개의항을할당 (linspace 이용 ) 6. x에행벡터 x를전치 (transpose) 하여할당 (') 7. 열벡터 x에 5부터 2간격으로 9까지할당 (') WE UP MATLAB 32
배열생성함수 rand zeros 구간 (0,1) 에균일하게분포된난수생성 모두 0 으로구성된배열생성 1. 변수 x에크기 (5,5) 인랜덤행렬할당 (rand 함수이용 ) 2. rand를이용하여변수 x에크기 (5,1) 인랜덤배열할당 3. zeros를이용하여모든항이 0이고크기 (6,3) 인행렬을생성하여 x에할당 WE UP MATLAB 33
Load/Save save load clear 작업공간변수를파일에저장 파일의변수를작업공간 (Workspace) 으로로드 작업공간에서항목을제거하여시스템메모리늘리기 1. load datafile.mat 작업공간에 data가있는지확인 data를클릭해서내용확인 2. data를 mydata.mat 파일로저장 3. clear 한후작업공간확인해보기 4. 현재폴더에서 mydata를클릭하여가져오기혹은오른쪽클릭하여 [ 데이터가져오기 ] 로가져오기 WE UP MATLAB 34
배열인덱싱 ( ) 벡터나행렬, 다항식의항 end 마지막배열인덱스를표시함 1. 변수 v에 data의 (6,3) 항을할당 2. end 키워드를이용하여 data의 (end,3) 항을 v에 할당 3. 변수 p에 data의 (end 1,3) 항을할당 WE UP MATLAB 35
부분배열 (1/2) : 벡터나행렬제어 end 마지막배열인덱스를표시함 1. 변수 density에 data의 2번째열할당 2. 변수 volumes에 data의마지막두열할당 3. 변수 p에 density의 6번째항할당 4. 변수 p에 density의 2번째에서 5번째항할당 WE UP MATLAB 36
부분배열 (2/2) : 벡터나행렬제어 end 마지막배열인덱스를표시함 1. 변수 v1에 volumes의마지막전열할당 2. 변수 v2에 volumes의마지막열할당 3. v2의첫번째항을 0.5로변경 4. data의 (1,end) 항을 0.5로변경 WE UP MATLAB 37
배열계산 (1/2) 1. 변수 r에 v1+1 할당 max(x) 2. 변수 vs에 v1+v2 할당 round(x) 3. 변수 va에 vs/2 할당 4. 변수 vm에벡터va의최댓값을할당 (max) 5. round함수를이용하여변수 vr에 va의 round값 을할당 x배열의가장큰요소를반환 x를가까운정수로반올림 WE UP MATLAB 38
배열계산 (2/2). 벡터나행렬의항끼리 (element wise) 계산시 1. 변수 mass에 density와 va의항끼리 (elementwise) 곱셈한값을할당 2. 변수 sample을 data의첫번째열벡터로할당 3. 변수 mass1에 density와 v1의항끼리 (elementwise) 곱셈한값을할당 4. 변수 mass2에 density와 v2의항끼리 (elementwise) 곱셈한값을할당 WE UP MATLAB 39
배열함수 size [M,I] = max(a) 배열크기 [r,c]=size(a) r=size(a,1), c=size(a,2) A 의최댓값의인덱스를찾은다음출력벡터 I 로반환, 최댓값이두개이상있는경우 max 는첫번째최댓값에해당하는인덱스를반환 1. 변수 dsize에 data의 size값을할당 2. 변수 dr과 dc에 data의행수와열수를각각할당 3. 변수 vmax와 ivmax에벡터v2의최댓값과이때의인덱스를각각할당 WE UP MATLAB 40
Plot (1/2) plot plot(xdata, ydata, 'color_linestyle_marker') xdata와 ydata의크기가일치해야함 figure 새로운그림창을생성 legend legend( 문자열1, 문자열2,...) 1. x축은 sample, y축은 mass1인그래프그리기 2. 새로운그림창을생성하여 x축은 sample, y축은 mass2인그래프를 red * 로그리기 3. hold on 사용해보기 4. x축은 sample, y축은 mass1인그래프를 black square로그리기 5. legend를이용하여 'mass1', 'mass2' 표시해주기 6. close all 사용해보기 WE UP MATLAB 41
Plot (2/2) title title( 그래프의제목 ) xlabel xlabel( X축이름 ) ylabel ylabel( Y축이름 ) 1. v1을 plot 해보기 2. v1을 'LineWidth' 가 3이되게plot해보기 3. x축은 sample, y축은 v1인그래프를 'LineWidth' 가 4가되게plot해보기그리기 4. title을 'Sample Densities' 로넣기 5. Ylabel을 'Density (g/cm^3)' 로넣기 WE UP MATLAB 42
subplot subplot axis xlim ylim subplot(mni) or subplot(m,n,i) M: 행의개수, N: 열의개수, I: 순서 axis([x1,x2,y1,y2]) xlim([x1,x2]) : x 축제한 ylim([y1,y2]) : y 축제한 1. 한그림창에 subplot 을이용하여 2 개의 plot 을띄우기 1) 첫번째 plot 은 x 축은 sample, y 축은 v1 2) 두번째 plot 은 x 축은 sample, y 축은 v2 2. 각 plot에 title을넣기 1) 첫번째 plot은 'Sample Densities1' 로 2) 두번째 plot은 'Sample Densities2' 로 3. 두 plot 모두 y 축을 [0,10] 으로제한해주기 WE UP MATLAB 43
플롯탭을이용하여플롯해보기 x = 2.9:0.2:2.9; y =randn(5000, 1); hist(y, x) WE UP MATLAB 44
논리연산 & and > 큰 1. 논리연산 > 를이용하여 pi가 3보다큰지확인 2. 위의결과를 test1에할당 3. 변수 x에 v1의항이5보다크면 1 아니면 0 할당 4. 변수 y에 v1의항이v2의항보다크면 1, 아니면 0 할당 5. 변수 x에 0.8147를할당하고, 변수 test2에 pi가 3 보다크고 x가 0.9보다큰지확인한결과를할당 6. 논리배열 vt에 v1이 5 보다크고 v1이 v2 보다크 면 true를할당 WE UP MATLAB 45
논리연산인덱싱 < 작은 > 큰 1. 변수 v에 v1의항중에서 4보다작은항만할당 2. 변수 s에 sample 항중에서 v1이 4보다작은항만할당 3. 변수 v1의항중에서 v1이 5보다큰항을 10으로변경 WE UP MATLAB 46
If/else/end if logical_expression block #1 statements else default statements end A=randn(1) 일때, A 가 0보다크면 B=sqrt(A) 그렇지않으면 B에 0을할당 WE UP MATLAB 47
for/end for expression statements end disp 변수이름을출력하지않고변수의값을표시 x=(11:15).^2; 일때 idx가 1부터 5까지 1씩증가할때마다 disp(x(idx)) 를나타내기 WE UP MATLAB 48
함수생성 입력 함수 출력 함수이름.m 익명함수 편집기에서새로만들기클릭후다음을입력 function m=func_mass(d,v) m = d.*v; 편집기에서저장을누르면자동으로함수명인 func_mass.m으로저장 mass1=func_mass(d,v1) 등으로호출 fmass = @ (d,v) d.*v; mass1=fmass(d,v1) 등으로호출 WE UP MATLAB 49
Matlab https://kr.mathworks.com Matlab 아카데미아 https://kr.mathworks.com/academia.html?s_tid=gn_aca d 코세라강의 https://www.coursera.org/learn/matlab MATLAB Tutorials 유투브강의 https://www.youtube.com/playlist?list=elociukmfq2wc WE UP MATLAB 50