Download presentation
Presentation is loading. Please wait.
Published by산하 장곡 Modified 8년 전
1
MATLAB 의 사용
2
초기 MATLAB 은 Cleve Moler 에 의해 Fortran 으 로 작성 현재는 미국의 MathWork 사에 의해 C++ 로 작성 Matlab 은 Matrix 계산에 뛰어난 능력을 가지고 있 으며 많은 이론의 실증 프로그램을 작성하는데 사 용되고 있다. Matlab 코딩 체계는 우리에게 친숙한 수학적인 기 호와 간단한 C 문법으로 행해진다.
3
1. 수학과 관련된 계산 2. 알고리즘 개발 3. 상황 Modeling 과 Data 분석 4. 여러 가지 과학과 공학적인 그래픽적 표현 5. GUI 에 의한 Application 개발 6. 제어분야의 프로그래밍 7. 네트워크 시뮬레이션
4
행렬을 기본으로 계산하기 때문에 MATLAB 의 기본 데이 터 요소는 차원의 제한이 없는 Array( 배열 ) 이다. 제어 및 이미지 프로세싱 등 여러 분야에 적용을 하기 위 해 ToolBox 를 제공하고 있다. ToolBox 란 신호 처리, 통계학, 영상 처리, 제어, fuzzy logic, 재정 등 여러 분야에 대한 적용 가능한 도구를 제 공한다. ToolBox 는 MATLAB 의 기본 제공되는 명령어들과 외부 언어로 구성이 되어있으며 제공되는 소스코드를 이용하 여 사용자가 추가적인 응용을 가능하도록 지원한다. 외부 프로그램, 즉, C, Fortran 과 link 해서 이용할 수 있 는 mex 기능도 제공하고 있다.
7
File/Set Path 작성한 파일이 있는 위치를 등록하여 MATLAB 에서 사용 할 수 있도록 한다.
8
여러 개의 함수들을 사용, 사용자의 목적에 맞는 실행 file 을 만들기 위해서는 MATLAB 의 함수들로 구성된 M-file 을 만들어야 한다. M-file 은 text editor( 예를 들면 윈도우에 있는 notepad) 를 사용하여 MATLAB 의 명령어를 차례로 입력하면 된다. M-file “Inv_A.m” 의 내용 A=[1 2 4; 3 5 6; 6 2 1] B=inv(A) 만들어진 M-file 을 실행시키기 위해서는 명령창에서 Inv_A 라고 입력하고 enter 를 치면 Inv_A 에 포함된 명령들을 수 행한다.
9
>> help mean : Command Window 에 해당 내용 이 출력된다. >> lookfor covariance : more general information >> helpwin: small window, hypertext >> helpdesk: HTML browser 가 뜬다.
10
직각 수치 행렬을 기본적인 자료의 형식으로 취급한다. 행렬의 원소 : 실수, 복소수, 문자 MATLAB 에서 사용되는 행렬 입력방식 ◦ MATLAB 명령창 ◦ 내부명령 또는 함수들을 사용하여 행렬을 생성 ◦ M- 파일 내에서 행렬을 구성 ◦ 외부의 자료 파일로부터 행렬을 불러들임 (*.mat,*.dat,*.txt) MATLAB 은 다른 프로그래밍 언어들과 달리 차원의 선 언이나 형선언이 필요 없다. 컴퓨터가 사용 가능한 크 기까지 자동적으로 저장공간을 할당해 준다.
11
전체 원소들은 대괄호 [ ] 로 감싼다. 원소들은 빈칸 또는 쉼표를 사용하여 분리한다. 원소의 끝에 세미콜론 ( ; ) 을 붙이면 한 행의 종료를 의미한다. Command Window 에 행렬을 입력하는 예 >> A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9
12
더블 클릭하면 Array Editor 가 활성화 된다. Array Editor 에 행렬값을 입력한다. 1 2 3 4
13
수치, 함수, 수식, 문자 등 : 배열 원소는 스페이스로 구별 ; 세미콜론이 없으면 입력한 내용을 실행 하고 다음 라인에 출력한다. ; 세미콜론이 있으면 입력한 내용을 실행 하고 화면에 보여주진 않는다. ; 세미콜론이 문장 안에 있으면 행을 구별한다
14
기존의 행렬보다 차원이 큰 범위에 원소를 삽입하면 나머지는 0 이 채워지고 새로운 행렬을 생성할 때 자신의 행렬 일부를 이용하여 만 들 수 있는데 이를 부행렬이라한다. 현재 X 는 1*3 행렬로 [ -2.5000 12.1825 1.5000 ] 저장되어 있 다. >> x(5)=abs(x(1)) x = -2.5000 12.1825 1.5000 0 2.5000 본래 있던 X 행렬에 5 번째 열의 값을 만들고 그 값을 abs(x(1)) 로 저장한다. 4 번째 열은 값을 지정하지 않았으므로 0 이 채워진다
15
작은 행렬을 이용하여 큰 행렬에 추가할 수도 있고, 반대로 할 수 도 있다. >> z=[1 3 5]; A=[A;z] A = 1 2 3 4 5 6 6 2 1 1 3 5 >> B = A( 1, 2 ) B = 2 >> C = A( 2, : ) C = 4 5 6 >> D = A( :, 3 ) D = 3 6 1 5 >> X = 0 : 0.1 : 1; >> Y = sin ( 2 * pi * X ) ; A 행렬의 1 행 2 열 값을 B 행렬에 저장 A 행렬의 2 행 모든 열 값을 C 행렬에 저장 A 행렬의 모든 행, 3 번열 값을 C 행렬에 저장 X 행렬에 0 부터 0.1 간격으로 1 까지 저장. 1X11 행렬 각각의 X 행렬값을 연산하여 Y 행렬에 저장. 1X11 행렬
16
MATLAB 에서는 선형 대수학이나 신호 처리 분야에서 취급되는 특별 한 행렬들을 생성하는 함수들을 제공한다. compan : 동반 행렬 (Companion matrix) diag: 대각 행렬 (Digonal matrix) gallery : 시험 행렬 (Test matrix) hadamard : Hadamard 행렬 hankel : Hankel 행렬 hilb: Hilbert 행렬 invhilb : Hilbert 행렬의 역행렬 kron : Kronecker 텐서 곱 (tensor product)
17
magic : 마방진 ( 각각의 행, 열, 대각선을 합한 값 들이 모두 같은 행렬 ) pascal : Pascal 의 삼각형 toeplitz : Toeplitz 행렬 vader : Vandermonde 행렬 그 이외에 실용적인 행렬들 zeros : 0 만으로 구성된 행렬 ones : 1 만으로 구성된 행렬 eye : 단위 행렬 >> k=magic(3) k = 8 1 6 3 5 7 4 9 2 >> o= zeros(3) o = 0 0 0 >> t=zeros(2,3) t = 0 0 0
18
MATLAB 은 " 열 벡터 " 방향으로 연산한다. Transpose 는 ’ 를사용한다. A 의 행을 열로 변경 >> A = [ 1 1 1; 1 2 3; 1 3 6] A = 1 1 1 3 2 3 3 3 6 >> sum(A) ans = 7 6 10 >> k=sum(A) k = 7 6 10 >> A' ans = 1 3 3 1 2 3 1 3 6 >> e = A' e = 1 3 3 1 2 3 1 3 6
19
Summation and Subtract ◦ A + B & A – B : The same dimensions. ◦ 해당하는 각각의 행렬 값을 더하거나 뺀다 Product ◦ A * B : A is m * n matrix & B is n * p matrix, ◦ the result is m * p matrix. Division ◦ Left division : X = A \ B → inv(A)*B ◦ Right division : X = A / B → A*inv(B)
20
X = A / B → A*inv(B) >> a= [1 2; 3 4] a = 1 2 3 4 >> b= [0 1; 2 3] b = 0 1 2 3 >> c = a + b c = 1 3 5 7 >> a-b ans = 1 1 >> a * b ans = 4 7 8 15 >> inv(a) ans = -2.0000 1.0000 1.5000 -0.5000 >> inv(b) ans = -1.5000 0.5000 1.0000 0 >> x = a/b x = 0.5000 0.5000 -0.5000 1.5000 x = a/b = a * inv(b) x(1,1) = (a11 * b11) + (a12 * a21) =(1 * -1.5) + (2 * 1) = 0.5 x(1,2) = (1 * 0.5) + (2 * 0) = 0.5 x(2,1) = (3 *-1.5) + ( 4 * 1) = -0.5 x(2,2) = (3 * 0.5 ) + (4 * 0) = 1.5
21
x. * y = [ x ij * y ij ] x. / y = [ x ij / y ij ] x. ^ y = [ ] .*./. ^ 기호들은 각각의 배열값 에만 적용된다. a = 1 2 3 4 b = 0 1 2 3 >> a.*b ans = 0 2 6 12 >> a./b Warning: Divide by zero. ans = Inf 2.0000 1.5000 1.3333 >> a.^b ans = 1 2 9 64 >> a.\b ans = 0 0.5000 0.6667 0.7500
22
rand : 0 과 1 사이의 값으로 균등 분포를 갖는 단일 난수를 발생 rand(1, n) : 0 과 1 사이의 값으로 균일 분포를 n 개의 난수 행벡터를 만든다. rand(n) : 0 과 1 사이의 값으로 균등 분포를 갖는 난수들로 이루어진 nXn 행렬을 만든다. >> rand ans = 0.9501 >> rand ans = 0.2311 >> a = rand(1, 4) a = 0.6068 0.4860 0.8913 0.7621 >> b = rand(2, 4) b = 0.4565 0.8214 0.6154 0.9218 0.0185 0.4447 0.7919 0.7382 >> c = rand(3) c = 0.1763 0.9169 0.0579 0.4057 0.4103 0.3529 0.9355 0.8936 0.8132 >> d = rand(3, 1) d = 0.1987 0.6038 0.2722
23
Relational Operations 의 결과 true 이면 1, false 이면 <Less than <=Less than or equal to >Greater than >=Greater than or equal to ==Equal to ~=~=Not equal to >> y= [ 4 5 6] y = 4 5 6 >> k = y > 3.0 k = 1 1 1 >> f = y > 5.0 f = 0 0 1
24
z = n2.*log(n2+(n2==0)); a = n2+(n2==0); >> n2 = [3 0] n2 = 3 0 >> z = n2.*log(n2+(n2==0)) z = 3.2958 0 >> a = n2+(n2==0) a = 3 1
25
M-file : Matlab 언어로 쓰여진 파일들 (files) 연속적인 Matlab 문장들 ( 명령어들 ) 을 수행하는 script mode ◦ 파일 이름은 어떠한 이름으로도 사용 가능 입력 매개변수와 출력 매개변수를 다루는 function mode ◦ 파일의 이름은 function 이름과 가능한 같게 한다 text editor 를 이용하여 M-file 작성 command window 에서 M-file 을 부르거나, 다른 M-file 내에 서 호출 비교 ◦ function : 변수가 function workspace 에 등록됨. ◦ script : 변수가 base workspace(command workspace) 에 등록됨. ( 전역변수 )
26
파일 첫줄에 ‘function’ 이라는 단어가 있는 M- 파일이 함수 파일 function 변수 = 파일이름 ( 인자 ) function [Pccoeff, Pcvec] = pca(data, N) 스크립트와의 큰 차이점은 ‘function’ 이 없으면 스크립트로 인식 파일이름의 이름으로 사용된 이름이 함수의 이름과 같아야 함 ‘%’ 기호 뒤에 나오는 문장들은 주석으로 인식되어 무시 ‘%’ 기호와 함께 적어 놓은 설명 부분은 MATLAB 프롬프트에서 ‘help mean’ 이라고 입력하였을 때 화면상에 표시 첫 번째로 ‘%’ 기호 이후의 주석은 ‘lookfor mean’ 이라고 입력하면 화 면에 ‘mean’ 이라는 단어를 포함하는 항목을 모두 표시
27
Matlab – Command Window 에서 fact(2) 를 해보자. ◦ 다음과 같은 메시지가 나온다 ??? Undefined command/function 'fact'. 작성한 후 디스크 모양의 Save 를 클릭하면 저장 화면이 뜨고, 저장할 이름에 fact 라고 되어 있다. prod.m 함수는 입력 매개변수로 주어진 벡터를 구성하는 각각의 원소에 대한 곱을 반환하는 함수 (matlab 에서 지원 ) text editor 실행
28
disp.m : 주어진 ‘ 메시지 ’ 문자열을 화면에 출력. ◦ disp(‘ 메시지 ’) rem.m : 주어진 배열 a,b 에 대해 a./b 를 계산하여 나머지들을 반환한다. ◦ Y = rem(a, b) fix.m : 주어진 배열 X 의 원소들의 소수부분을 제거하고 정수로만 이루어진 배열을 만든다 ◦ Y = fix(X)
29
임의의 벡터 x 가 홀 / 짝수를 구별하는 exe_fc.m 함수를 작성한다. ◦ 입력이 없으면 error 메세지 출력
30
for 변수 = 시작값 : 증가분 : 최종값 end k = i+2 는 어떤 결과가 나올까 ?
31
n! 의 결과가 100 을 넘어가기 전의 “n!’ 의 “n” 을 구하시오 while 논리적인 조건 end % disp 대신 sprintf 로 변경한 결과
32
C 언어에서와 동일한 break, continue, return 명령어 지원 try, catch : 예외 처리 기능 ◦ try 다음에 나오는 명령문중에서 error 가 발생하면 실행을 중단하고, catch 뒤에 나오는 명령문을 실행한다. catch 에서도 error 가 발생하면 제어권을 matlab command window 로 돌려준다. ◦ 일종의 변형된 if/else 문이다 try … catch … end
33
2, 3, 4 차원 배열 등의 다차원 배열 사용 가능 3 차원 배열 예 다차원 배열을 만드는 함수들 ◦ ones.m, zeros.m, rand.m, randn.m, cat.m, reshpae.m, repmat.m 등
34
Line Plots : plot.m, ploty.m, loglog.m etc Bar Plots : bar.m, barh.m etc Scatter Plots Pie Charts Contour Plots 와 Mesh plot3 와 surf
35
% 그래프가 그려진 후 다음 명령을 실행해보자. % 어떤 변화가 발생하는가 ? >> xlabel('test plot x') >> ylabel('test plot y'); >> title('plot 연습 ') 선 지정 : 빨간 쇄선, 별마크
36
Grid : 그래프의 눈금 표시에서의 격자를 설정 ․ 해제한다. Box : 축 상자를 설정 ․ 해제한다. 제목과 축의 라벨들은 title, xlabel, ylabel 을 사용하여 첨가 text(x,y,S) : 좌표 (x,y) 에 문자열 S 를 첨가한다. Gtext : 마우스를 사용하여 대화식으로 텍스트를 첨가 axis([xmin xmax ymin ymax]) 는 현재의 그래프의 비율을 주어진 값 으로 설정 hold on : 현재의 그래프에 그래프를 더 추가 (cf. hold off) figure : 다중 그림창을 생성. figure(n) 은 n 번째의 그림창을 활성화함. 하나의 figure 는 subplot 명령을 사용하여 나뉘어 질 수 있음. zoom on 으로 설정해 두면, 마우스로 그림창을 확대할 수 있음.
38
fplot 명령은 y = f(x) 형태인 함수 값을 지정된 한계 사이에서 그래프를 정 확하게 그려주는 명령 y = x^2 + 4*sine(2x) -1 그래프 그리기 fplot(‘function’, limits, line specifiers)
Similar presentations