한켈 행렬
정의
$$ H = \begin{bmatrix} h_{11} & h_{12} & h_{13} & \cdots & h_{1n} \\ h_{21} & h_{22} & h_{23} & \cdots & h_{2n} \\ h_{31} & h_{32} & h_{33} & \cdots & h_{3n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ h_{m1} & h_{m2} & h_{m3} & \cdots & h_{mn} \end{bmatrix} $$ 주어진 행렬 $H = \left( h_{ij} \right) \in \mathbb{R}^{m \times n}$ 가 모든 $k = 2 , 3 , \cdots , m+n$ 에 대해 다음을 만족하면 한켈 행렬hankel matrix라 한다. $$ i_{1} + j_{1} = k = i_{2} + j_{2} \implies h_{i_{1} j_{1}} = h_{i_{2} j_{2}} $$ 다시 말해, 한켈 행렬이란 다음과 같이 반대각선의 성분이 모두 같은 행렬이다. $$ H = \begin{bmatrix} h_{2} & h_{3} & h_{4} & \cdots & h_{1+n} \\ h_{3} & h_{4} & h_{5} & \cdots & h_{2+n} \\ h_{4} & h_{5} & h_{6} & \cdots & h_{3+n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ h_{m+1} & h_{m+2} & h_{m+3} & \cdots & h_{m+n} \end{bmatrix} $$
설명
한켈 행렬이 정방행렬이면 $H = H^{T}$ 이므로 대칭행렬이고, 대각행렬은 한켈 행렬이다.
한켈 행렬 분석
$$ H = \begin{bmatrix} y_{1} & y_{2} & y_{3} & \cdots & y_{q} \\ y_{2} & y_{3} & y_{4} & \cdots & y_{q+1} \\ y_{3} & y_{4} & y_{5} & \cdots & y_{q+2} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ y_{p} & y_{p+1} & y_{q+2} & \cdots & y_{p+q} \end{bmatrix} $$ 시계열 데이터 $\left\{ y_{t} \right\}_{t=1}^{(p+q)}$ 에 대해서 위와 같은 한켈 행렬을 구성하고 그 특이값 분해 $$ H = U \Sigma V^{T} $$ 를 보면 $U$ 와 $V$ 에 계층적인 분해가 나타난다고 한다1. 이렇게 시계열 데이터를 행렬로 만들어서 분석하는 것을 한켈 행렬 분석hankel Matrix Analysis이라 한다.
코드
다음은 벡터를 받아서 한켈 행렬을 구성하는 함수를 줄리아로 작성한 것이다.
function hankelizer(vec)
@assert length(vec) % 2 == 1 "vector must have odd length"
m = (length(vec) ÷ 2) + 1
H = zeros(eltype(vec), m, m)
for i ∈ 1:m, j ∈ 1:m
H[i,j] = vec[i+j-1]
end
return H
end
elements = [8,2,0,6,5,1,5,4,0]
hankelizer(elements)
function hankelizer(vec, m, n)
@assert length(vec) == (m+n-1) "wrong dimensions"
H = zeros(eltype(vec), m, n)
for i ∈ 1:m, j ∈ 1:n
H[i,j] = vec[i+j-1]
end
return H
end
hankelizer([elements; 1], 3, 8)
hankelizer([elements; 1], 2, 9)
Brunton. (2017). Chaos as an intermittently forced linear system: Supplementary Material p7. ↩︎