1. MATLAB 개요와 활용 기계공학실험 I 2013년 2학기 MATLAB 시작하기 이장의내용 MATLAB의여러창(window)들의 특성과 목적 기술 스칼라의 산술연산 및 기본 수학함수의 사용. 스칼라 변수들(할당 연산자)의 정의 및 변수들의 사용 방법 스크립트(script) 파일에 대한 소개와 간단한 MATLAB 프로그램의 작성, 저장 및 실행 MATLAB의특징 Interpreter 방식의 언어 Compiler 방식의 언어( C, Pascal, Fortran 등) 수학계산 및 가시화(visualization)에 매우 편리함 선형대수, 데이터 분석, 신호처리, 수치적분 등 많은 과학계산용 내장함 수를 제공함 사용자에 의한 함수 작성이 편리 배우기 쉽고 사용이 편하다. 다양한 분야의 광범위한 Toolbox를제공 1
MATLAB의 데스크탑 창 MATLAB을 실행하면, 데스크탑 창이 열리며, 기본 화면에는 Command Window, Current Directory Window, Command History Window 등세개의작은창이포 함되어 있다. 창의 왼쪽 하단부에 있는 Start 버튼을 이용하여 MATLAB의 여러 도구와 기능에 접근할 수 있다. MATLAB의 데스크탑 창 명령어 창(Command Window) MATLAB을 실행시키면 나타나는 메인 창. Desktop 메뉴 Desktop Layout 메뉴에서 명령어 창의 모양을 선택함. Command Window Only 를 선택하면, 명령어 창 하나만 보임. Default desktop layout Command Window Only 2
Workspace Window 사용된 변수들에 대한 정보 제공 Editor Window 프로그램 작성 및 편집 MATLAB의 여러 창 Toolbar 그림창 그래프 명령어가 실행되면 자동 생성됨 Command History Window 명령어 창에서 입력된 명령어들이 기록 되어 있음 명령어 창에서의 작업 명령어 창은 MATLAB의 메인 창으로 명령어의 실행, 사용자 가 작성한 프로그램의 실행, 다 른창열기, 소프트웨어의 관리 등에 사용된다. 명령어 입력을 위해서는 커서 가 프롬프트 >> 바로 뒤에 놓여야 함 명령어 입력을 위해서는 커서 가 프롬프트 >> 바로 뒤에 놓여야 한다. 명령어를 표시하고 Enter 키를 누르면, 명령어가 실행된다. 항상 직전에 입력 한 명령어만 실행되며, 전에 실행된 다른 것들은 변동이 없다. 명령어 창에서 커서를 윗줄로 옮겨서 이전 명령어를 수정하여 다시 실행시키 는 것은 불가능하다. 3
명령어 창(Command Window)에서의 작업 명령어와 명령어 사이에 콤마(,)를 넣 어여러명령어를한줄에표시할수 있으며, Enter키를 누르면 왼쪽에서 오른쪽 순서대로 명령어가 수행된다. 명령어 창에서 커서를 윗줄로 옮겨서 이전 명령어를 수정하여 다시 실행시 키는 것은 불가능하다. 위쪽 방향키 를 누를 때마다 이전에 입력했던 명령어가 역순으로 프롬프 트 >> 다음에 나타난다. 명령어가 >> 다음에 나타나면, 명령어를 수정하거나 그대로 실행시킬 수 있다. 아래쪽 방향키 는 위쪽 방향키와 반대의 순서대로 이전 명령어들을 불러낼 수 있다. 명령어가 너무 길어 한 줄에 쓸 수 없는 경우, 마침표세개...을 찍고Enter 키 를 누르면 다음 줄에서 이어서 쓸 수 있다(총 4096 글자까지) 세미콜론(;)과 % 표시, clc 명령어 명령어 창에 명령어를 표시하고 Enter 키를 누르면, 명령어가 실행되어 출력이 명령어 창에 표시되는데, 명령어 끝에 세미콜론(;)을 붙이면 출력이 표시되지 않는다. 세미콜론은 결과의 양이 상당히 많거나 결과를 이미 알고 있을 때 유용하다. 여러 명령어를 한 줄에 쓸 때 명령어와 명령어 사이에 콤마 대신 세미콜론을 쓰면 출력이 화면에 표시되지 않는다. 기호 %를 명령어줄제일앞에쓰면이줄은주석문(comment)으로 지정되어 Enter 키를 눌러도 실행이 되지 않는다. 같은 줄에서 명령어 다음에 % 기호와 텍스트를 같이 쓰게 되면, 주석문은 명령어의 수행에 전혀 영향을 주지 않는다. 일반적으로 명령어 창에서 주석문을 붙일 필요는 없으나, 프로그램에서는 기술 할 사항을 추가하거나 프로그램 설명을 위해 종종 주석문을 사용한다. clc 명령어는 명령어 창에서 입력한 명령어들과 결과 출력물들을 지워서 명령 어 창을 깨끗이 만든다. clc 명령어로 이전에 수행된 어떠한 것도 변하지는 않으며, 이전에 정의된 변수들 도 존재하며 재사용이 가능하다. 방향키 를 이용하여 이전 명령어를 불러낼 수 도있다. 4
명령어기록 창(Command History Window) Command History 창은 명령 창에서 그 동안 입력했던 명령어들의 목록을 보 여주며, 현재 명령어 창에서 입력한 명령어 뿐만 아니라 이전에 입력했던 명령 어들도 포함된다. Command History 창에 있는 명령어들은 명령어 창에서 다시 사용할 수 있다. MATLAB은 이전에 입력한 명령어들을 버퍼에 저장하므로 과거 입력기록들을 Command History 창에서 볼 수 있다. Command History 창에서 원하는 명령어를 마우스로 명령어 창으로 끌고 올 수 있으며(dragging), 필요하면 또는 화살표를 이용하여 원하는 위치에서 명 령어를 추가하거나 수정하고 Enter 키를 눌러 실행시킬 수 있다. 명령어기록 창에서 원하는 명령어를 마우스로 더블 클릭(double click)하면 해당 명령어가 바로 실행된다. 명령어기록 창에 있는 명령어들은 원하는 명령어들을 선택한 후 키보드의 delete 키를 누르거나 Edit 메뉴에서 Delete Selection을 선택하여 삭제할 수 있다. 또는 삭제하기 위해 선택한 명령어들 위에서 마우스 우측 버튼을 눌러 나온 팝업메뉴 에서 Delete Selection을선택해도된다. 스칼라산술연산 MATLAB에서 사용하는 산술연산자들의 기호 : 연산 기호 예 덧셈 + 5+3 뺄셈 - 5-3 곱셈 * 5*3 오른쪽 나눗셈 / 5/3 왼쪽 나눗셈 \( ) 5\3(=3/5) 지수연산 ^ 5^3(5 3 을의미함) 주) 한글Windows에서는 \ 가 (키보드의 )로 표시됨 왼쪽 나눗셈을 제외한 나머지 기호들은 대부분의 계산기에서와 같다. 스칼 라의 경우, 왼쪽 나눗셈(left division)은 오른쪽 나눗셈(right division)의 역 수이지만, 배열에 대한 연산(3장참조)에대해서는왼쪽나눗셈이주로사용 된다. 5
스칼라 산술 연산에서의 우선 순위 MATLAB에서의 산술 연산 우선 순위 우선순위 1순위 2순위 3순위 4순위 수학 연산 괄호 괄호가 중첩된 경우, 가장 안쪽의 괄호부터 수행됨 거듭제곱 곱하기, 나누기(우선순위가 동등함) 더하기와 빼기 여러 연산이 포함된 식에서, 우선 순위가 더 높은 연산이 더 낮은 연산보다 먼저 수행된다. 둘 이상의 연산이 같은 우선순위를 가지면, 왼쪽에서 오른쪽으로 식이 수 행된다. 계산 순서를 바꾸기 위해 괄호를 사용할 수 있다. 산술연산 예 MATLAB에서 산술연산은 명령어 창에 수식을 입력한 후 Enter 키를 누르 면 계산이 되며, 그다음두줄에걸쳐 ans= 과결과(답)가 표시된다. >> 7+8/2 % 8/2가 먼저 수행됨 11 >> (7+8)/2 7.5000 >> 4+5/3+2 % 5/3이 먼저 수행됨 7.6667 >> 5^3/2 % 5 3 이 먼저 수행됨 62.5000 >> 27^(1/3)+32^0.2 % 27 (1/3) +32 0.2 5 >> 27^1/3+32^0.2 % (27 1 )/3 + 32 0.2 11 >> 0.7854-(0.7854)^3/(1*2*3)+0.785^5/ (1*2*3*4*5)-(0.785)^7/(1*2*3*4*5*6*7) 0.7071 >> 7/2 3.5000 >> 7\2 % \대신 가 표시됨(한글윈도) 0.2857 >> ans 0.2857 6
출력 형식 MATLAB의 기본(default) 출력 형식은 소수점 이하 네 자리를 가진 고정소수 점(short라고 부름)이다. >> 4+5/3+2 7.6667 기본 출력형식은 format 명령어로 바꿀 수 있으며, format 명령어가 실행된 이 후의 모든 출력은 규정된 형식으로 표시된다. 자세한 형식은 명령어 창에서 help format을 입력하면 알 수 있다. 수를 화면에 표시하는 형식은 MATLAB이 수를 계산하고 저장하는 방법에는 영향을 미치지 않는다. 명령어 설명 예 format short format long 0.001<수 1000인 수를소수점이하네자리수의 고정소수점으로 표시함. 그 외의 범위의 수는 short e 형식으로 표시함. 0.001<수 1000인 수를 소수점 이하 15자리의 고 정소수점으로 표시함. 그 외 범위의 수는 long e의 형식으로 표시함. >> 290/7 41.4286 >> 290/7 41.42857142857143 MATLAB 삼각함수 각이 라디안 단위일 때 삼각함수는 sin(x), cos(x), tan(x), cot(x)이고 역삼각함수는 asin(x), acos(x), atan(x), acot(x)이다. 각이 도(degree) 단위일 때 삼각함수는 sind(x), cosd(x), tand(x), cotd(x)이고 역삼 각함수는 asind(x), acosd(x), atand(x), acotd(x)이다. 쌍곡삼각함수(hyperbolic trigonometric function)는 sinh(x), cosh(x), tanh(x), coth(x)이다. π는 pi로 입력한다. 함수 설명 예 sin(x) sind(x) cos(x) cosd(x) tan(x) tand(x) cot(x) cotd(x) 각도 x의사인(x는 라디안) 각도 x의 사인(x는 도) 각도 x의 코사인(x는라디안) 각도 x의 코사인(x는도) 각도 x의 탄젠트(x는라디안) 각도 x의 탄젠트(x는도) 각도 x의 코탄젠트(x는 라디안) 각도 x의 코탄젠트(x는 도) >> sin(pi/6) 0.5000 >> cosd(30) 0.8660 >> tan(pi/6) 0.5774 >> cotd(30) 1.7321 7
스칼라 변수와 할당 연산자 변수는 한 개의 문자, 또는 여러 문자들(숫자 포함)의 조합으로 이루어진 이름 으로 수치 값이 할당된다. 변수는 데이터를 저장할 메모리 장소의 이름을 나타내며, 새로운 변수가 정의 되면 MATLAB은 배정받은 변수의 값이 저장될 적절한 메모리 공간을 할당 한다. 변수가 사용되면 변수에 저장된 데이터가 사용된다. 변수에 새로운 값이 할당되면, 메모리 위치의 내용이 갱신된다. 할당 연산자(assignment operator) = 는 우측 값을 좌측 변수에 할당한다. variable_name = 수치 값 또는 계산 가능한 식 할당 연산자 =의 좌변은 한 개의 변수이름만을 포함할 수 있다. 우변이 수식인 경우 수치 값이 할당된 변수들은 수식에 포함될 수 있다. Enter 키를 누르면 우변의 수치 값이 변수에 할당되며, MATLAB은다음두줄에걸 쳐 변수와 할당된 값을 화면에 표시한다. >> x=15 % 수 15가변수x에 할당됨 x= 15 >> x=3*x-12 % 새로운 값이 x에 할당됨 x= 33 할당 연산자 >> a=12 % 수 12를 a에 할당함 a= 12 >> B=4 % 수 4를 B에 할당함 B= 4 >> C=(a-B)+40-a/B*10 C= 18 우변의 수식 값을 C에 할당함 명령어 끝에 세미콜론을 붙이고 Enter 키를 누르면, 실행결과가 화면에 출력되지 않 는다. 물론 변수는 메모리에 저장된다. 이미 생성된 변수의 이름을 입력하면 변수와 값이 화면에 출력된다. 같은 줄에 여러 할당문을 쓰려면, 할당문 사이에 콤마 또는 세미콜론을 삽입하며, Enter 키를 누르면 왼쪽에서 오른쪽으로 할당문이 실행되어 결과가 화면에 출력된 다. 콤마 대신 세미콜론을 쓰면 변수는 화면에 출력되지 않는다. >> a=12; >> B=4; >> C=(a-B)+40-a/B*10; >> C C= 18 >> a=12, B=4; C=(a-B)+40-a/B*10 a= 12 C= 18 8
명령창에서 사용하는 일반 명령어 clc exist( var ) quit helpwin help 명령어 lookfor 단어 cd 명령창의 내용을 모두 지운다 (Clears the Command window) var 이름의 파일이나 변수가 있는지 확인한다 MATLAB을끝낸다 도움말 창을 연다 명령창에서 명령어 에 간단한 설명을 보여준다 단어와 관련된 명령어를 찾아준다 (명령어를 잘 모를 때 사용함) 디렉토리 위치를 변경하거나 현재 위치를 알려준다 프로그래밍에서의 = 의 의미 MATLAB을 포함한 프로그래밍 언어에서의 = 부호는 수학에서의 같다 라는 의미보다는 할당(assignment)이나 대체(replacement)의 의 미를 갖는다. 예) >> x=5 % x라는 변수를 만들어 5라는 값을 할당(저장)한다. >> x = x +10 % 현재 x의값에10을 더한 결과를 다시 x에저장하여 기존의 값을 대체한다. = 부호의 의미가 수학과 달리 양변이 같다는 의미가 아니므로 좌변에는 반드시 변수가 와야 하며, 상수나 식이 오게 되면 다음과 같이 에러 메시지 를얻게된다: >> x*2=6??? x*2=6 Error: The expression to the left of the equals sign is not a valid target for an assignment. 9
MATLAB 파일 MATLAB은 명령창에서 명령어를 한 줄씩 직접 수행시키거나 파일에 수행할 모든 명령어를 기록하고 저장한 후 파일을 수행시킬 수 있다. 반복된 명령어들을 수행시켜야 하거나, 어떤 조건이나 앞의 계산결과 에 따라 후속 명령어를 결정해야 하는 경우, 또는 다양한 입력데이터에 대해 같은 일련의 명령어들을 수행해야 하는 경우에는 명령창에서의 대화식 모드는 불편하며 명령어가 저장된 파일을 이용하여 실행시키는 것이 편리하다. MATLAB용파일종류 M 파일,MAT파일,MEX파일,diary파일, 입력데이터용 text M 파일 스크립트(script) 파일과 함수(function) 파일 두 가지가 있으며, 매트 랩에 내장된 Editor나 WINDOWS의 메모장을 이용하여 표준 ASCII 파일로 작성한다. 확장자는 m이다. 예)test.m MATLAB m 파일의 생성 MATLAB 메뉴의 File New M-File을 선택하거나, 메뉴 밑의 Toolbar 에서 아이콘 을 선택하면, Editor창이 실행된다. 이 Editor 창에서 프로 그램을 작성하고 예를 들어 test.m으로 저장을 한 후, 매트랩 명령어 창에 서 >> test 라고 입력하면 프로그램이 수행된다. 10
디렉토리 변경 폴더 찾아보기 아이콘 이나 데스크탑의 Current Directory를 이용하 여 현재 디렉토리를 파일이 저장된 디렉토리로 변경한 후 실행한다. 1차원 배열의 생성 배열은 MATLAB이 데이터를 저장하고 다루기 위해 사용하는 기본적 인 형태로서, 행(row)이나 열(column), 또는 행과 열로 정렬된 수들의 나열이다. 1차원 배열(벡터)로 나타낼 수 있는 예 : 3차원 공간의 한 점 P의좌표가(2,5,6)일때이좌표를 배열 [2 5 6]또는 [2,5,6]으로 나타낼 수 있다. x 어떤 수들의 집합도 벡터로 나타낼 수 있다. 예) 어느 도시의 연도별 인구수에 대한 표에서 연도와인구수를벡터로표시할수있다. >> year = [1984 1986 1988 1990 1992 1994 1996] >> pop = [127 130 136 145 158 178 211]; z P (2,5, 6) y 연 도 1984 1986 1988 1990 1992 1994 1996 인구(백만) 127 130 136 145 158 178 211 11
열벡터(Column vector)의 생성 열벡터(Column vector)를 생성하는 세 가지 방법 꺾은 괄호 속에서 원소 뒤에 세미콜론(;)을입력하면줄이바뀐다. 각 원소 뒤에서 Enter 키를 눌러 바뀐 줄에 새로운 원소를 입력한다. 행벡터 입력을 마친 후 꺾은 괄호 뒤에 따옴표(' )를 입력하여 행벡터를 전치 (transpose)시킨다. >> v = [3; 4; 5] v = 3 4 5 >> v = [3 4 5] v = 3 4 5 >> v = [3 4 5]' v = 3 4 5 일정한 간격으로 커지는 행벡터의 생성 일정한 간격으로 커지는 원소들을 가진 벡터는 콜론(:)을 사용하여생 성한다. variable_name = [m : q : n] or variable_name = (m : q : n) or variable_name = m : q : n m은 첫번째 원소이며, m+q,m+2q, 와같이q씩 커지면서 원소가 생성되고, 최종 원소는 n을 초과할 수 없다. m-n이 q의 정수배이면 최종원소는 n이지만, 그렇지 않으면 n보다 작 은값이된다.n이 생략되면 원소는 1씩 커진다. q가음수인경우m 은 반드시 n보다 커야 한다. >> x = [1:2:8] >> x=(0:0.5:1)*pi x=1 3 5 7 x=0 1.5708 3.1416 >> x=15:-3:8 >> t= -1:0.5:1 x=15 12 9 t=-1.0000-0.5000 0 0.5000 1.0000 12
2차원 배열(행렬)의 생성 2차원 배열은 행렬(matrix)로도 불리며 다수의 행과 열을 갖는다. 세 미콜론(;)이나 엔터(Enter) 키는 새로운 열(row)을 만드는 역할을 하 므로 원소들 끝에 세미콜론을 입력하거나 엔터 키를 누름으로써 원 하는 행렬을 만들 수 있다. 의입력 세미콜론 >> A=[2 4 10; 16 3 7; 8 12 35] A= 2 4 10 16 3 7 8 12 35 Enter 키 >> A=[2 4 10 16 3 7 8 12 35] A= 2 4 10 16 3 7 8 12 35 행렬 원소의 주소 지정 행렬원소의 주소는 원소가 있는 행(row)과 열(column)의 위치이다. 행렬 A에서 A(r, c)는 행렬A의 r번째 열과 c번째 행에 위치한 원소를 나타낸 다. 행렬 A가 이면, A(1,1)=5, A(2,2)=1, A(3,3)=3이다. >>A=[51098;181711;291436]; %3x4 행렬을 생성함 >> A(3,1)=13 % 위치 (3,1)의 원소에 새로운 값을 할당함 A= 5 10 9 8 18 1 7 11 13 14 3 6 >> A(2,1) = A(2,1)-A(2,4) % 수학식에 원소를 사용함 A= 5 10 9 8 7 1 7 11 13 14 3 6 13
행렬의 덧셈과 뺄셈 같은 크기의(같은 행과 열의 수를 가진) 배열들에 대한 덧셈과 곱셈은 같은 위치의 원소들을 더하거나 빼서 구한다. >> v = [3 6 2]; w=[9-1 5]; >> z = v + w z = 12 5 7 >> A=[2-3 7; 8 4 5]; >> B=[10 7 4; -11 15 1]; >> C = A - B C = -8-10 3 19-11 4 >> D = A + B D = 12 4 11-3 19 6 >> D-2 10 2 9-5 17 4 >> C * 2-16 -20 6 38-22 8 행렬의 덧셈이나 뺄셈에 스칼라가 포함된 경우, 행렬 의모든원소에스 칼라를 더하거나 뺀다. 배열의 곱셈 MATLAB에서 행렬의 곱은 선형대수의 규칙에 따라 행해진다. >> A = [ 1 4 3; 2 6 1; 5 2 8]; >> B = [5 4; 1 3; 2 6]; >> C = A*B T = 15 34 18 32 43 74 >> D = B*A??? Error using ==> mtimes Inner matrix dimensions must agree. 14
PLOT 명령어 정보를 표현하는 데 그래프는 매우 유용한 도구이다. MATLAB에는 여러 유형의 그래프를 생성하는 데 사용할 수 있는 많은 명령어들이 있다. 그래프 종류 : 선형축 표준 그래프, 로그 및 세미로그 축 그래프, 극좌표 그 래프, 막대그래프 및 계단그래프, 3차원 윤곽 표면 및 망 그래프 등 그래프 형식지정 : 선 형태(직선, 파선 등), 색깔, 두께 등 지정. 그래프의 제 목과 텍스트 설명, 데이터 표식(marker)과 격자선(grid line) 추가. 여러 개의 곡선을 한 그래프에 표시하기, 여러 그래프를 한 페이지에 나타내기. 범례 (legend) 표시하기 등. 이 장에서는 MATLAB을 이용하여 여러 유형의 2차원 그래프를 생성하고 그래프의 형식을 지정하는 방법에 대해 기술한다. 그래프구성요소 Figure window title number Figure window title Plot title Legend Marker Y axis label Text label X axis label 15
그래프 생성 프로그램 예 x=[10:0.1:22]; y=95000./x.^2; xd=[10:2:22]; yd=[950 640 460 340 250 180 140]; plot(x,y, '-', 'LineWidth', 1.0) xlabel('\fontname{돋움}거리(cm)') ylabel('\fontname{돋움}세기(lux)') axis([8 24 0 1200]) title('\fontname{바탕}\bf거리 함수인 빛의 세기', 'FontSize',14) text(14,700,'\fontname{돋움}이론과 실험의 비교', 'EdgeColor','r','LineWidth',2) grid on, hold on plot(xd, yd, 'ro--', 'LineWidth', 1.0, 'MarkerSize', 10) legend('\fontname{돋움}이론', '\fontname{돋움}실험', 0) set(gcf, 'Name', 'Fig. 5-8') %set(,'numbertitle', 'off') hold off PLOT 명령어 2차원 그래프를 생성하는 데 사용되는 plot 명령어의 형식 : plot(x, y) x:x 좌표값들을 가진 벡터 y:y 좌표값들을 가진 벡터 x, y 두 벡터로부터 형성되는 순서쌍을 그래프에 점으로 나타내고 점들 을 직선으로 잇는다. 그래프 예 >> x=[1 2 3 5 7 7.5 8 10]; >> y=[2 6.5 7 7 5.5 4 6 8]; >> plot(x, y), grid on 그래프의 기본 선 색깔은 파란색이다. 16
함수의 그래프 그리기 plot 명령어로 함수 y=f(x)를 그리기 함수의정의역에대한x 값벡터를생성한다. 원소별 연산을 이용하여 x 값 벡터에서의 f(x) 값들을 구하여 벡터 y를생성한다. 생성된 두 벡터로부터 plot 명령어로 그래프를 그린다. 예) 정의역 -2 x 4에대한함수y=3.5-0.5x cos(6x)의 그래프 >> x=[-2:0.3:4]; >> y=3.5.^(-0.5*x).*cos(6*x); >> plot(x, y) 벡터 x의원소간격을 미세하게 생성함 >> x=[-2:0.01:4]; >> y=3.5.^(-0.5*x).*cos(6*x); >> plot(x, y) 그래프의 붙여넣기 그림 창(Figure Window)의 Edit 메뉴에서 Copy Figure를 선택하면, 그래프가 클립보드로 복사되어 다른 응용프로그램에서 붙여넣기로 삽입할 수 있다. 붙여넣기로 그림 삽입 17