LoginSignup
5
5

More than 5 years have passed since last update.

PythonでHermite行列とその固有値を求めてみる

Posted at

やりたいこと:

  • 線型代数のHermite行列を作ってPythonでckすることと
  • その固有値が実数であることをPythonでckすること

Hermite行列って?

行列$A$に対して、転置を取り、さらに各成分の複素共役をとったものを随伴行列と呼び$A^{\dagger}$で表します。このときHermiteであるとは

A^{\dagger}=A

が成立すること

(サンプル)行列の定義

A=\left(
\begin{matrix}
1 & 2+\sqrt{-1} \\
2-\sqrt{-1} & 4 
\end{matrix}
\right), B:=A^{\dagger}

としてみます(つまり$B$を$A$の随伴行列と置いてみます):

> import numpy as np
> A = np.array([[1,2+1j],[2-1j,4]])
> B = np.conjugate(A.T) #転置とって、複素共役!

一応、中身のck

> A
array([[ 1.+0.j,  2.+1.j],
       [ 2.-1.j,  4.+0.j]])
> B
array([[ 1.-0.j,  2.+1.j],
       [ 2.-1.j,  4.-0.j]])

Hermite行列であることのチェック

$B=A^{\dagger}$なので、$A=B$が言えればいいですね。

> A-B
array([[ 0.+0.j,  0.+0.j],
       [ 0.+0.j,  0.+0.j]]) #OK!ま、見りゃわかるか、って感じカモですが、、、

では、固有値を求めてみますか

Hermite行列$A$の固有値は実数ですが、それのチェックです。固有方程式は$$\det(\lambda I_2-A)=0$$ですよね。

\begin{eqnarray}
\det(\lambda I_2-A) &=& (\lambda-1)(\lambda-4)-(2+\sqrt{-1})(2-\sqrt{-1})\\
&=& \lambda^2-5\lambda+4-5 \\
&=& \lambda^2-5\lambda-1
\end{eqnarray}

なので、理論的にはこうなりますね:

\lambda = \frac{5\pm\sqrt{25-4\times(-1)}}{2}=\frac{5\pm\sqrt{29}}{2}

実数ですね!実装的には

> eigen_value, eigen_vector = np.linalg.eig(A)
> eigen_value
array([-0.1925824 -3.07382855e-18j,  5.1925824 -2.18970776e-16j])
> (5-np.sqrt(29))/2
-0.19258240356725187
> (5+np.sqrt(29))/2
5.1925824035672523

ということで、虚部がチビっと出てしまってますが、例によって数値的なアレというやつでしょうか。

5
5
0

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
5
5