Main Content

표현식

변수

다른 대부분의 프로그래밍 언어와 마찬가지로 MATLAB® 언어에서도 수학 표현식을 제공하지만, 대부분의 프로그래밍 언어와 달리 이러한 표현식은 행렬 전체를 포함합니다.

MATLAB에는 데이터형이나 차원의 크기에 대한 선언문이 필요하지 않습니다. MATLAB에서는 새 변수 이름을 발견하면 해당 변수를 자동으로 생성하고 적절한 저장 용량을 할당합니다. 변수가 이미 있는 경우 MATLAB에서는 해당 내용을 변경하고 필요한 경우 새 저장 용량을 할당합니다. 예를 들면 다음과 같습니다.

num_students = 25

이 경우 num_students라는 1×1 행렬이 생성되고 값 25가 행렬의 단일 요소로 저장됩니다. 변수에 대입되는 행렬을 보려면 변수 이름을 입력하기만 하면 됩니다.

변수 이름은 문자로 시작해야 하며, 그 뒤에 임의의 개수의 문자, 자릿수, 밑줄 중 하나가 오는 형태로 구성됩니다. MATLAB에서는 대문자와 소문자를 구별합니다. 따라서 Aa는 동일한 변수가 아닙니다.

변수 이름의 길이는 상관없지만 MATLAB에서는 이름의 처음 N개의 문자만 사용하며 나머지는 무시합니다. 참고로, 여기서 N은 함수 namelengthmax로 반환되는 숫자입니다. 따라서 MATLAB에서 변수를 구분하도록 하려면 변수 이름의 처음 N개 문자 내에서 각 변수 이름을 고유하게 지정해야 합니다.

N = namelengthmax
N =
    63

MATLAB에서는 수를 표현하기 위해 일반적인 십진수 표기법과 함께 소수점과 숫자 앞에 플러스 또는 마이너스 기호를 선택적으로 사용합니다. 과학 표기법에서는 문자 e를 사용하여 10의 거듭제곱 스케일링 인자를 지정합니다. 허수에는 i 또는 j가 접미사로 사용됩니다. 올바른 수의 몇 가지 예는 다음과 같습니다.

3              -99            0.0001
9.6397238      1.60210e-20    6.02252e23
1i             -3.14159j      3e5i

MATLAB 내부에서는 모든 수를 IEEE® 부동소수점 표준에 지정된 long 형식을 사용하여 저장합니다. 부동소수점 숫자는 약 16개 유효 소수점 자릿수의 유한 정밀도와 약 10-308 ~ 10+308의 유한한 범위가 지정되어 있습니다.

double형으로 표현되는 숫자는 최대 정밀도가 52비트입니다. 52보다 높은 정밀도가 요구되는 double형은 정밀도의 일부가 손실됩니다. 예를 들어 다음 코드에서는 서로 다른 두 개의 값이 같은 것으로 표시되는데, 이는 두 값 모두 잘렸기 때문입니다.

x = 36028797018963968;
y = 36028797018963972;
x == y
ans =
      1
정수는 8비트, 16비트, 32비트, 64비트 정밀도를 사용할 수 있습니다. 64비트 정수와 동일한 수를 저장하는 경우 정밀도가 유지됩니다.
x = uint64(36028797018963968);
y = uint64(36028797018963972);
x == y
ans =
      0

MATLAB에서는 복소수의 실수부와 허수부를 저장합니다. 또한 실수부의 크기와 허수부의 크기를 상황에 따라 다른 방식으로 처리합니다. 예를 들어, sort 함수는 크기에 따라 정렬을 실행하고 크기가 같은 경우 위상각을 기준으로 정렬합니다.

sort([3+4i, 4+3i])
ans =
   4.0000 + 3.0000i   3.0000 + 4.0000i

다음은 위상각으로 인한 결과입니다.

angle(3+4i)
ans =
    0.9273
angle(4+3i)
ans =
    0.6435 

“등호” 관계 연산자인 ==를 사용하려면 실수부와 허수부가 모두 같아야 합니다. 그 밖의 이진 관계 연산자 > <, >=, <=는 수의 허수부는 무시하고 실수부만 고려합니다.

행렬 연산자

표현식에는 친숙한 산술 연산자와 순위 규칙이 사용됩니다.

+

덧셈

-

뺄셈

*

곱셈

/

나눗셈

\

왼쪽 나눗셈

^

거듭제곱

'

켤레 복소수 전치

( )

실행 순서 지정

배열 연산자

선형 대수 영역을 벗어나면 행렬은 2차원 숫자형 배열이 됩니다. 배열에 대한 산술 연산은 요소별로 수행됩니다. 즉, 배열과 행렬에 대해 덧셈과 뺄셈은 동일하게 수행되지만 곱셈 연산은 서로 다르게 수행됩니다. MATLAB에서는 곱셈 배열 연산을 위한 표기법의 일부로 점 또는 소수점을 사용합니다.

