본문으로 이동

Matlab/기초

위키배움터
자료 정보
진행 상황: 이 자료는 완성되었거나 거의 완성 단계에 있습니다.
교육 수준: 이 자료는 대학교 강의 수준의 자료입니다.
과목 정보: 이 자료는 공학 과목의 자료입니다.
자료 형식: 이 자료는 강의형식의 자료입니다.

여기서는 기본적인 Matlab 사용법과 예제들에 대해서 다루겠습니다.

Hello World

[편집]

시작하기

[편집]

우선 ‘새 스크립트(New Script)’를 눌러서 편집창을 열고 작업하는 것이 좋습니다. Matlab을 설치한 후 처음 실행하면 마주하는 화면이 '명령창(Command Window)'입니다. (명령창에 edit이라고 입력하고 엔터를 눌러도 편집창을 열 수 있습니다.)

이곳에 소스코드를 작성하면 됩니다. 단, 실행에 앞서 반드시 파일을 저장하여야 합니다.

파일 저장

[편집]

파일 이름이 중요합니다. 파일 이름은 변수명을 작성할 때와 같은 규칙을 가집니다. 우선 다음 규칙을 따라주세요.

아직 규칙이 어렵다면 파일 이름을 HelloWorld로 해볼까요?

파일 이름 규칙


  • 시작은 반드시 영문 알파벳으로 해야 합니다.
    참고로, 대소문자를 구분합니다.
  • 두 번째 문자부터는 영문, 숫자, 밑줄(_)을 사용할 수 있습니다.
    ╭( ・ㅂ・)و 파일명이 숫자 학번으로 시작하는 파일은 교수님께 제출해도 실행되지 않습니다. 친구 파일을 복사한 것이 티나서 0점이 될 수도 있습니다.
  • 매트랩에서 사용하는 특수한 몇 가지 키워드는 사용할 수 없습니다.
    명령창에 iskeyword('save') 등과 같이 입력하여 키워드인지 아닌지 검사할 수 있습니다. 결과가 1이라면 키워드, 0이라면 키워드가 아니니 편하게 사용하면 됩니다.
  • 내장함수, 내장변수, 내장상수 같은 것들이 있는데 이런 것들은 파일 이름이나 변수 이름으로 사용할 수 있지만 가급적 지양합니다. 그렇게 할 경우 내장 기능을 잠시 동안 못 쓰게 되기 때문입니다.
  • 최대 63글자까지입니다.

TIP: 매트랩뿐 아니라 어떤 프로그래밍을 하든, 앞으로 폴더 이름에 한글은 최대한 지양하는 것이 좋습니다! 공대생의 교양이라고들 합니다. 간혹 한글 경로(≒폴더) 때문에 일부 기능에서 몇몇 파일에 접근이 안 되는 경우가 생길 수 있습니다.
※ 컴퓨터의 사용자 이름도 마찬가지입니다! 공대생은 영문을 권장합니다.

첫 실행

[편집]

편집창에서 재생 모양 버튼을 누르거나 F5 키를 눌러서 실행할 수 있습니다. 다만 실행할 때 경고창 같은 것이 뜬다면 '현재 폴더로 지정'을 눌러주세요. 이유는 나중에 설명드리는 것이 좋겠습니다. 다음 코드를 실행해 보세요.

disp('Hello, world!')

당신의 컴퓨터가 당신의 세상을 향해 '안녕!' 하고 크게 손을 뻗는 모습이 보이시나요? 당신이 작성한 소스코드로 당신의 컴퓨터가 건네는 첫 인사는 이렇게 "Hello, world!"였습니다.

변수

[편집]

Matlab은 프로그래밍 언어입니다. 그리고 이 프로그래밍은, '변수(Variable)'라고 하는 것들을 기본적인 데이터로 사용하지요. 그렇다면 Matlab에서 변수는 어떤 모양일까요?

Matlab에 입력하는 값들은 행렬에 저장됩니다. 하지만 행렬이라는 용어에 비해 변수를 다루는 일이 어렵지 않습니다. 예를 들어 a=3 즉 a라는 변수에 3이라는 숫자를 집어 넣으면 1X1 크기의 행렬에 3이라는 숫자가 저장됩니다.

방금 전에 '새 스크립트'를 설명드렸지만, 이번에는 매트랩이라고 하는 스크립트 언어의 작동을 조금 더 편하게 이해하기 위해서 명령창으로 돌아가 보겠습니다. Matlab을 켰을 때 나오는 창에서 오른 편에 있는 명령창(Command Window)이 이번에 사용하게 될 창입니다. 키보드에서 무언가를 타이핑하면 명령창에 있는 >> 기호 옆에 내용이 작성됩니다. 엔터를 누르면 >> 줄에 작성한 명령이 바로 실행됩니다.

