Matlab, Simulink 기본사용법및응용[2014.1].hwp 1 2014 하계 Matlab workshop 2014. 8. 4( 월) ~ 8. 6( 수) Matlab/Simulink 기본사용법및응용 경북대학교 IT 대학전자공학부 김지훈 목차 1. 매트랩개요 2. 숫자, 셀과구조배열 3. 함수와파일 4. 의사결정프로그램 5. 도표작성및모델링 6. 통계, 확률및보간 7. 미적분및미분방정식의수치해석 8. 문자연산 9. 시뮬링크
Matlab, Simulink 기본사용법및응용[2014.1].hwp 2 MATLAB 이란? MATrix LABoratory 의약어. 수치해석과신호처리그리고편리한그래픽기 능등을통합하여고성능의수치계산과결과를보여주는프로그램. 특징 행렬( 또는배열) 기반의수치계산 인터프리터(interpreter) 방식의공학전용언어 (Mfile 도사용가능) 그래픽처리의간편함및고급화 다양한응용분야별라이브러리제공 ( Toolbox) C 프로그램과의연계성 실시간하드웨어제어가능 Simulink 이전에는주로신호처리와수치해석분야에서전문가들에의해사용 최근에는과학, 수학및대부분의공학분야에널리보급되어활발히사용 => 많은대학에서저학년교육과정으로채택 이강의의목적은 Matlab과 Simulink 의기본사용법을익힘으로써, 실험및 이론학습에도움 을주고자함
Matlab, Simulink 기본사용법및응용[2014.1].hwp 3 Ch.1 매트랩개요 1.1 매트랩 : 상호대화식 (interactive) 계산기 => 매트랩시작, 기본계산법, 매트랩종료 매트랩시작 : 매트랩아이콘을더블클릭하면작업화면(desktop) 이나타남 작업화면의구성 1 명령창 (command window) 2 명령이력창 (command history) 3 현재디렉토리창 (current directory) 4 워크스페이스 (workspace) 명령창 : 명령어, 함수, 문장 등을입력하여 매트랩프로그램 작성 => 명령창의프롬프트(>>) 는명령어를받아들일준비가되었음을나타냄 => 명령어를입력하기전에커서(cursor) 가프롬프트바로뒤에위치시킴 Current directory window : 파일관리자와유사 => 확장자.m 으로된파일을더블클릭하면 ' 매트랩 Editor' 에서열수있음 Workspace : current directory 창위쪽의 Workspace 탭을클릭 => 명령창에서만든변수들을나타냄 => 변수명을더블클릭하면배열편집창(Array editor) 으로확인가능 Command history window : 명령창에서이전에입력된사항을보여줌 => 입력된부분을클릭하거나편집기에드래그하면재사용가능 작업화면변경 : 각각의창윗부분에있는을이용 디폴트환경을복원하기위해서는 Desktop/Desktop Layout/Default 선택
Matlab, Simulink 기본사용법및응용[2014.1].hwp 4 명령어와식의입력 : 사용방법간단, 예를통해확인 명령창의프롬프트뒤에명령어를입력 => (Interactive) session : 8 나누기 10 ans 는 작업자와매트랩사이의상호작용 작업내용 Command window 설명 answer의약어 식에사용하기위해변 수를사용 변수의값을확인 이변수는다음단계의 계산에사용가능 제곱근함수 : sqrt (square root) >> 8/10 0.8000 >> 5*ans 4 >> r=8/10 r = 0.8000 >> r r = 0.8000 >> s = 20 * r s = 16 >> r=sqrt(9) r = 3 매트랩은계산시높은정밀도를가지지 만, 결과가정수일경우를제외하고보통 소수점이하 4자리십진수로표현 매트랩에서변수(variable) 는값을가질 수있는기호 변수 ans는이제 4가됨 ans 대신변수 r에결과를할당 변수 r의값이 0.8임을확인 만약곱셈기호 * 를생략하고, 수식을 로입력하면오류메시지가 나타남 r의이전의값이 3으로바뀜 라인끝에세미콜론(;) 을입력하면 화면에결과가나타나지않음 매트랩에서는명령파일에서이전의키입력을기억하고있으므로, 이용하여사용되었던명령들을스크롤(scroll) 가능 => 원하는명령줄을찾아,,, 를이용하여다시편집가능 키를 스칼라산술연산과연산의우선순위 기호 연산 매트랩형식 ^ 지수 : a^b + 덧셈 : a+b a+b 뺄셈 : ab ab * 곱셈 : ab a*b / 나눗셈 : a/b a/b => 연산우선순위 : 지수 곱셈/ 나눗셈 덧셈/ 뺄셈, 괄호는가장안쪽부터 => 우선순위가확실하지않은곳에서는오류를피하기위해괄호를삽입
Matlab, Simulink 기본사용법및응용[2014.1].hwp 5 [ 예제1] 매트랩을사용하여다음식들을계산하라. 1 2 할당연산자(=) : 좌측의변수에우측의값을할당, 등호보다더많은것을의미 식 의미 x = 3 변수 x에 3을할당하라 x = x + 3 현재 x값에 3을더한새로운값으로대체 6 = x x + 2 = 20 매트랩에서사용불가 x = y + 5 변수 y에어떤값이할당되어있다면가능 [ 예제2] 원기둥의부피 : 1 2 높이가 15m이고반지름이 8m 인원기둥의부피는? 부피가 1보다 20% 더크고같은높이를갖는또다른원기둥을만들려한 다. 이경우, 원기둥의반지름은얼마가되어야하는가? 변수이름 : 반드시문자로시작, 나머지는문자, 숫자, _ (underscore) 의조합 => 매트랩에서는대/ 소문자를구별, 변수이름은 63자보다길지않아야됨 작업세션관리 명령어 clc clear (all) 설명 명령창을깨끗이함( 변수는남아있음) 메모리로부터모든변수를지움 clear var1 메모리로부터변수 var1을지움 exist('name') quit/exit who 'name' 이라는이름의변수나파일이존재하는지알림 매트랩을종료 현재메모리의변수를나열 whos 현재의변수들과크기, 0이아닌허수부등을나열 : 콜론; 일정한간격의원소를갖는배열을생성, 콤마; 배열의원소들을분리 cf)help ; 세미콜론; 화면에출력이나타나지않게함, 혹은새로운행... 생략부호( 마침표세개); 라인이계속이어짐
Matlab, Simulink 기본사용법및응용[2014.1].hwp 6 사용예 >> x=2; y=6+x, x=y+7 y = 8 x = 15 설명 결과가나타나지않게세미콜론사용, 같은줄에여러개의명령어들을사용하기위해콤 마사용 [ 결과] x 의처음값이나타나지않았으며, x의값은 2에서 15로변경됨 탭과화살표키 : 입력의편의성증대 스마트불러오기 : 변수의처음몇문자를입력후, 키누름 탭완성 : 이름의처음몇문자를입력후, 키누름 화살표키 : 이전에사용한명령어를 scroll 삭제및지우기 :,, ( 전체라인삭제), + ( 라인끝까지삭제) 매트랩은종료나변수값을지우기전에는그변수의마지막값을기억함 함수와명령어또는문장(statement) 의차이 => 함수는괄호속에인수를가지나명령어나문장은인수를갖지않음 + : 오래걸리는계산을취소 미리정의된상수 명령어 ans eps 설명 가장최근의답을나타내는임시변수 부동소수짐의정밀도를규정 i, j 허수단위, 곱셈기호없이사용 Inf 무한대 NaN pi 정의되지않은수치결과 파이 사용예 c1=12i c1=complex(1,2) y=7/2*i y=7/2i 복소수 를표현 허수단위 y = (7/2)i = 3.5i y = 7/(2i) = 3.5i 설명 i, j와숫자사이에는곱셈기호가불필요
Matlab, Simulink 기본사용법및응용[2014.1].hwp 7 [ 예제3], 일때, 매트랩을이용하여 x+y, xy, x/y를구하고 손으로구한결과와비교하라. 1+7i, 12+64i, 1.2+1.1i 숫자표시형식 : format 명령어 매트랩에서디폴트포맷은 short 형식으로소수점이하 4자리를사용 명령어 format short 소수점 4 자리(default) format long 16자리 설명 format short e 5 자리( 소수점 4 자리) 와지수 : 6.3792e+03 format long e 16 자리( 소수점 15 자리) 와지수, 여기서 e는숫자 10을의미 format bank 소수점 2 자리( 화폐계산시) format + 결과의양수, 음수, 0을표시 format rat format compact format loose 유리수의근사화 blank line 억제 덜간결한형식으로재설정 1.2 메뉴와툴바 메뉴바는창을변경함에따라바뀜 메뉴들도문맥에따라기능이달라짐 툴바아래의버튼은툴바에단축키를추가하기위한도움말등임
Matlab, Simulink 기본사용법및응용[2014.1].hwp 8 1.3 배열, 파일및그래프작성 배열 ( 혹은행렬/ 벡터) 매트랩의장점중의하나는배열(array) 이라고하는수들의모임을하나의변수 처럼다룰수있는점 작업내용 Command window 설명 0, 4, 3, 6 을순서대로 배열을만들자 >> x=[0, 4, 3, 6] x = 0 4 3 6 대괄호([]) 를사용하여배열로묶음 콤마를생략하고 space로각각을구분 할수있으나콤마사용이바람직 배열은순서를가짐 두배열의합 일정한간격을가지는 배열만들기 예 ) 0, 0.1, 0.2,, 10 >> y=[6 3 4 0] y = 6 3 4 0 >> z=x+y z = 6 7 7 6 >> u=[0:0.1:10] u = 0 0.1000 0.2000 0.3000... sine 함수 >> w=5*sin(u); 배열의참조 배열( 벡터) 의길이 >> u(7) 0.6000 2.8232 >> s=length(w) s = 101 >> w(7) 변수 y는변수 x와순서가다르므로서 로다른배열 x와 더하여 y에있는모든대응하는숫자들을 z를만듦 u는 101개의값을가지는배열 이런경우명령어의맨뒤에 않는다면, 위에서구한 u 에대하여, w=5sin(u) 를계산하기위한명령 ; 을쓰지 실행결과 w는 101개의값을갖는배열 u(7) 을입력하면, 배열 u의 7번째값을 볼수있음, 숫자 7은배열에서특정한 원소를가리키므로배열 index라함배열에얼마나많은값들이있는지알 수있음 방정식의근 => (root) 매트랩에서다항식의표현 다항식을내림차순을정리하여계수들을차례로원소로하는배열로표현 예) 다항식 는 [4 8 7 2] 와같이나타냄 다항식의근을구하기위한함수 : roots() [ 예제4] 1 방정식 의근을매트랩을이용하여구하라. 2 x=1, 3+5i, 35i 매트랩을이용하여배열[cos(0):0.02:log10(100)] 을만들고 25번째원소를구 하라. 그리고배열에얼마나많은원소들이있는지구하라. 1.48, 51
Matlab, Simulink 기본사용법및응용[2014.1].hwp 9 cf.) 예제4 의 1에서명령어를하나만사용( 한줄로) 하여근을구할수있을까? 내장함수 함수매트랩표현함수매트랩표현 exp(x) sin(x) sqrt(x) tan(x) log(x) acos(x) log10(x) asin(x) cos(x) atan(x) cf.) 위의표에서삼각함수는라디안(radian) 값을사용. 단, sind(x) 와 cosd(x) 와 같은경우에는인수 x 의값이각도(degree) 임 파일작업 : M 파일/MAT파일 매트랩에서프로그램, 데이터와세션결과들을저장시킬수있음 => 특히, 매트랩함수들과프로그램파일들은확장자.m 으로저장(M 파일) => 확장자.mat로매트랩세션에서생성되는변수들의이름과값을저장 M파일은 ASCII 파일이므로어떤문서편집기로도작성가능 => but, MAT파일은 2진법파일이며일반적으로생성했던 s/w에서만읽힘 데이터파일( DAT 파일) 은아스키형식에따라생성 => 워드프로세서, 스프레드시트, 실험데이터획득시스템등에사용가능 작업공간변수들의저장과복원 : save와 load 명령어 매트랩사용을중단하고나중에그세션을계속하려는경우 => 명령창에 save 를입력하면, matlab.mat에저장 => 불러오기위해서명령창에 load를입력 선택적인저장을위해, "save filename var1 var2" 와같이입력함 => 불러오기위해서는 load filename 을입력함 cf.) 디렉터리와경로(path) : 매트랩에사용되는파일들의위치를알필요있음 명령어 pwd 를입력하면, 현재의디렉터리를알수있음 => current directory window 를이용하면편리
Matlab, Simulink 기본사용법및응용[2014.1].hwp 10 그래프작성 plot() 직선, 대수, 표면, 등고선그래프와같은여러형태의그래프작성가능 [Ex.1] 에서 의그래프 >> x=[0:0.02:6]; >> y=5*sin(x); >> plot(x,y),xlabel('x'),ylabel('y') >> grid % 선을나타냄 >> axis('equal') >> title('y=5sin(x)') xlabel : 작은따옴표안에있는 text를수평축에나타냄 ylabel : 수직축에나타냄 title : 그래프제목 gtext : 왼마우스클릭위치에글 [Ex.2] 에서 와 의그래프를같이그리자. >> x=[0:0.01:5]; >> y=2*sqrt(x); >> z=4*sin(3*x); >> plot(x,y,x,z), xlabel('x') >> gtext('y'), gtext('z') 이렇게쓰면, 그래프는? >> plot(x,y,x,z,'') 그래프로부터점의좌표를구해야할때, 함수 ginput() 을사용 => 명령어 [x,y]=ginput(n) : n 개의점들을구함; 길이가 n인 x와 y 벡터구함 함수와는별도로데이터를그래프에나타낼경우, 데이터마커(+,*,o) 로표시 => plot(x,y,'+') => 필요한경우, 데이터들을선으로연결가능 : plot(x,y,'+',x,y)
Matlab, Simulink 기본사용법및응용[2014.1].hwp 11 [Ex.3] x=[15:2:23], y=[20 50 60 90 70] 인경우 >> x=[15:2:23]; >> y=[20 50 60 90 70]; >> plot(x,y,x,y,'+') [ 예제5] 1 매트랩을이용하여 에서 의그래프를그 려라. 그래프에제목을적고, 축에라벨을표시하라. 변수 s는 1초당피트의속도 (ft/s) 이고, 변수 t 는초단위이다. 2 매트랩을이용하여 를그려라. 에서 과 의그래프
Matlab, Simulink 기본사용법및응용[2014.1].hwp 12 1.4 스크립트파일과편집기/ 디버거 1 매트랩은두가지방법으로연산을수행가능 인터랙티브모드 : 모든명령을명령창에입력 2 스크립트파일(M 파일) 로저장된매트랩프로그램의실행 => M 파일을실행하는것은명령창에명령어를하나씩입력하는것과동일 => 명령창프롬프트에서파일이름을입력하여파일을실행시킴 많은명령어들을수행시키거나명령어를반복수행시킬경우, 를갖는배열들이포함된문제에서인터랙티브모드는불편 => 이런경우, 프로그램(M 파일) 으로작성할수있음 혹은많은원소 M 파일의두가지형태 : 스크립트파일(script file)/ 함수파일(function file) => 편집기와디버거를사용하여 M파일을만들수있음 => 스크립트파일은명령파일(command file) 로도불림 함수파일은 3 장에서... 스크립트파일작성과사용 >> % This is a comment >> x=3+2 % So is this x = 5 % 는주석을나타내며, % 기호오른쪽의것은모두무시됨 [Ex.4] 간단한스크립트파일만들기 1 M 파일을만들기위해, File/New/Mfile 메뉴를선택 => 편집기/ 디버거창 2 3 아래와같이문서를작성하고 example1.m 으로현재디렉터리에저장함 프로그램을실행하기위해, 명령창에 example1 을입력( 혹은 Debug/Run) % Program example1.m % This program computers the sine of % the square root and displays the result. x=sqrt([5:2:13]); y=sin(x)
Matlab, Simulink 기본사용법및응용[2014.1].hwp 13 스크립트파일의이름은변수의이름이나매트랩명령어나함수이름과같지 않도록함, 확인을위해다음을입력해봄 => exist('example1') : 변수 example1 의존재여부 ; 없으면 0, 있으면 1 => exist('example1.m','file') : 파일 example1.m 확인; 없으면 0, 있으면 2 => exist('example1','builtin') : 내장함수여부확인 ; 없으면 0, 있으면 5 exist('mean.m','file') 와 exist('mean','builtin') 을입력해보면 => 파일 mean.m 은존재하지만, 내장함수는아님 => 존재하는 M 파일의주석문보기 : >> help filename 스크립트파일의디버깅 프로그램을디버깅하는것은 bug 또는에러를찾아제거하는과정 일반적으로에러는구문(syntax) 에러나런타임(runtime) 에러의범주에속함 매트랩은상대적으로프로그램이간단하여디버거를사용할필요가없음 프로그램형식 주석부/ 입력부/ 계산부/ 출력부로구성 주석문은파일어느곳에나놓을수있음. 그러나첫번째주석문은 lookfor 라는명령어가찾는라인으로그파일을설명하는핵심어를첫번째줄 (H1) 에둠 => 1 일반적으로주석문은다음의사항을포함하도록함 첫번째줄에프로그램이름과 keyword를씀 2 두번째줄에작성날짜와작성한사람의이름을씀 3 모든입 출력들에대한변수이름을정의. 이때반드시측정단위를명기 4 프로그램이호출하는모든사용자정의함수 입 출력제어 명령어 disp(a) 배열 A의내용을표시 설명 disp('text') 작은따옴표안의 text 문자열을표시 x=input('text') 작은따옴표안의내용을표시하고사용자의입력을기다림 입력된내용은 x에할당
Matlab, Simulink 기본사용법및응용[2014.1].hwp 14 명령어 k=menu('title','op1','op2',...) 문자열변수 설명 title 을제목으로갖는메뉴를표 시하며, 선택옵션은 op1, 'op2' 등이있음 [Ex.5] 메뉴를사용하여그래프마커고르기 k=menu('choose a data marker','o','*','x') [ 예제6] 구의표면적 A는 과같이 에의해결정된다. 사용자가프롬프 트상에서반지름을입력하고표면적을계산한후, 결과를나타내는스크립트파 일을작성하라. 1.5 매트랩도움말시스템 여기서다루지않은다른기능들을알기위해서는도움말을사용할필요있음 1 Help 브라우저 : "Help/MATLAB help" 메뉴를선택혹은툴바의물음표, F1 2 3 1 Help 함수 : 함수 help, lookfor, doc를사용하여특정함수의정보를검색 기타자료들 : demo 프로그램실행, Mathworks사에서제공되는문서등 도움말함수 help 함수 : 특정함수의구문법과동작을알수있는가장기본적인방법 2 lookfor 함수 : 키워드를기반으로한함수의검색, H1 라인을탐색 3 doc 함수 : 도움말브라우저에서문서의시작페이지를나타냄 [Ex.6] 명령창에 help sine, lookfor sine, doc example1 을입력해보라.
Matlab, Simulink 기본사용법및응용[2014.1].hwp 15 Ch.2 숫자, 셀과구조배열 매트랩의장점중하나는배열을하나의변수로처리할수있는것 => 프로그램을간단하게작성가능 2.1 1차원및 2차원숫자배열 1 차원배열 : 벡터; 오직하나의행이나열로구성 => 행벡터 : 원소가수평으로정렬, 열벡터 : 원소가수직으로정렬 벡터의생성 행벡터 : 대괄호안에원소를입력하고콤마로원소를분리 >> g=[3;7;9] g = 3 7 열벡터 : 세미콜론을이용하여만듦. ( 혹은빈칸) 사용예 >> g=[3 7 9]' g = 9 9 >> r=[2 4 20]; w=[9 6 3]; >> u=[r, w] 3 7 >> g=[3 7 9] u = 2 4 20 9 6 3 >> x=[0:2:8] x = 0 2 4 6 8 >> x=[0:2:7] x = 0 2 4 6 >> y=[3:2] y = 3 2 1 0 1 2 >> linspace(5,8,31) Columns 1 through 4 5.0000 5.1000 5.2000 5.3000... >> x= logspace(1,1,4) x = 0.1000 0.4642 2.1544 10.0000 설명 열벡터의생성( 세가지방법) 보통세미콜론을이용하여만 들수있으나, 행벡터를만든후 전치를이용하여만들수도있음 (transpose) 벡터 u는크기가 1X6인벡터 콜론(:) 연산자를이용하면일정한간격 으로원소를갖는큰벡터를생성 x=[m:q:n] 에서첫번째값은 m, nm 이 q의정수배이면마지막값은 n, 그 렇지않으면 n보다작은값이됨 q 값이생략되면 q를 1로간주함 증분 q는음수가될수도있고이경 우 m은 n보다큰값이어야함 명령어 linspace(x1,x2,n) 도선형으로 증가되는행벡터생성, x1와 x2는각각 상한과하한을나타내고 n은원소의 수, 왼쪽예는 [5:0.1:8] 과동일, 원소가로그간격으로된배열, logspace(a,b,n) : n은 과 사이 의원소의수, n 생략시원소 50개
Matlab, Simulink 기본사용법및응용[2014.1].hwp 16 2 차원배열 : 행렬 >> A=[2 4 10;16 3 7] A = 2 4 10 16 3 7 행렬의생성 2행 3 열로된행렬(2X3 행렬) 행렬 A 를 [ ] 로나타내며, 와 는 각각행과열의위치를나타냄 >> a=[1,3,5];b=[7,9,11]; >> c=[a,b] c = 1 3 5 7 9 11 >> D=[a;b] D = 1 3 5 7 9 11 행렬과전치(transpose) 연산 전치연산으로행렬의행과열을바꿀수있음 >> A=[1 2; 3 4] A = 1 2 3 4 >> A' 1 3 2 4 주소지정 배열인덱스를사용하여배열원소의행과열번호로원소의위치를지정 => v(5): 벡터v 에있는다섯번째원소, A(2,3): 행렬A의 2 행, 3열의원소 => 이를이용하여배열의원하는원소만을다룰수있음 => D(1,3)=6 : 행렬 D의 1행 3열의원소를 6으로할당 콜론(:) 연산자를사용하여배열을다양하게선택가능 => v(:) : 벡터 v의모든행또는열의원소를나타냄 => v(2:5) : 벡터 v의두번째원소로부터다섯번째원소까지를나타냄 => A(:,3) : 행렬 A 의세번째열에있는모든원소를나타냄 ( 열벡터) => A(3,:) : 행렬 A 의세번째행에있는모든원소를나타냄 ( 행벡터) => A(:,2:5) : A 의두번째에서다섯번째열에있는모든원소를나타냄( 행렬) => A(2:3,1:3) : 2X3 행렬을나타냄 => v=a(:) : 처음부터끝원소까지를쌓아올린 A의모든열로구성된벡터 => A(end,:), A(:,end) : 각각 A의마지막행과마지막열을나타냄
Matlab, Simulink 기본사용법및응용[2014.1].hwp 17 [Ex.1] 무작정따라하며관찰하기 >> a=[1:9] >> A=reshape(a,3,3) >> A' >> b=a(:,3) >> c=a(2,:) >> D=A(2:3,1:3) >> v=a(:) >> A(end,:) [ 참고] >> A(1,4)=10 A = 1 4 7 10 2 5 8 0 3 6 9 0 >> B=A(:,4:1:1) B = 10 7 4 1 0 8 5 2 0 9 6 3 >> C=A([2,1,2],:) C = 2 5 8 0 1 4 7 10 2 5 8 0 위의행렬 결과가나옴. A에왼쪽과같이입력하면아래의 => A에 4열이없으므로 4열에새로운원소를 받아들이기위해자동으로확장하고나머지는 0 으로채움 콜론연산자를이용하여인덱스를감소시킬수 있음. 왼쪽의예는콜론연산자를이용하여행렬 A 의열의순서가바꿈 행의위치를 렬을수정할수있음 [2,1,2] 과같이정해줌으로써행 유용한배열함수 매트랩에서는배열을다루기위한많은함수가있음 명령어 설명 find(x) 배열 x의 0이아닌원소의인덱스를갖는배열을생성 max(a) A 가벡터이면, 대수적으로가장큰원소의값을반환 A 가행렬이면, 각열에서가장큰원소를갖는행벡터를반환 min(a) max(a) 와같은기능이나최소값을돌려줌 morm(x) 벡터의기하학적길이를계산 size(a) 행렬 A 의크기를갖는행벡터 [m,n] 을반환 sort(a) 배열 A의각열을오름차순으로정렬 sum(a) 배열 A의각열의원소를더하고합으로된행벡터를반환
Matlab, Simulink 기본사용법및응용[2014.1].hwp 18 2.2 다차원숫자배열 매트랩은다차원배열을지원, 자세한사항은 help datatypes 를이용. 함수 cat(n,a,b,c,...) : A, B, C 등을연결시켜 n차원의배열생성 2.3 원소원소연산 >> A=[4 9; 5 7]; 3*A 12 27 15 21 >> A=[6 2;10 3];B=[9 8; 12 14]; >> A+B 15 6 2 17 >> [6, 3]+2 >> [8,3]5 8 5 3 2 >> x=[2 4 5]; y=[7 3 8]; x.*y 14 12 40 >> x=[8,12,15];y=[2,6,5];z=x./y z = 4 2 3 >> x=[1 2 3];y=[2,3,4]; x.^2 1 4 9 >> y.^x 2 9 64 z= exp(y).*sin(x).*(cos(x)).^2 벡터의스칼라곱 행렬 A의각성분에 3을곱함 매트랩에서의곱셈의정의두가지 1 배열곱셈, 2 행렬곱셈 두행렬의덧셈과뺄셈( 배열덧셈) 뺄셈 대응하는원소들끼리의덧셈혹은 덧셈의결합법칙과교환법칙성립 두행렬의사이즈가같아야연산可 스칼라행렬덧셈과뺄셈 배열곱셈 각대응하는원소끼리의 곱셈 : x와 y 가행벡터이면행벡터로, x와 y가열벡터이면열벡터가됨 배열나눗셈( 원소 원소나눗셈) 두배열은반드시크기가같아야함 배열의거듭제곱 x와 y의크기가같아야함
Matlab, Simulink 기본사용법및응용[2014.1].hwp 19 2.4 행렬연산 행렬의덧셈과뺄셈은원소원소의덧셈및뺄셈과같은방법임 => But, 행렬의곱셈과나눗셈은다름 벡터의곱셈 : 두벡터의원소의개수가같으면연산가능 벡터 u와 w의내적(dot product) 은스칼라이며, >> x =[1 2 3]; y =[ 2; 3; 4]; x * y 20 1*2+2*3+3*4=20 벡터행렬곱셈 >> A=[4 9; 5 7]; x=[1; 1]; A * x 5 12 행렬행렬곱셈 : 행렬곱셈에서결합과분배법칙은성립하나교환법칙은아님 두행렬의곱 는 의열의수와 의행의수가같아야정의됨 => (p X q) 과 (q X r) 의행렬곱은 (p X r) 가됨 >> A=[6 2;10 3;4 7]; B=[9 8;5 12]; A * B 64 24 75 116 1 116 [ 참고] 특수행렬 영행렬/ 단위행렬 eye(n) eye(size(a)) nxn 단위행렬 ones(n) 원소 1, nxn zeors(n) nxn 영행렬 A와같은크기 ones(m,n) 원소 1, mxn zeors(m,n) mxn 영행렬 ones(size(a)) A와동일 zeros(size(a)) A와동일
Matlab, Simulink 기본사용법및응용[2014.1].hwp 20 선형대수방정식과역행렬 [Ex.2] 다음연립방정식을매트랩을이용하여풀자 >> A=[6,12,4; 7,2,3; 2,8,9]; b=[70;5;64]; >> x=a b % 혹은 y=inv(a)*b x = 3 5 2 2.5 사용자정의함수 M 파일의다른형식으로함수파일(function file) 이있음 스크립트파일과달리함수파일의모든변수는지역변수로함수내에서만可 함수파일은여러차례반복되는명령에서유용 함수파일을만들때, 첫라인은입력과출력목록을나타내는함수정의라인 => function [output variables] = function_name (input variables) => 출력변수는대괄호로둘러싸야하고( 출력이하나만있을때는선택사항) 입 => 력변수는소괄호로둘러싸야함 함수파일의이름은파일이름과반드시같아야함 예를들어, 함수이름이 drop 인경우, 파일이름은 drop.m으로저장 => 함수정의라인의 function은반드시소문자로표시 [Ex.3] 간단한함수의예 function z = fun (x,y) u = 3 * x ; z = u + 6 * y.^2 ; % fun.m >> x=3; y=7; fun(x,y) 303
Matlab, Simulink 기본사용법및응용[2014.1].hwp 21 Ch.9 Simulink 시뮬링크는매트랩을기반으로만들어졌음, 최근인기가급상승하고있음. 그래픽사용자인터페이스(GUI) 를제공하여블록으로시뮬레이션가능 9.1 시뮬레이션선도( 블록선도) 시뮬레이션선도 : 해결해야할문제의요소를나타내는선도 [Ex.1] 식 를고려 위식의해는 이고, 중간변수 를이용하면 =>, 로생각가능 => 이해는시뮬레이션선도에의해그래픽으로표현가능 => 블록은원인과결과를나타내고화살표는변수를나타냄 => 숫자 10 을포함한블록( 이득블록) 은 를나타냄 => 적분기호를포함한블록( 적분기블록) 은 를나타냄 시뮬레이션선도에사용되는표기와심볼은약간씩다를수있음 => 소자의기호나라플라스변환에서유래되기도함 9.2 시뮬링크소개 명령창에 simulink 를입력하면시뮬링크라이브러리브라우저가열림 새로운모델을만들기위해, 브라우저의종이모양의아이콘을클릭(File/New) 시뮬레이션선도를만들기위해, 라이브러리안의원하는블록을드래그하여 새모델창으로옮겨서블록을연결함. 적당한블록파라미터을지정 시뮬링크모델파일의확장자는.mdl 모델파일을열고, 닫고, 저장하기위해모델창의 File 메뉴를사용 모델을복사, 절단, 붙이기위해 Edit 메뉴를사용 => 물론이기능들은마우스를통해서도사용가능 예제를통해시뮬링크의사용법을배워보자
Matlab, Simulink 기본사용법및응용[2014.1].hwp 22 라이브러리브라우저 모델창(Simulink 창) [Ex.2] 1 2 3 시뮬레이션실행 Sources/Constant( 상수) 를가져옴 Sinks/Scope 를가져옴 블록을연결하고시뮬레이션시작 ( 파형보기 : Scope 창에서쌍안경이용) 블록을가져오기위해, 검색창이용 [ 확인문제] 1 Constant 값바꾸기 2 다양하게시간조절하기
Matlab, Simulink 기본사용법및응용[2014.1].hwp 23 [Ex.3] Step size 1 2 라이브러리에서사인파(Sine Wave) 를찾아가져옴. 10Hz로설정 Scope 와연결하고시뮬레이션 Simulation/Configuration Parameters 를선택 => Simulation time의 Max step size 를충분히작은값(0.01) 으로설정 => 또는 Fixedstep으로설정하여수치를바꿔도됨 => step size 를너무작게하면, 정확도는높아지나시뮬레이션시간길어짐 [ 확인문제] 1 2 다양한주파수에대해실험 => 1, 100 다양한 등 Step size에대해실험 => 1, 0.1, 0.00001 [Ex.4] 4 칙연산 1 2 3 4 5 6 Constant 블록두개를가져와서각각의이름을 a와 b로수정 Math Operation 라이브러리에서 Add 블록을두개가져옴 => 그중하나를 ++ 에서 + 로수정( 빼기연산) 선을연결, 선을연결하고중간에서선을추가하려면 'Ctrl' 을누르며드래그 곱셈과나눗셈블록은 Divide 로검색하여두개를가져옴 => 그중하나를 */ 에서 ** 로수정( 곱셈연산) Scope 로연결하여확인 Display 를검색하여연결 => Scope 는파형을보여주고, Display는결과값을출력
Matlab, Simulink 기본사용법및응용[2014.1].hwp 24 [ 확인문제] 변수 3 개(a,b,c) 를만들어 a+b+c, a*b*c, ab+c, a/b*c 등의다양한계산식을만들어보자 [Ex.5] 여러개의파형을한번에나타낼때버스(Bus) 를사용 1 위상차가다른 Sine 파를각각만들고 2 Bus Creator를검색하여가져옴 3 Scope 를가져와서연결하고시뮬레이션 => 여러개의파형이보임 [Ex.6] 부시스템 : 여러개의복잡한연산을하나의박스로해결 예제로 2개의변수를받아덧셈과뺄셈을출력하는부시스템만들어보자 1 Subsystem 을검색하여가져옴. 블록을더블클릭하면부시스템창이생성 2 주파수가서로다른사인파를연결하여 Scope로확인
Matlab, Simulink 기본사용법및응용[2014.1].hwp 25 부시스템생성하는다른방법 : 먼저블록선도를만든후, 부시스템을만들부 분을지정하고우클릭을눌러메뉴에서 => 만든후에는더블클릭하여수정가능 Create Subsystem 클릭 [Ex.7] 전달함수 (transfer function) 다음전달함수를가지는시스템의스텝응답을확인 1 Step 블록과 Transfer Fcn 블록을검색하여가져옴 2 Step 블록과 Transfer Fcn 블록수정 3 시뮬레이션과그결과파형 [ 확인문제] 어제배운매트랩의결과와비교
Matlab, Simulink 기본사용법및응용[2014.1].hwp 26 [Ex.8] 피드백루프 임의의시스템에대한스텝응답을구하는모델에서피드백루프구현 1 Step, Transfer Fcn, Gain, Add, Scope 블록을불러와서아래와같이연결 2 => Gain 의방향변경은블록을우클릭하여 Format 을변경 아래와같이 Scope에연결하면입력과출력파형을모두관찰가능 3 Multiplot graph 블록을사용하면
Matlab, Simulink 기본사용법및응용[2014.1].hwp 27 [Ex.9] 시뮬링크를사용하여 에서다음문제의해를구하라.,, 문제의해는. 해를구하는과정 1 시뮬링크시작, 새로운모델창열기 2 Source 라이브러리에서 Sine wave 블록을선택하여모델창으로가져옴. 블록을더블클릭하여 Parameters 창을열고 Amplitude를 1 로, Frequency를 1 로 Phase는 0 으로, Sample time은 0으로하고 OK를클릭 3 Math Operation 라이브러리에서 Gain 블록을가져온후, Parameters 창에 서 Gain을 10으로설정 4 Continuous 라이브러리에서 Integrator 블록을가져온후, Parameters 창에 서 Inintial condition을 0 으로설정. ( 초기조건이 0 이므로) 5 Sink 라이브러리에서 Scope를가져옴 6 블록을아래그림과같이배치하고연결. 출력포트로이동하면커서가 한포트에서다른포트로드래그 연결을위해커서를입력포트나 + 로바뀌는데이때마우스왼쪽버튼을누른채 7 Simulation/Configuration Parameters 를선택한후, Solver Stop time을 13 으로설정. 이때 Start time은 0인지확인 8 9 탭을클릭하고 시뮬레이션시작을위해, Simulation/Start 를선택. 또는 Start 아이콘클릭 새뮬레이션이끝나면 Scope 블록을더블클릭하고쌍안경아이콘을클릭 하여자동척도가되도록함. 진폭이 10이고주기가 인사인함수. 그림에문구넣기나인쇄를위해, Scope 블록대신 Workspace 블록을사용.
Matlab, Simulink 기본사용법및응용[2014.1].hwp 28 [Ex.10] 시뮬레이션결과를매트랩 Workspace 로출력하기. => 결과를매트랩함수를이용하여그림을그리거나해석가능 1 Ex.2 의모델을위그림과같이변경 Scope 블록과연결하는화살표를클릭하여 Delete 키로삭제 Sinks 라이브러리의 To Workspace 블록과 Sources 라이브러리의 clock 블록, Signal Routing 라이브러리의 Mux 블록을가져옴 Mux 블록을더블클릭하여입력의수를 2로설정 블록을연결하고 To Workspace 블록의출력변수의이름을 y로변경함 출력 y 의 행 은시뮬레이션시간구간수이고, 열 은블록의입력수임 => Clock이 Mux의두번째입력이므로 y의두번째열은시간임 Clock의 Decimation=1로함 2 시뮬레이션을하면 변수 workspace에 y가나타난것을확인할수있음 3 명령창에다음과같이입력 >> plot(y(:,2),y(:,1)) To Workspace 블록을사용하면시변수 tout를매트랩작업공간에서자동적으 로설정함 (Simulation/Configuration Parameters 메뉴의 Data I/O 에서설정可 ) 참고문헌 1. A concise introduction to Matlab, W. J. Palm III, McGrawHill. 2. Simulink 강좌