[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


끝.

댓글

이 블로그의 인기 게시물

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

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

NPN, PNP 트랜지스터 차이점

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

3선 결선식 센서의 타입 PNP, NPN

3상 모터 전력에서 전류 계산하기 (How to Convert Three-Phase Power to Amps)

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

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

[공압밸브] 5포트 2웨이 & 4포트 2웨이, 단동 VS 복동 차이점

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