표현식
변수
다른 대부분의 프로그래밍 언어와 마찬가지로 MATLAB® 언어에서도 수학 표현식을 제공하지만, 대부분의 프로그래밍 언어와 달리 이러한 표현식은 행렬 전체를 포함합니다.
MATLAB에는 데이터형이나 차원의 크기에 대한 선언문이 필요하지 않습니다. MATLAB에서는 새 변수 이름을 발견하면 해당 변수를 자동으로 생성하고 적절한 저장 용량을 할당합니다. 변수가 이미 있는 경우 MATLAB에서는 해당 내용을 변경하고 필요한 경우 새 저장 용량을 할당합니다. 예를 들면 다음과 같습니다.
num_students = 25
이 경우 num_students
라는 1×1 행렬이 생성되고 값 25가 행렬의 단일 요소로 저장됩니다. 변수에 대입되는 행렬을 보려면 변수 이름을 입력하기만 하면 됩니다.
변수 이름은 문자로 시작해야 하며, 그 뒤에 임의의 개수의 문자, 자릿수, 밑줄 중 하나가 오는 형태로 구성됩니다. MATLAB에서는 대문자와 소문자를 구별합니다. 따라서 A
와 a
는 동일한 변수가 아닙니다.
변수 이름의 길이는 상관없지만 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
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
sqrt
와 sin
같은 일부 함수는 내장되어 있습니다. 내장 함수는 MATLAB 핵심의 일부이므로 매우 효율적이지만 계산 세부 정보에는 쉽게 액세스할 수 없습니다. 그 밖의 함수는 MATLAB 프로그래밍 언어에 구현되어 있으므로 함수의 세부적인 계산 정보에 액세스할 수 있습니다.
내장 함수와 그 밖의 함수 간에는 몇 가지 차이점이 있습니다. 예를 들어, 내장 함수의 경우 코드를 확인할 수 없습니다. 그 밖의 함수에 대해서는 코드를 확인하고 원하는 경우 수정할 수도 있습니다.
유용한 상수값을 제공하는 여러 가지 특수 함수도 있습니다.
3.14159265... | |
허수 단위, | |
| |
부동소수점 상대 정밀도, | |
최소 부동소수점 숫자, | |
최대 부동소수점 숫자, | |
무한대 | |
숫자가 아님(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