매트랩이 편리한 점은 다른 프로그래밍 언어는 수학적 식을 세우거나 해석적 방법을 이용한 문제 풀이에 한계가 있지만, 매트랩은 자체 내장 함수를 통해 많은 문제를 손쉽게 풀 수 있다. 물론 그만큼 자유도면에서는 떨어지지만 그래프와 수식, 방정식 풀이는 매우 편리한 기능이다. 역행렬을 구하는 것도 마찬가지이다.
행렬을 정의하는 법과 조작법을 모른다면 아래 글을 먼저 보고 오자!
2023.03.05 - [Computer Science/Matlab(수학)] - 매트랩 [선형 대수] 행렬, 사다리꼴 행렬, 행렬식
행렬 K를 선언하고 그것의 역행렬을 구하는데 단 2줄의 코드만으로 충분하다.
K = [-1 1 2;3 -1 1;-1 3 4];
K_inv = inv(K);
>> K
K =
-2 1 -1 0
1 -2 0 1
1 0 -2 1
0 1 1 -2 이 나오고 검산을 위해 K와 K_inv(역행렬)을 곱해보자.
>> K*K_inv
ans =
1.0000 -0.0000 -0.0000
0 1.0000 0
0 -0.0000 1.0000 이 나오고, 이는 항등 행렬이므로 두 행렬은 역행렬이 맞다!
고유값 (eigen value) , 고유벡터 (eigen vector)
고유값은 연립상미분방정식을 풀 때 쓰이고, 고유 벡터를 찾기 위해 자주 쓰인다.
고유 값도 손으로 풀려면 풀 수 있지만 귀찮은 부분이 있는데, 매트랩은 이를 내장 함수 eig 가 바로 찾아준다.
A = [-5 2;2 -2];
[A_eigmat, A_eigval] = eig(A);
함수 eig 는 두 가지 값이 나온다. A_eigmat 은 고유 벡터가 각 열로 들어가고 A_eigval 은 고유값이 들어간다.
>> A_eigmat
A_eigmat =
-0.8944 -0.4472
0.4472 -0.8944
A_eigval 에는 마찬가지로 고유값이 열의 형태로 들어간다.
>> A_eigval
A_eigval =
-6 0
0 -1
이때 주의할 점이 있다. eig 에는 한계가 있어서, 고유 값이 중첩된 값일 때는 jordan 함수를 사용하는 게 조금 더 정확한 결과를 도출한다.
3 x 3 행렬 B를 통한 예시를 살펴보자.
B = [-2 2 -3; 2 1 -6; -1 -2 0];
[B_eigmat, B_eigval] = eig(B);
행렬 B의 고유값 중에 -3 이 중첩되는 것을 아래에서 확인할 수 있다.
>> B_eigval
B_eigval =
-3.0000 0 0
0 5.0000 0
0 0 -3.0000
고유 벡터는 0 이 없는 형태로 나오게 된다. 0을 포함시키고 싶다면 jordan 함수를 사용하자.
>> B_eigmat
B_eigmat =
-0.9526 0.4082 0.0516
0.2722 0.8165 0.8229
-0.1361 -0.4082 0.5658
jordan 함수는 eig 함수와 사용법은 동일하다. 첫번째 변수에 고유벡터가 들어가고, 두 번째 변수에 고유값이 들어간다.
% Jordan Command vs Eigen Command
[B_jormat, B_jorval] = jordan(B);
고유 값은 동일한 형태로 나오지만,
>> B_jorval
B_jorval =
5 0 0
0 -3 0
0 0 -3
고유 벡터는 0을 포함하는 형태로 나온다.
>> B_jormat
B_jormat =
-1 -2 3
-2 1 0
1 0 1
고유값, 고유벡터의 계산은 상황에 따라 적절한 함수를 사용하자!