연산자 목록은 다음과 같습니다.

+

덧셈

-

뺄셈

.*

요소별 곱셈

./

요소별 나눗셈

.\

요소별 왼쪽 나눗셈

.^

요소별 거듭제곱

.'

비켤레 배열 전치

배열 곱셈을 사용하여 뒤러(Durer)의 마방진에 있는 각 수를 제곱하면

A.*A

1에서 16까지의 정수에 대한 제곱을 무작위 순서로 포함한 배열이 생성됩니다.

ans =
   256     9     4   169
    25   100   121    64
    81    36    49   144
    16   225   196     1

테이블 작성

배열 연산은 테이블을 작성하는 데 유용하게 사용할 수 있습니다. n이라는 열 벡터가 있다고 가정해 보겠습니다.

n = (0:9)';

그 다음 아래와 같이 실행합니다.

pows = [n  n.^2  2.^n]

그러면 2의 제곱과 2의 거듭제곱으로 구성된 테이블이 작성됩니다.

pows =
     0     0     1
     1     1     2
     2     4     4
     3     9     8
     4    16    16
     5    25    32
     6    36    64
     7    49   128
     8    64   256
     9    81   512

이러한 기초 수학 함수는 배열에 대해 요소별로 동작을 수행합니다. 따라서 다음을 실행하면

format short g
x = (1:0.1:2)';
logs = [x log10(x)]

다음과 같은 로그 테이블이 작성됩니다.

 logs =
      1.0            0 
      1.1      0.04139
      1.2      0.07918
      1.3      0.11394
      1.4      0.14613
      1.5      0.17609
      1.6      0.20412
      1.7      0.23045
      1.8      0.25527
      1.9      0.27875
      2.0      0.30103

함수

MATLAB에서는 abs, sqrt, exp, sin을 비롯해 매우 다양한 표준 기초 수학 함수를 제공합니다. 음수에 제곱근이나 로그를 사용해도 오류가 발생하지 않습니다. 적절한 복소수 결과가 자동으로 생성됩니다. MATLAB에서는 베셀(Bessel) 함수와 감마 함수를 비롯해 다양한 고급 수학 함수도 제공합니다. 이 함수들의 대부분은 복소수 인수를 받습니다. 기초 수학 함수의 목록을 확인하려면 다음을 입력합니다.

help elfun

더 많은 고급 수학 함수와 행렬 함수의 목록을 확인하려면 다음을 입력합니다.

help specfun
help elmat

sqrtsin 같은 일부 함수는 내장되어 있습니다. 내장 함수는 MATLAB 핵심의 일부이므로 매우 효율적이지만 계산 세부 정보에는 쉽게 액세스할 수 없습니다. 그 밖의 함수는 MATLAB 프로그래밍 언어에 구현되어 있으므로 함수의 세부적인 계산 정보에 액세스할 수 있습니다.

내장 함수와 그 밖의 함수 간에는 몇 가지 차이점이 있습니다. 예를 들어, 내장 함수의 경우 코드를 확인할 수 없습니다. 그 밖의 함수에 대해서는 코드를 확인하고 원하는 경우 수정할 수도 있습니다.

유용한 상수값을 제공하는 여러 가지 특수 함수도 있습니다.

pi

3.14159265...

i

허수 단위, 1

j

i와 동일함

eps

부동소수점 상대 정밀도, ε=252

realmin

최소 부동소수점 숫자, 21022

realmax

최대 부동소수점 숫자, (2ε)21023

Inf

무한대

NaN

숫자가 아님(Not-a-Number)

MATLAB에서 무한대는 0이 아닌 값을 0으로 나누거나 명확히 정의된 표현식을 실행할 때 오버플로 상태, 즉 realmax를 초과하는 경우입니다. NaN은 명확히 정의된 수학적 값이 없는 0/0 또는 Inf-Inf 같은 표현식을 실행하려고 하면 생성됩니다.

함수 이름은 고정되어 있지 않습니다. 따라서 다음과 같이 새 변수로 함수 이름을 덮어쓸 수 있습니다.

eps = 1.e-6

그런 다음 이 값을 이후의 계산에 사용합니다. 다음을 사용하여 원래 함수를 복원할 수 있습니다.

clear eps

표현식 예제

이미 MATLAB 표현식의 여러 가지 예제를 확인해 보았습니다. 다음은 몇 가지 추가적인 예제와 해당 결과 값입니다.

rho = (1+sqrt(5))/2
rho =
    1.6180

a = abs(3+4i)
a =
     5

z = sqrt(besselk(4/3,rho-i))
z =
   0.3730+ 0.3214i

huge = exp(log(realmax))
huge =
  1.7977e+308

toobig = pi*huge
toobig =
   Inf