기본 행렬 연산
이 예제에서는 MATLAB® 언어에서 행렬을 다루는 데 필요한 기본적인 기법과 함수를 보여줍니다.
먼저 9개의 요소를 사용하여 a
라는 간단한 벡터를 만들어 보겠습니다.
a = [1 2 3 4 6 4 3 4 5]
a = 1×9
1 2 3 4 6 4 3 4 5
이제 벡터 a
의 각 요소에 2를 더한 다음 결과를 새 벡터로 저장하겠습니다.
아래와 같이 MATLAB에서는 벡터와 행렬을 특별한 방식으로 계산할 필요가 없습니다.
b = a + 2
b = 1×9
3 4 5 6 8 6 5 6 7
MATLAB에서는 명령 하나로 간단히 그래프를 만들 수 있습니다. 위에서 벡터의 각 요소에 2를 더한 결과를 플로팅해 보겠습니다. 그리드 선도 설정합니다.
plot(b)
grid on
MATLAB에서는 축 레이블이 추가된 그래프 유형으로도 만들 수 있습니다.
bar(b) xlabel('Sample #') ylabel('Pounds')
MATLAB에서는 플롯에 기호도 사용할 수 있습니다. 아래의 예시에서는 별표를 사용하여 점을 표시합니다. MATLAB에서는 이 외에도 다양한 종류의 기호와 선을 사용할 수 있습니다.
plot(b,'*')
axis([0 10 0 10])
MATLAB의 강점 중 하나는 행렬 계산입니다.
행렬은 벡터를 만드는 것처럼 간단히 만들 수 있으며, 행렬의 행은 세미콜론(;)을 사용하여 구분합니다.
A = [1 2 0; 2 5 -1; 4 10 -1]
A = 3×3
1 2 0
2 5 -1
4 10 -1
행렬 A
의 전치도 쉽게 구할 수 있습니다.
B = A'
B = 3×3
1 2 4
2 5 10
0 -1 -1
이제 이 두 행렬을 곱해 보겠습니다.
앞에서 이미 언급했듯이, MATLAB에서는 행렬을 숫자의 모음으로 처리할 필요가 없습니다. 사용자가 행렬을 다루면 MATLAB에서는 그 방식을 인식하고 그에 맞추어 계산 방식을 조정합니다.
C = A * B
C = 3×3
5 12 24
12 30 59
24 59 117
행렬을 곱셈하는 방식 대신 두 행렬 또는 벡터의 대응하는 요소끼리 곱하려면 .* 연산자를 사용합니다.
C = A .* B
C = 3×3
1 4 0
4 25 -10
0 -10 1
방정식 A*x = b를 푸는 데 행렬 A를 사용해 보겠습니다. 즉, \(백슬래시) 연산자를 사용해 풀 수 있습니다.
b = [1;3;5]
b = 3×1
1
3
5
x = A\b
x = 3×1
1
0
-1
이제 A*x가 b와 같음을 검증해 볼 수 있습니다.
r = A*x - b
r = 3×1
0
0
0
MATLAB에는 일반 행렬 계산에 사용할 수 있는 거의 모든 유형의 함수가 제공됩니다.
다음과 같이 고유값을 구할 수 있는 함수뿐 아니라
eig(A)
ans = 3×1
3.7321
0.2679
1.0000
... 특이값을 구할 수 있는 함수도 있습니다.
svd(A)
ans = 3×1
12.3171
0.5149
0.1577
"poly" 함수는 특성 다항식의 계수가 포함된 벡터를 생성합니다.
행렬 A
의 특성 다항식은 다음과 같습니다.
p = round(poly(A))
p = 1×4
1 -5 5 -1
roots
함수를 사용하면 다항식의 근을 쉽게 구할 수 있습니다.
이 값들은 원본 행렬의 고유값에 해당합니다.
roots(p)
ans = 3×1
3.7321
1.0000
0.2679
MATLAB은 행렬 계산 외에도 여러 용도로 사용할 수 있습니다.
다음과 같이 두 벡터의 컨벌루션을 수행하거나,
q = conv(p,p)
q = 1×7
1 -10 35 -52 35 -10 1
... 컨벌루션을 수행하고 결과를 플로팅하는 데 사용할 수도 있습니다.
r = conv(p,q)
r = 1×10
1 -15 90 -278 480 -480 278 -90 15 -1
plot(r);
언제든지 who
명령이나 whos
명령을 사용하여, 메모리에 저장된 변수 목록을 가져올 수 있습니다.
whos
Name Size Bytes Class Attributes A 3x3 72 double B 3x3 72 double C 3x3 72 double a 1x9 72 double ans 3x1 24 double b 3x1 24 double p 1x4 32 double q 1x7 56 double r 1x10 80 double x 3x1 24 double
변수 이름을 입력하여 특정 변수 값을 가져올 수 있습니다.
A
A = 3×3
1 2 0
2 5 -1
4 10 -1
쉼표나 세미콜론으로 각 명령문을 구분하여 한 라인에 여러 명령문을 입력할 수도 있습니다.
연산 결과를 저장하기 위해 변수를 할당하지 않는 경우 결과는 ans
라는 임시 변수에 저장됩니다.
sqrt(-1)
ans = 0.0000 + 1.0000i
이와 같이 MATLAB으로 계산하면 복소수도 쉽게 다룰 수 있습니다.