Matlab/기초 문서 원본 보기
←
Matlab/기초
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{상태상자|진행완료|대학 강의|공학|강의형}} 여기서는 기본적인 Matlab 사용법과 예제들에 대해서 다루겠습니다. == Hello World == === 시작하기 === 우선 '''‘새 스크립트(New Script)’'''를 눌러서 편집창을 열고 작업하는 것이 좋습니다. Matlab을 설치한 후 처음 실행하면 마주하는 화면이 '명령창(Command Window)'입니다. (명령창에 edit이라고 입력하고 엔터를 눌러도 편집창을 열 수 있습니다.) 이곳에 소스코드를 작성하면 됩니다. 단, 실행에 앞서 반드시 파일을 저장하여야 합니다. === 파일 저장 === 파일 이름이 중요합니다. 파일 이름은 변수명을 작성할 때와 같은 규칙을 가집니다. 우선 다음 규칙을 따라주세요. 아직 규칙이 어렵다면 파일 이름을 <span style="border-radius: 20px; box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); /* font */ color: #8AAD; font-weight: bold; >HelloWorld</span>로 해볼까요? <div style="border-radius: 20px; box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); background-color: #F2F3F4; padding: 3px; width: 630px;"> <div class="toccolours mw-collapsible mw-collapsed" style="width: 200px; background: none; border: none;"> '''파일 이름 규칙''' <div class="mw-collapsible-content" style="width: 600px;"> ---- * 시작은 반드시 영문 '''알파벳'''으로 해야 합니다. *: 참고로, 대소문자를 구분합니다. * 두 번째 문자부터는 '''영문, 숫자, 밑줄(_)'''을 사용할 수 있습니다. *: ╭( ・ㅂ・)و 파일명이 숫자 학번으로 시작하는 파일은 교수님께 제출해도 실행되지 않습니다. 친구 파일을 복사한 것이 티나서 0점이 될 수도 있습니다. * 매트랩에서 사용하는 특수한 몇 가지 키워드는 사용할 수 없습니다. *: 명령창에 iskeyword('save') 등과 같이 입력하여 키워드인지 아닌지 검사할 수 있습니다. 결과가 1이라면 키워드, 0이라면 키워드가 아니니 편하게 사용하면 됩니다. * 내장함수, 내장변수, 내장상수 같은 것들이 있는데 이런 것들은 파일 이름이나 변수 이름으로 사용할 수 있지만 가급적 지양합니다. 그렇게 할 경우 내장 기능을 잠시 동안 못 쓰게 되기 때문입니다. * 최대 63글자까지입니다. <span style="font-size: 80% !important; font-weight: 900;">TIP: 매트랩뿐 아니라 어떤 프로그래밍을 하든, 앞으로 폴더 이름에 한글은 최대한 지양하는 것이 좋습니다! 공대생의 교양이라고들 합니다. 간혹 한글 경로(≒폴더) 때문에 일부 기능에서 몇몇 파일에 접근이 안 되는 경우가 생길 수 있습니다.<br>※ 컴퓨터의 사용자 이름도 마찬가지입니다! 공대생은 영문을 권장합니다.</span> </div> </div> </div> === 첫 실행 === 편집창에서 재생 모양 버튼을 누르거나 F5 키를 눌러서 실행할 수 있습니다. 다만 실행할 때 경고창 같은 것이 뜬다면 '현재 폴더로 지정'을 눌러주세요. 이유는 나중에 설명드리는 것이 좋겠습니다. 다음 코드를 실행해 보세요. <syntaxhighlight lang="matlab"> disp('Hello, world!') </syntaxhighlight> 당신의 컴퓨터가 당신의 세상을 향해 '안녕!' 하고 크게 손을 뻗는 모습이 보이시나요? 당신이 작성한 소스코드로 당신의 컴퓨터가 건네는 첫 인사는 이렇게 "Hello, world!"였습니다. == 변수 == Matlab은 프로그래밍 언어입니다. 그리고 이 프로그래밍은, '변수(Variable)'라고 하는 것들을 기본적인 데이터로 사용하지요. 그렇다면 Matlab에서 변수는 어떤 모양일까요? Matlab에 입력하는 값들은 [[w:행렬|행렬]]에 저장됩니다. 하지만 행렬이라는 용어에 비해 변수를 다루는 일이 어렵지 않습니다. 예를 들어 a=3 즉 a라는 변수에 3이라는 숫자를 집어 넣으면 1X1 크기의 행렬에 3이라는 숫자가 저장됩니다. 방금 전에 '새 스크립트'를 설명드렸지만, 이번에는 매트랩이라고 하는 스크립트 언어의 작동을 조금 더 편하게 이해하기 위해서 명령창으로 돌아가 보겠습니다. [[w:MATLAB|Matlab]]을 켰을 때 나오는 창에서 오른 편에 있는 명령창(Command Window)이 이번에 사용하게 될 창입니다. 키보드에서 무언가를 타이핑하면 명령창에 있는 >> 기호 옆에 내용이 작성됩니다. 엔터를 누르면 >> 줄에 작성한 명령이 바로 실행됩니다. <div style="display: flex; flex-direction: column; justify-content: center; background-color: #F2F3F4; width: 90%; padding: 15px; align-items: left; border-radius: 20px; box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); /* font */ color: #8AAD; font-weight: bold; margin: auto; margin-top: 15px; margin-bottom: 15px; > 혹시 위에서 만든 Hello, world! 프로그램의 파일 이름을 기억하고 있나요? <br> 대소문자를 잘 구분해서 명령창에 파일 이름을 확장자 없이 입력하고(예: 파일 이름이 'HelloWorld.m'이면 명령창에 'HelloWorld'를 입력하고) 엔터를 눌러볼까요?<br> 곧바로 실행되는 모습을 확인할 수 있습니다!<br> 매트랩에서는 이처럼 파일 이름도 하나의 명령어처럼 그대로 불러다 사용할 수 있습니다!<br> </div> 이전에 작성한 명령을 다시 실행하려면 키보드의 화살표키(↑)를 이용해 해당 명령을 찾은 후, 엔터 키를 눌러주면 됩니다. === 변수 입력하기 === 변수에 넣을 값을 적고 엔터키를 누르면 저장된 변수가 다시 표시됩니다. 만약 엔터키를 눌러도 한 번 더 표시되길 원하지 않는다면 식을 입력한 뒤 끝에 세미콜론(;)을 붙이면 됩니다. 예를 들어서 >> a=1 하고 엔터를 치면 a = 1 이라고 다시 출력이 되게 되는데, >> a=1; 하고 엔터를 친다면, 다음 줄엔 아무것도 표시되지 않고 >> 만 나옵니다. >> a=1 a = 1 >> a=1; >> 여러 변수를 여러 줄에 걸쳐 입력할 필요는 없습니다. 한 줄에 여러 변수를 입력하려면 콤마(,)나 세미콜론(;)으로 구분해주면 됩니다. >> a=1, b=2, c=3; d=4; a = 1 b = 2 여기서는 세미콜론(;)이 뒤에 붙은 식들만 출력되지 않았습니다. 출력되지 않는다고 값이 저장되지 않은 건 아닙니다. 이 상태에서 다시 c에 들어있는 값을 알아보기 위해 >> c를 타이핑하고 엔터를 눌러보면 값이 있는지 확인할 수 있습니다. >> c c = 3 ==== 변수 이름 지정 ==== 변수 이름은 앞서 말한 파일 이름 작성 규칙과 같습니다. 중요한 건 반드시 영문 알파벳으로 시작해야 하고, 영문, 숫자, 밑줄 글자(_)만 포함할 수 있습니다. 소문자와 대문자는 Matlab이 다르게 인식하므로 주의해야 합니다. 내장함수 이름을 변수에 사용하는 건 조심하세요. 어떤 것이 변수명으로 사용 가능한지, 어떤 것이 안 되는지 예시로 살펴보겠습니다. 참고) 하나의 명령어 줄에서 % 이후의 내용은 주석 처리 되는 것으로, Matlab이 처리하지 않는 부분입니다. 편의 상 사람들끼리 알아볼 설명문을 집어 넣을 때 사용합니다. 아마 편집창에서 더욱 유용하게 사용하겠지요. 예시 >> a_2=23 %available a_2 = 23 >> a 3=23 %non available error: 'a' undefined near line 1 column 1 >> a.3=23 %non available parse error: syntax error >>> a.3=23 %non available ^ >> Matlab=23 %Capital letter Matlab = 23 >> matlab=555 %non capital letter matlab = 555 >> matlab-Matlab % is not zero. 'Matlab' is different from 'matlab' ans = 532 >> matlab@2=999 %non available because of @ parse error: syntax error >>> matlab@2=999 ^ ==== 미리 정의된 수학 변수 ==== {| class="wikitable" |- ! Matlab 변수 ! 출력 ! 비고 |- | pi || >> format long<br > >> pi<br>ans = 3.14159265358979 || |- | e | % GNU Octave에서<br><br>>> format long<br > >> e<br > ans = 2.71828182845905<br><br > % Matlab에서<br><br > [[파일:Matlab e.png]] | 자연 상수 e. GNU Octave에선 꼭 exp(x)를 사용할 필요 없음.<br > Matlab에서는 e가 변수로 사용되므로 자연상수 e를 나타내기 위해서는 exp(1)을 사용해야 한다. |- | eps | >> format long e<br > >> eps<br>ans = 2.22044604925031e-016 | 상대적 정확도(부동소수점 배정밀도)<br ><math>\,\! 2.2204 \times 10^{-16}</math> <div style="display: flex; flex-direction: column; justify-content: center; background-color: #F2F3F4; width: 90%; padding: 15px; align-items: center; border-radius: 20px; box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); /* font */ color: #8AAD; font-weight: bold; margin: auto; margin-top: 15px; margin-bottom: 15px; > 매트랩의 기본 숫자 자료 타입(double)에서 1.0에서 그 다음 값까지 간격.<br > 즉, 1.0보다 큰 값 중 1.0과 구분되는 가장 작은 값은 1.0+eps, 1.0보다 작은 값 중 1.0과 구분되는 가장 큰 값은 1.0-eps다.<br> <pre style="all: unset; color: #454545BB; font-size: 80%; font-weight: 700;">(Double 타입 1.0에서 가장 작은 비트를 1로 켰을 때 변화량이라고 보면 된다. 1.0에서 켤 때와 10.0에서 켤 때와 0.1에서 켤 때 변화량이 다르기 때문에 1.0을 기준으로 한 것.)</pre> </div> <p>가령 1.0과 1.0+eps는 서로 구분이 가능하나, 100과 100+eps는 서로 구분할 수 없다. 프로그래밍 지식이 있어야 이해가 가능한 내용이므로, 여기서는 설명을 생략한다.</p> |- | realmin | >> format long e<br>>> realmin<br>ans = 2.2251e-308 | Matlab에서 표현 가능한 가장 작은 수<br > <math>\,\! 2.2251 \times 10^{-308}</math> |- | realmax | >> format long e<br>>> realmax<br>ans = 1.7977e+308 | Matlab에서 표현 가능한 가장 큰 수<br > <math>\,\! 1.7977 \times 10^{308}</math> |- | inf | >> inf<br>ans = Inf<br>>> Inf<br>ans = Inf | 무한대 |- | i | >> format short<br > >> i<br>ans = 0 + 1i | 허수 단위 i<br>(그러나 1i, 2i 등 앞에 숫자를 입력하는 것이 더욱 바람직함) |- | j | >> j<br>ans = 0 + 1i | 허수 단위 i와 동일 |- | NaN | >> NaN<br > ans = NaN | Not a number. 수가 아님 |} == 사칙 연산 == 사칙 연산은 기본적으로 +, -, *, / 기호를 사용합니다. 지수를 쓸 때는 ^ 를 사용합니다. 보통 계산기에서 하는 사칙 연산의 경우(즉 1X1 크기 이상의 행렬을 이용해 계산하는 것이 아닌, 단순히 숫자끼리 사칙연산을 진행하는 경우)는 일반적인 계산기를 사용하듯 계산을 하면 됩니다. 한 가지 주의점은 계산 순서와 괄호의 사용에 신경써야 한다는 것입니다. === 계산 우선 순위 === # 괄호 # 거듭제곱 # 곱셈, 나눗셈 # 덧셈, 뺄셈 '''예제 1)''' <math>\frac{1+2}{3}</math>을 Matlab에서 입력하려면 어떻게 해야할까? >> 1+2/3 은 다른 결과가 나온다. 이는 <math>1+\frac{2}{3}</math>으로 계산된다. 덧셈보다 나눗셈의 우선 순위가 높기 때문이다. 옳게 계산하기 위해서는 >> (1+2)/3으로 계산해 주어야 한다. '''예제 2)''' >> 1/2*3 의 입력 결과는 <math>\frac{1}{2\times 3}</math>일까? 아니다. 나눗셈과 곱셈의 우선 순위는 같으므로 앞에 있는 것부터 계산된다. 따라서 <math>\frac{1}{2}\times 3</math>으로 계산되고, 결과는 1.5000이 나온다. >> 1/(2*3)을 해주어야 <math>\frac{1}{2\times 3}</math>이 나온다. '''예제 3)''' >> 27^1/3의 결과는 3인가? 아니다. >> 27^1/3은 <math>\frac{27^1}{3}</math>이므로 9이다. 결과가 3이기 위해선 >> 27^(1/3) 과 같이 괄호로 어느 부분이 지수인지 확실히 해주어야 한다. == 내장 수학 함수 == {| class="wikitable" |- ! Matlab 함수 !! 일반 수식 표현 |- | sqrt(x) || <math>\sqrt{x}</math> |- | nthroot(x, n) || <math>\sqrt[n]{x}</math> |- | exp(x) || <math>e^x</math> |- | abs(x) || <nowiki>|x|</nowiki> |- | log(x) || ln x |- | log10(x) || <math>log_{10}x</math> |- | factorial(x) || x! |- | sin(x) <br> cos(x) <br> tan(x) <br> cot(x) <br> (x는 라디안(radian)) || sin x <br> cos x <br> tan x <br> cot x |- | sind(x) <br> cosd(x) <br> tand(x) <br> cotd(x) <br> (x는 도(degree)) || sin x <br> cos x <br> tan x <br> cot x |} '''주의)''' <math>sin^2 x</math>는 Matlab에서 sin^2(x)가 '''아니라''' (sin(x))^2으로 해주어야 한다. >> sin^2(pi) error: Invalid call to sin. >> (sin(pi))^2 ans = 1.4997e-032 == 내장 어림 함수 == {| class="wikitable" |- ! Matlab 함수 !! 설명 !! 비고 |- | round(x) || 반올림 || |- | fix(x) || 소수점 이하 버림 || >> 13/5 <br> ans = 2.6000 <br>>> fix(13/5) <br> ans = 2 |- | ceil(x) || 소수점 이하 올림 || >> 11/5 <br> ans = 2.2000 <br>>> fix(11/5) <br> ans = 2 |- | floor(x) || x보다 작은 정수 중 최댓값 || >> floor(3/2)<br>ans = 1<br>>> floor(-3/2)<br>ans = -2 |- | rem(x,y) || x/y의 나머지(remainder) || >> rem(8,7)<br>ans = 1 |- | sign(x) || x가 양수면 1<br>x가 음수면 0 || >> sign(-pi)<br>ans = -1<br>>> sign(pi)<br>ans = 1 |} == 응용 예제 == <math>x=\frac{\pi}{5}</math>일 때, <math>sin x=\sqrt{1-cos^2 x}</math>가 성립하는지 Matlab을 통해 확인해보자. (풀이) <syntaxhighlight lang="matlab">clear, clc % 각각의 파일에 습관적으로 첫 줄로 넣어준다고 생각하세요. 설명은 다음에! x = pi / 5; a = sin(x); b = sqrt( 1- cos(x)^2 ); disp( 'sin(x)와 sqrt(1-cos(x)^2)의 차이: ') disp( a-b ) </syntaxhighlight> 실행 결과 sin(x)와 sqrt(1-cos(x)^2)의 차이: 0.0000e+000 == 덧붙임 == === 숫자 출력 형식 === 숫자 출력 형식은 크게 중요하진 않으므로 참고만 하면 됩니다. {| class="wikitable" |- ! 명령어 !! 설명 !! 예시 |- | format short || 고정 소수점, 다섯 개의 [[w:유효숫자|유효숫자]]로 표시<ref name="help format">GNU Octave의 help format 명령어를 사용해서 나온 도움말을 참고</ref><br>대략 0.001<수<1000000000 (10<sup>9</sup>) 이외의 범위는 short e 형식으로 표시 ||>> format short<br> >> pi<br>ans = 3.1416<br><br>>> 23.1416<br>ans = 23.142<br><br>>> 949.654684984<br>ans = 949.65<br><br>>> eps<br>ans = 2.2204e-016<br><br>>> 0.0009<br>ans = 9.0000e-004<br><br>>> 1000000000-1<br> ans = 999999999<br><br> >> 1000000000<br> ans = 1.0000e+009<br><br> >> 1000000000+1<br> ans = 1.0000e+009 |- | format long || 고정 소수점, 열 다섯 개의 [[w:유효숫자|유효숫자]]로 표시<ref name="help format"/> || >> format long<br> >> pi<br> ans = 3.14159265358979<br><br> >> 23.1416<br> ans = 23.1416000000000<br><br> >> 949.654684984<br> ans = 949.654684984000<br><br> >> eps<br> ans = 2.22044604925031e-016<br><br> >> 0.0009<br> ans = 9.00000000000000e-004 |- | format short e || 유효숫자 다섯 개의 과학적 표기법으로 표시<ref name="help format"/> || >> format short e<br>>> pi <br>ans = 3.1416e+000 |- | format long e || 유효숫자 열 다섯 개의 과학적 표기법으로 표시<ref name="help format"/> || >> format long e<br> >> exp(1)<br> ans = 2.71828182845905e+000 |- | format short g || 유효숫자 다섯 개로, 고정소수점 표시와 부동 소수점 표시 중 보기 편한 방법으로 출력 || |- | format long g || 유효숫자 열 다섯 개로, 고정소수점 표시와 부동 소수점 표시 중 보기 편한 방법으로 출력 || |- | format bank || 소수점 이하 두자리까지 표시 || >> format bank<br> >> 290/3<br> ans = 96.67 |- | format compact || 화면에서 빈 줄을 없애서 많은 정보가 표시되게 하기 ||>> format short e<br> >> pi<br> ans = 3.1416e+000<br> >> format long e<br> >> exp(1)<br> ans = 2.71828182845905e+000<br> >> format bank<br> >> 290/3<br> ans = 96.67<br> >> |- | format loose || 화면에서 빈 줄을 삽입해서 좀더 보기 쉽게 하기 || |} == 각주 == <references/> == 참고한 글, 강의 == * [https://kr.mathworks.com/support.html?s_tid=gn_supp Matlab 공식 도움말 리소스] * [http://studymake.tistory.com/365 스터디메이크 Matlab 강좌] * 충북대 수치해석 강의
이 문서에서 사용한 틀:
틀:상태상자
(
원본 보기
)
Matlab/기초
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보