혹시 위에서 만든 Hello, world! 프로그램의 파일 이름을 기억하고 있나요?
대소문자를 잘 구분해서 명령창에 파일 이름을 확장자 없이 입력하고(예: 파일 이름이 'HelloWorld.m'이면 명령창에 'HelloWorld'를 입력하고) 엔터를 눌러볼까요?
곧바로 실행되는 모습을 확인할 수 있습니다!
매트랩에서는 이처럼 파일 이름도 하나의 명령어처럼 그대로 불러다 사용할 수 있습니다!

이전에 작성한 명령을 다시 실행하려면 키보드의 화살표키(↑)를 이용해 해당 명령을 찾은 후, 엔터 키를 눌러주면 됩니다.

변수 입력하기

[편집]

변수에 넣을 값을 적고 엔터키를 누르면 저장된 변수가 다시 표시됩니다. 만약 엔터키를 눌러도 한 번 더 표시되길 원하지 않는다면 식을 입력한 뒤 끝에 세미콜론(;)을 붙이면 됩니다. 예를 들어서 >> 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
          ^

미리 정의된 수학 변수

[편집]
Matlab 변수 출력 비고
pi >> format long
>> pi
ans = 3.14159265358979
e % GNU Octave에서

>> format long
>> e
ans = 2.71828182845905

 % Matlab에서

자연 상수 e. GNU Octave에선 꼭 exp(x)를 사용할 필요 없음.
Matlab에서는 e가 변수로 사용되므로 자연상수 e를 나타내기 위해서는 exp(1)을 사용해야 한다.
eps >> format long e
>> eps
ans = 2.22044604925031e-016
상대적 정확도(부동소수점 배정밀도)
매트랩의 기본 숫자 자료 타입(double)에서 1.0에서 그 다음 값까지 간격.
즉, 1.0보다 큰 값 중 1.0과 구분되는 가장 작은 값은 1.0+eps, 1.0보다 작은 값 중 1.0과 구분되는 가장 큰 값은 1.0-eps다.
(Double 타입 1.0에서 가장 작은 비트를 1로 켰을 때 변화량이라고 보면 된다. 1.0에서 켤 때와 10.0에서 켤 때와 0.1에서 켤 때 변화량이 다르기 때문에 1.0을 기준으로 한 것.)

가령 1.0과 1.0+eps는 서로 구분이 가능하나, 100과 100+eps는 서로 구분할 수 없다. 프로그래밍 지식이 있어야 이해가 가능한 내용이므로, 여기서는 설명을 생략한다.

realmin >> format long e
>> realmin
ans = 2.2251e-308
Matlab에서 표현 가능한 가장 작은 수
realmax >> format long e
>> realmax
ans = 1.7977e+308
Matlab에서 표현 가능한 가장 큰 수
inf >> inf
ans = Inf
>> Inf
ans = Inf
무한대
i >> format short
>> i
ans = 0 + 1i
허수 단위 i
(그러나 1i, 2i 등 앞에 숫자를 입력하는 것이 더욱 바람직함)
j >> j
ans = 0 + 1i
허수 단위 i와 동일
NaN >> NaN
ans = NaN
Not a number. 수가 아님

사칙 연산

[편집]

사칙 연산은 기본적으로 +, -, *, / 기호를 사용합니다. 지수를 쓸 때는 ^ 를 사용합니다. 보통 계산기에서 하는 사칙 연산의 경우(즉 1X1 크기 이상의 행렬을 이용해 계산하는 것이 아닌, 단순히 숫자끼리 사칙연산을 진행하는 경우)는 일반적인 계산기를 사용하듯 계산을 하면 됩니다.

한 가지 주의점은 계산 순서와 괄호의 사용에 신경써야 한다는 것입니다.

계산 우선 순위

[편집]
  1. 괄호
  2. 거듭제곱
  3. 곱셈, 나눗셈
  4. 덧셈, 뺄셈

예제 1) 을 Matlab에서 입력하려면 어떻게 해야할까?

>> 1+2/3 은 다른 결과가 나온다. 이는 으로 계산된다. 덧셈보다 나눗셈의 우선 순위가 높기 때문이다.

옳게 계산하기 위해서는 >> (1+2)/3으로 계산해 주어야 한다.

