함수로써의 대각행렬, 대각성분
정의
대각성분
행렬에 대한 $\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