やりたいこと:
- 線型代数の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
ということで、虚部がチビっと出てしまってますが、例によって数値的なアレというやつでしょうか。