예제 2) >> 1/2*3 의 입력 결과는 일까?

아니다. 나눗셈과 곱셈의 우선 순위는 같으므로 앞에 있는 것부터 계산된다. 따라서 으로 계산되고, 결과는 1.5000이 나온다.

>> 1/(2*3)을 해주어야 이 나온다.

예제 3) >> 27^1/3의 결과는 3인가?

아니다. >> 27^1/3은 이므로 9이다. 결과가 3이기 위해선 >> 27^(1/3) 과 같이 괄호로 어느 부분이 지수인지 확실히 해주어야 한다.

내장 수학 함수

[편집]
Matlab 함수 일반 수식 표현
sqrt(x)
nthroot(x, n)
exp(x)
abs(x) |x|
log(x) ln x
log10(x)
factorial(x) x!
sin(x)
cos(x)
tan(x)
cot(x)
(x는 라디안(radian))
sin x
cos x
tan x
cot x
sind(x)
cosd(x)
tand(x)
cotd(x)
(x는 도(degree))
sin x
cos x
tan x
cot x

주의) 는 Matlab에서 sin^2(x)가 아니라 (sin(x))^2으로 해주어야 한다.

>> sin^2(pi)
error: Invalid call to sin.
>> (sin(pi))^2
ans =   1.4997e-032

내장 어림 함수

[편집]
Matlab 함수 설명 비고
round(x) 반올림
fix(x) 소수점 이하 버림 >> 13/5
ans = 2.6000
>> fix(13/5)
ans = 2
ceil(x) 소수점 이하 올림 >> 11/5
ans = 2.2000
>> fix(11/5)
ans = 2
floor(x) x보다 작은 정수 중 최댓값 >> floor(3/2)
ans = 1
>> floor(-3/2)
ans = -2
rem(x,y) x/y의 나머지(remainder) >> rem(8,7)
ans = 1
sign(x) x가 양수면 1
x가 음수면 0
>> sign(-pi)
ans = -1
>> sign(pi)
ans = 1

응용 예제

[편집]

일 때, 가 성립하는지 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 )

실행 결과

sin(x)와 sqrt(1-cos(x)^2)의 차이:
0.0000e+000

덧붙임

[편집]

숫자 출력 형식

[편집]

숫자 출력 형식은 크게 중요하진 않으므로 참고만 하면 됩니다.

명령어 설명 예시
format short 고정 소수점, 다섯 개의 유효숫자로 표시[1]
대략 0.001<수<1000000000 (109) 이외의 범위는 short e 형식으로 표시
>> format short
>> pi
ans = 3.1416

>> 23.1416
ans = 23.142

>> 949.654684984
ans = 949.65

>> eps
ans = 2.2204e-016

>> 0.0009
ans = 9.0000e-004

>> 1000000000-1

ans = 999999999

>> 1000000000
ans = 1.0000e+009

>> 1000000000+1
ans = 1.0000e+009

format long 고정 소수점, 열 다섯 개의 유효숫자로 표시[1] >> format long

>> pi
ans = 3.14159265358979

>> 23.1416
ans = 23.1416000000000

>> 949.654684984
ans = 949.654684984000

>> eps
ans = 2.22044604925031e-016

>> 0.0009
ans = 9.00000000000000e-004

format short e 유효숫자 다섯 개의 과학적 표기법으로 표시[1] >> format short e
>> pi


ans = 3.1416e+000

format long e 유효숫자 열 다섯 개의 과학적 표기법으로 표시[1] >> format long e

>> exp(1)
ans = 2.71828182845905e+000

format short g 유효숫자 다섯 개로, 고정소수점 표시와 부동 소수점 표시 중 보기 편한 방법으로 출력
format long g 유효숫자 열 다섯 개로, 고정소수점 표시와 부동 소수점 표시 중 보기 편한 방법으로 출력
format bank 소수점 이하 두자리까지 표시 >> format bank

>> 290/3
ans = 96.67

format compact 화면에서 빈 줄을 없애서 많은 정보가 표시되게 하기 >> format short e

>> pi
ans = 3.1416e+000
>> format long e
>> exp(1)
ans = 2.71828182845905e+000
>> format bank
>> 290/3
ans = 96.67
>>

format loose 화면에서 빈 줄을 삽입해서 좀더 보기 쉽게 하기

각주

[편집]
  1. 1.0 1.1 1.2 1.3 GNU Octave의 help format 명령어를 사용해서 나온 도움말을 참고

참고한 글, 강의

[편집]