[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


끝.

댓글

이 블로그의 인기 게시물

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[PLC] PLC 아날로그 입출력 기본

제너 다이오드에 저항을 연결하는 이유

[농사] 실내 식물 재배 조명, 어떤 걸 선택해야 할까?

공압 속도 제어: 미터인 vs 미터아웃

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

[스마트팜] 아쿠아포닉스에서 pH 제어를 자동화해보자! (Python 활용)

[PLC] 릴레이와 전자 접촉기 (MC)

[자동화] 안쓰는 안드로이드폰을 활용한 식물 성장 타임랩스 촬영

커패시터에 저장된 에너지 계산