[GNU Octave - 무료 매트랩] 벡터(행렬) 다루기 팁 (3)
희소행렬(Sparse Matrix) 다루기
희소행렬은 행렬의 대부분의 값이 0으로 이루어진 행렬입니다. 행렬의 차원이 크다면 0이 차지하는 공간이 매우 커지게 되므로 메모리 낭비로 이어집니다. 또한 행렬 계산 속도에도 영향을 미칩니다. 따라서 0이 아닌 항목에 대해서만 명시하는 방법으로 행렬을 선언하는 방법을 사용합니다.
>> r=[1,3,5,6]
r =
1 3 5 6
>> c=[1,2,4,5]
c =
1 2 4 5
>> v=[12,45,43,56]
v =
12 45 43 56
>> sparse(r,c,v)
ans =
Compressed Column Sparse (rows = 6, cols = 5, nnz = 4 [13%])
(1, 1) -> 12
(3, 2) -> 45
(5, 4) -> 43
(6, 5) -> 56
위 예시에서 벡터 r에는 사용할 행번호, 벡터 c에는 사용할 열번호, 벡터 v에는 (r, c)에 들어갈 값을 넣습니다. sparse() 함수를 실행하면 0이 아닌 영역의 값만 가진 행렬정보가 반환됩니다.
sparse() 함수로 생성한 행렬정보를 실제 일반 행렬 변수로 변환하기 위해서는 아래와 같이 full() 함수를 이용합니다.
>> full(sparse(r,c,v))
ans =
12 0 0 0 0
0 0 0 0 0
0 45 0 0 0
0 0 0 0 0
0 0 0 43 0
0 0 0 0 56
선형방정식(Linear Equations) 다루기
선형방정식은 아래와 같이 표현됩니다.
선형방정식은 역벡터를 이용하여 x값들을 구할 수 있습니다.
예를 들어 행렬 A와 벡터 b가 아래와 같다고 가정해 봅시다.
x값의 벡터를 Octave를 이용해서 구해보겠습니다.
>> A=[5 6 2; 9 7 -1; 5 -3 2]
A =
5 6 2
9 7 -1
5 -3 2
>> b=[1; 2; 3]
b =
1
2
3
>> Ainverse=inv(A)
Ainverse =
-5.3140e-02 8.6957e-02 9.6618e-02
1.1111e-01 -1.0451e-17 -1.1111e-01
2.9952e-01 -2.1739e-01 9.1787e-02
>> x=Ainverse*b
x =
0.4106
-0.2222
0.1401
Octave에서는 위 일련의 과정을 \(역슬래시) 연산자로 처리할 수 있습니다.
>> x = A \ b
x =
0.4106
-0.2222
0.1401
끝.
댓글
댓글 쓰기