logo

ハンケル行列 📂行列代数

ハンケル行列

定義

$$ 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)

  1. Brunton. (2017). Chaos as an intermittently forced linear system: Supplementary Material p7. ↩︎