logo

함수로써의 대각행렬, 대각성분 📂함수

함수로써의 대각행렬, 대각성분

정의

대각성분

행렬에 대한 $\text{diag} : \mathbb{R}^{n \times n} \to \mathbb{R}^{n}$ 는 다음과 같이 행렬의 대각 성분으로 이루어진 벡터를 의미한다.

$$ \text{diag} A = \begin{bmatrix} A_{11} \\ A_{22} \\ \vdots \\ A_{nn} \end{bmatrix} $$

대각행렬

벡터에 대한 $\text{diag} : \mathbb{R}^{n} \to \mathbb{R}^{n \times n}$ 는 다음과 같이 벡터를 대각성분으로 갖는 행렬을 의미한다. $$ \text{diag} \begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix} = \begin{bmatrix} x_{1} & 0 & \cdots & 0 \\ 0 & x_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & x_{n} \end{bmatrix} $$

설명

대각행렬과 관계된 $\text{diag}$ 는 함수로써 봤을 때 두가지 정의가 공존한다. 문헌에 따라 정확히 같은 표기를 다른 방식으로 사용할 수 있으나, 차원을 계산해보면 헷갈릴 일이 없으니 걱정하지 않아도 된다.

프로그래밍 언어에서

다음은 매트랩 코드로, 인수가 행렬일 때와 벡터일 때 모두 눈치껏 사용될 수 있도록 두 함수 모두가 오버로딩overloading되어있다. 행렬이 들어가면 대각성분을 반환하고 벡터가 들어가면 대각행렬을 반환한다.

>> X

X =

     1     4     7
     2     5     8
     3     6     9

>> diag(X)

ans =

     1
     5
     9

>> Y

Y =

     3
     2
     1

>> diag(Y)

ans =

     3     0     0
     0     2     0
     0     0     1

반면 줄리아에서는 두 개의 함수로 구분되어있다.

julia> A = [    
           1 0 3
           0 5 1
           3 1 9
       ]        
3×3 Matrix{Int64}:
 1  0  3
 0  5  1
 3  1  9

julia> diag(A)
3-element Vector{Int64}:
 1
 5
 9

julia> diagm([1,5,9])
3×3 Matrix{Int64}:
 1  0  0
 0  5  0
 0  0  9