4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

固有ベクトル-固有値同一性(Eigenvector-eigenvalue identity)をJuliaで確認してみる

Posted at

こちらの論文 Misawa and Yamaji Zeros of Green functions in topological insulatorsを読んでいたところ、Eigenvector-eigenvalue identityなるものが出てきて、面白そうだったのでJuliaで実際に試してみました。Eigenvector-eigenvalue identityの原論文はこちら

試すもの

$n \times n$のエルミート行列$A$の$i$番目の固有ベクトルの$j$番目の要素を$v^{i}_j$とします。この時、固有ベクトルの要素の絶対値は、固有値だけで書けるというのです。

|v^{i}_j|^2 = \frac{\prod_{k=1}^{n-1}|E_i(A) - E_{k}(M_j)|}{\prod_{k=1;k \neq i}^{n-1}|E_i(A)-E_k(A)|}

となるそうです。ここで、$M_j$は行列Aから$j$行$j$列を取り除いて作った行列です。

コード

Julia 1.7.3で動作確認しています。

using LinearAlgebra

function construct_M(A,j)
    n,m = size(A)
    @assert n == m "A should be a square matrix!"
    r = collect(1:n)
    deleteat!(r,j)
    return A[r,r]
end

function make_v_from_e(A,e,i,j)
    n,n = size(A)
    Mj = construct_M(A,j)
    ej,vj = eigen(Mj)

    a = 1.0
    for k=1:n
        if k == i
            continue
        end
        a *= (e[i]-e[k])
    end
    b = 1.0
    for k=1:n-1
        b *= (e[i]-ej[k])
    end

    return b/a
end

このコード、本当は行列$M$の対角化の回数を減らせますが、コードのみやすさのためにそうしていません。

それでは、試してみます。

function main()

    A = [1 2 3
        2 4 5
        3 5 6]
    e,v = eigen(A)
    n,n = size(A)

    for j=1:n
        for i=1:n
            vfrome = make_v_from_e(A,e,i,j)
            println("$(abs(v[j,i])^2) $(vfrome )")
        end
    end

    A = rand(10,10)
    A = A'*A
    e,v = eigen(A)
    n,n = size(A)

    for j=1:n
        for i=1:n
            vfrome = make_v_from_e(A,e,i,j)
            println("$(abs(v[j,i])^2) $(vfrome )")
        end
    end
    
end
main()

二つの行列で試してみましたが、確かにそうなっています。面白いですね。

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?