3.固有状態、固有値
隣り合う格子点の間で粒子が相互に交換されるモデルについて、西野友年著『場の理論』を参考にして、もう少し説明を加えておこう。このモデルは次の方程式(時間変化を与える発展方程式)で表される。
\begin{eqnarray}
i \hbar \frac{d}{dt}|\Psi(t)>=\hat{H}|\Psi(t)>
\end{eqnarray}
ここで、\(\hat{H}\)はハミルトニアンと呼ばれる演算子である。このモデルでは、\(\hat{H}\)は隣り合う粒子が相互に交換されるという運動を表していて、具体的には次のようになる。
\begin{eqnarray}
\hat{H}=-g\sum_{l=-\infty}^\infty (\hat{a}^\dagger_{l+1} \hat{a}_l + \hat{a}^\dagger_{l} \hat{a}_{l+1})
\end{eqnarray}
ここで、\(\hat{a}^\dagger_{l}\)は生成演算子、 \(\hat{a}_l\)は消滅演算子で、\(\hat{a}^\dagger_{l+1} \hat{a}_l\)は\(l\)番目の格子点から粒子を取り除き、そして、\(l+1\)番目の格子点に粒子を発生させること、すなわち、粒子を\(l\)から\(l+1\)に移動することを意味する。これより、
\begin{eqnarray}
i \hbar \frac{d}{dt}\psi_m(t) = -g [\psi_{m -1}(t) + \psi_{m+1}(t)]
\end{eqnarray}
を得る。この時の定常解は、
\begin{eqnarray}
\psi_l(t) = Ae^{-i \omega t+ i \kappa l}
\end{eqnarray}
である。
ただし、この解は \( i \hbar \frac{d}{dt}\psi_m(t) = -g [\psi_{m -1}(t) + \psi_{m+1}(t)] \) を満たす必要がある。満足する条件を求めてみよう。
左辺は、
\begin{eqnarray}
&& i \hbar \frac{d}{dt}\psi_l(t) \\ &=& i \hbar \frac{d}{dt}Ae^{-i \omega t+ i \kappa l} \\ &=& \hbar \omega Ae^{-i \omega t+ i \kappa l}
\end{eqnarray}
右辺は、
\begin{eqnarray}
&& -g [\psi_{l-1}(t) + \psi_{l+1}(t)] \\ &=& -gAe^{-i \omega t}e^{i( \kappa (l-1)+\kappa (l+1)} \\ &=& -gAe^{-i \omega t}e^{i\kappa l}(e^{-i\kappa}+e^{i\kappa}) \\ &=& -2g\cos \kappa Ae^{-i \omega t+i\kappa l}
\end{eqnarray}
従って、\(\hbar \omega=-2g\cos \kappa\)の時、\(\psi_l(t) = Ae^{-i \omega t+ i \kappa l}\)は定常解となる。
定常解は、時間に依存する部分\(\phi_\omega (t)=e^{-i \omega t}\)と場所に依存する部分\(\varphi_{kl}=Ae^{i \kappa l}\)とに分けると、
\begin{eqnarray}
\psi_l(t) = \phi_\omega (t) \varphi_{kl}
\end{eqnarray}
と表すことができる。
隣り合う格子点の間で粒子が相互に交換されるいるとき、次の重ね合わせ状態になっているときがある(例えば、\(t=0\))。
\begin{eqnarray}
\sum_{l=-\infty}^\infty \varphi_{kl} \hat{a}^\dagger_l |0> = \sum_{l=-\infty}^\infty Ae^{i \kappa l} \hat{a}^\dagger_l |0>
\end{eqnarray}
それでは、この重ね合わせ状態の時、隣り合う格子点の間で粒子を相互に交換させたらどのようになるだろうか。即ち、
\begin{eqnarray}
\hat{H}=-g\sum_{l=-\infty}^\infty (\hat{a}^\dagger_{l+1} \hat{a}_l + \hat{a}^\dagger_{l} \hat{a}_{l+1})
\end{eqnarray}
を作用させたらどうなうであろうか。
実際に式を変形してみる。
\begin{eqnarray}
&&\hat{H}\sum_{l=-\infty}^\infty \varphi_{kl} \hat{a}^\dagger_l |0> \\ &=&\hat{H} \sum_{l=-\infty}^\infty Ae^{i \kappa l} \hat{a}^\dagger_l |0> \\ &=&-g\sum_{l=-\infty}^\infty Ae^{i \kappa l}(\hat{a}^\dagger_{l+1} \hat{a}_l + \hat{a}^\dagger_{l-1} \hat{a}_l) \hat{a}^\dagger_l |0> \\ &=&-g\sum_{l=-\infty}^\infty Ae^{i \kappa l}(\hat{a}^\dagger_{l+1} + \hat{a}^\dagger_{l-1}) |0> \\ &=&-g\sum_{l=-\infty}^\infty A(e^{i \kappa (l-1)}\hat{a}^\dagger_l + e^{i \kappa (l+1)}\hat{a}^\dagger_l) |0> \\ &=&-g\sum_{l=-\infty}^\infty Ae^{i \kappa l}(e^{-i \kappa}+e^{i \kappa})\hat{a}^\dagger_l|0> \\ &=&-2g \cos\kappa\sum_{l=-\infty}^\infty Ae^{i \kappa l}\hat{a}^\dagger_l|0> \end{eqnarray}
今、\(E=-2g \cos\kappa(=\hbar \omega)\)とすると、
\begin{eqnarray}
&&\hat{H} \sum_{l=-\infty}^\infty Ae^{i \kappa l} \hat{a}^\dagger_l |0> \\
&=& E \sum_{l=-\infty}^\infty Ae^{i \kappa l}\hat{a}^\dagger_l|0>
\end{eqnarray}
上の式は、状態\(\sum_{l=-\infty}^\infty \varphi_{kl} \hat{a}^\dagger_l |0> = \sum_{l=-\infty}^\infty Ae^{i \kappa l} \hat{a}^\dagger_l |0>\)にハミルトニアン\(\hat{H}\)を作用させると、元の状態の\(E\)倍になるといっている。
演算子を作用させたとしても、係数が変わるだけで、元の状態から変化しないものを固有状態と呼ぶ。また、この時の係数は固有値と呼ばれる。従って、
\begin{eqnarray}
&&\sum_{l=-\infty}^\infty \varphi_{kl} \hat{a}^\dagger_l |0> \\
&=& \sum_{l=-\infty}^\infty Ae^{i \kappa l} \hat{a}^\dagger_l |0>
\end{eqnarray}
は固有状態であり、\(E\)は固有値である。
特に、演算子がハミルトニアンの場合には、固有値は固有エネルギーと呼べれ、状態も固有エネルギー状態と呼べれる。
ハミルトニアン\(\hat{H}\)の固有値が見つかれば、一般に、定常状態はすぐに求めることができる。ある固有状態\(|\epsilon>\)が、エネルギー\(E=\hbar \omega\)を有するならば、\(\hat{H}|\epsilon>=E|\epsilon>\)が成り立っていて、定常状態は次のようになる。
\begin{eqnarray}
&&|\Psi(t)> \\
&=& e^{-i(E/\hbar)t}|\epsilon> \\
&=& e^{-iwt}|\epsilon>
\end{eqnarray}
4.有限系
前回からの約束で、長さが有限である場合について考えることにしよう。
今、全長が\(L\)で、格子点の数が\(N\)の場合を考えることにする。この場合、隣合う格子点の距離は\(d=L/N\)となる。 この時、隣り合う格子点の間で粒子が相互に交換されるモデルでのハミルトニアン\(\hat{H}_{open}\)は、
\begin{eqnarray}
\hat{H}_{open}=-g\sum_{l=0}^{N-2} (\hat{a}^\dagger_{l+1} \hat{a}_l + \hat{a}^\dagger_{l} \hat{a}_{l+1})
\end{eqnarray}
ハミルトニアン\(\hat{H}_{open}\)の固有状態は\(N\)個あり、次のようになる。
\begin{eqnarray}
&&| \xi_m > \\
&=& B \sum_{l = 0}^{N-1}[\sin \frac{m \pi (l + 1)}{N + 1}] \hat{a}^{\dagger}_l|0>
\end{eqnarray}ここで、\(m\)は、\(1\le m \le N\)である。また、\(B=\sqrt {\frac{2}{N+1}}\)の時、規格化されている。
5.Haskellでの表現
格子点の数が有限な場合には、固有状態を表示することができるので、実現してみよう。
格子点lに粒子がある状態lattice m lを、規格化せれた割合との対として、次のように表すことにしよう。なお、説明のところで用いた区切りの数\(N\)はプログラムではnである。
lattice :: Integer -> Integer -> (Complex Double, Integer) lattice m l = (b * sin ( pi * fromInteger m * fromInteger (l + 1) / fromInteger (n + 1)) :+ 0, l)
これを用いて、有限系での重ね合わせでの固有状態eta mはケットでは次のようになる。なお、ここで、mは1からnまでの整数である。
eta :: Integer -> Entangle (Complex Double) Integer eta m | m < 1 = error $ "m should be 1 <= m <= " ++ show n ++ "." | m > 10 = error $ "m should be 1 <= m <= " ++ show n ++ "." | otherwise = eta1 m (n - 1) where eta1 m 0 = lattice m 0 :&: EnZero eta1 m l = lattice m l :&: eta1 m (l - 1)
そこで、\(N=10\)の場合について、詳しく調べてみよう。プログラムは次のようになる。
{-#LANGUAGE GADTs #-} module Test2 where import Data.Complex import Qtm.KetBra import Qtm.Entangle n = 10 b = sqrt(2.0 /fromInteger (n + 1)) lattice :: Integer -> Integer -> (Complex Double, Integer) lattice m l = (b * sin ( pi * fromInteger m * fromInteger (l + 1) / fromInteger (n + 1)) :+ 0, l) eta :: Integer -> Entangle (Complex Double) Integer eta m | m < 1 = error $ "m should be 1 <= m <= " ++ show n ++ "." | m > 10 = error $ "m should be 1 <= m <= " ++ show n ++ "." | otherwise = eta1 m (n - 1) where eta1 m 0 = lattice m 0 :&: EnZero eta1 m l = lattice m l :&: eta1 m (l - 1)
このプログラムをロードして、mの値を変えて、固有状態を見てみよう。
Prelude> :load "test2.hs" [1 of 7] Compiling Qtm.KetBra.Ket ( Qtm\KetBra\Ket.hs, interpreted ) [2 of 7] Compiling Qtm.KetBra.Bra ( Qtm\KetBra\Bra.hs, interpreted ) [3 of 7] Compiling Qtm.Entangle.BraEntangle ( Qtm\Entangle\BraEntangle.hs, interpreted ) [4 of 7] Compiling Qtm.Entangle.KetEntangle ( Qtm\Entangle\KetEntangle.hs, interpreted ) [5 of 7] Compiling Qtm.Entangle ( Qtm\Entangle.hs, interpreted ) [6 of 7] Compiling Qtm.KetBra ( Qtm\KetBra.hs, interpreted ) [7 of 7] Compiling Test2 ( test2.hs, interpreted ) Ok, modules loaded: Test2, Qtm.KetBra, Qtm.Entangle, Qtm.Entangle.KetEntangle, Qtm.Entangle.BraEntangle, Qtm.KetBra.Bra, Qtm.KetBra.Ket.
m=1の場合は次のようになる。
*Test2> prEntangle $ eta 1 "(0.12013116587858108 :+ 0.0)|...000000000000(0)000000001000...> + (0.23053001914523252 :+ 0.0)|...00000000000(0)00000001000...> + (0.32225270127555106 :+ 0.0)|...0000000000(0)0000001000...> + (0.38786838605913326 :+ 0.0)|...000000000(0)000001000...> + (0.4220612809463162 :+ 0.0)|...00000000(0)00001000...> + (0.4220612809463162 :+ 0.0)|...0000000(0)0001000...> + (0.38786838605913326 :+ 0.0)|...000000(0)001000...> + (0.32225270127555106 :+ 0.0)|...00000(0)01000...> + (0.23053001914523244 :+ 0.0)|...0000(0)1000...> + (0.12013116587858108 :+ 0.0)|...0001000...>"
上手く動いているようなので、その他の場合も求めてみよう。
*Test2> prEntangle $ eta 2 "((-0.23053001914523238) :+ 0.0)|...000000000000(0)000000001000...> + ((-0.3878683860591333) :+ 0.0)|...00000000000(0)00000001000...> + ((-0.4220612809463162) :+ 0.0)|...0000000000(0)0000001000...> + ((-0.32225270127555106) :+ 0.0)|...000000000(0)000001000...> + ((-0.12013116587858097) :+ 0.0)|...00000000(0)00001000...> + (0.12013116587858108 :+ 0.0)|...0000000(0)0001000...> + (0.32225270127555106 :+ 0.0)|...000000(0)001000...> + (0.4220612809463162 :+ 0.0)|...00000(0)01000...> + (0.38786838605913326 :+ 0.0)|...0000(0)1000...> + (0.23053001914523244 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 3 "(0.32225270127555156 :+ 0.0)|...000000000000(0)000000001000...> + (0.4220612809463162 :+ 0.0)|...00000000000(0)00000001000...> + (0.23053001914523225 :+ 0.0)|...0000000000(0)0000001000...> + ((-0.12013116587858114) :+ 0.0)|...000000000(0)000001000...> + ((-0.3878683860591333) :+ 0.0)|...00000000(0)00001000...> + ((-0.3878683860591331) :+ 0.0)|...0000000(0)0001000...> + ((-0.12013116587858097) :+ 0.0)|...000000(0)001000...> + (0.23053001914523252 :+ 0.0)|...00000(0)01000...> + (0.4220612809463162 :+ 0.0)|...0000(0)1000...> + (0.32225270127555106 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 4 "((-0.38786838605913326) :+ 0.0)|...000000000000(0)000000001000...> + ((-0.32225270127555083) :+ 0.0)|...00000000000(0)00000001000...> + (0.12013116587858118 :+ 0.0)|...0000000000(0)0000001000...> + (0.4220612809463162 :+ 0.0)|...000000000(0)000001000...> + (0.23053001914523225 :+ 0.0)|...00000000(0)00001000...> + ((-0.23053001914523238) :+ 0.0)|...0000000(0)0001000...> + ((-0.4220612809463162) :+ 0.0)|...000000(0)001000...> + ((-0.12013116587858097) :+ 0.0)|...00000(0)01000...> + (0.32225270127555106 :+ 0.0)|...0000(0)1000...> + (0.38786838605913326 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 5 "(0.4220612809463162 :+ 0.0)|...000000000000(0)000000001000...> + (0.12013116587858083 :+ 0.0)|...00000000000(0)00000001000...> + ((-0.38786838605913326) :+ 0.0)|...0000000000(0)0000001000...> + ((-0.2305300191452322) :+ 0.0)|...000000000(0)000001000...> + (0.32225270127555156 :+ 0.0)|...00000000(0)00001000...> + (0.3222527012755511 :+ 0.0)|...0000000(0)0001000...> + ((-0.23053001914523238) :+ 0.0)|...000000(0)001000...> + ((-0.3878683860591331) :+ 0.0)|...00000(0)01000...> + (0.12013116587858108 :+ 0.0)|...0000(0)1000...> + (0.4220612809463162 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 6 "((-0.42206128094631595) :+ 0.0)|...000000000000(0)000000001000...> + (0.12013116587858128 :+ 0.0)|...00000000000(0)00000001000...> + (0.38786838605913304 :+ 0.0)|...0000000000(0)0000001000...> + ((-0.2305300191452325) :+ 0.0)|...000000000(0)000001000...> + ((-0.32225270127555083) :+ 0.0)|...00000000(0)00001000...> + (0.32225270127555156 :+ 0.0)|...0000000(0)0001000...> + (0.23053001914523225 :+ 0.0)|...000000(0)001000...> + ((-0.3878683860591333) :+ 0.0)|...00000(0)01000...> + ((-0.12013116587858097) :+ 0.0)|...0000(0)1000...> + (0.4220612809463162 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 7 "(0.387868386059133 :+ 0.0)|...000000000000(0)000000001000...> + ((-0.32225270127555067) :+ 0.0)|...00000000000(0)00000001000...> + ((-0.12013116587858078) :+ 0.0)|...0000000000(0)0000001000...> + (0.4220612809463161 :+ 0.0)|...000000000(0)000001000...> + ((-0.2305300191452325) :+ 0.0)|...00000000(0)00001000...> + ((-0.2305300191452322) :+ 0.0)|...0000000(0)0001000...> + (0.4220612809463162 :+ 0.0)|...000000(0)001000...> + ((-0.12013116587858114) :+ 0.0)|...00000(0)01000...> + ((-0.32225270127555106) :+ 0.0)|...0000(0)1000...> + (0.38786838605913326 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 8 "((-0.3222527012755512) :+ 0.0)|...000000000000(0)000000001000...> + (0.4220612809463163 :+ 0.0)|...00000000000(0)00000001000...> + ((-0.23053001914523258) :+ 0.0)|...0000000000(0)0000001000...> + ((-0.12013116587858078) :+ 0.0)|...000000000(0)000001000...> + (0.38786838605913304 :+ 0.0)|...00000000(0)00001000...> + ((-0.38786838605913326) :+ 0.0)|...0000000(0)0001000...> + (0.12013116587858118 :+ 0.0)|...000000(0)001000...> + (0.23053001914523225 :+ 0.0)|...00000(0)01000...> + ((-0.4220612809463162) :+ 0.0)|...0000(0)1000...> + (0.32225270127555106 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 9 "(0.23053001914523197 :+ 0.0)|...000000000000(0)000000001000...> + ((-0.387868386059133) :+ 0.0)|...00000000000(0)00000001000...> + (0.4220612809463163 :+ 0.0)|...0000000000(0)0000001000...> + ((-0.32225270127555067) :+ 0.0)|...000000000(0)000001000...> + (0.12013116587858128 :+ 0.0)|...00000000(0)00001000...> + (0.12013116587858083 :+ 0.0)|...0000000(0)0001000...> + ((-0.32225270127555083) :+ 0.0)|...000000(0)001000...> + (0.4220612809463162 :+ 0.0)|...00000(0)01000...> + ((-0.3878683860591333) :+ 0.0)|...0000(0)1000...> + (0.23053001914523252 :+ 0.0)|...0001000...>" *Test2> prEntangle $ eta 10 "((-0.1201311658785813) :+ 0.0)|...000000000000(0)000000001000...> + (0.23053001914523197 :+ 0.0)|...00000000000(0)00000001000...> + ((-0.3222527012755512) :+ 0.0)|...0000000000(0)0000001000...> + (0.387868386059133 :+ 0.0)|...000000000(0)000001000...> + ((-0.42206128094631595) :+ 0.0)|...00000000(0)00001000...> + (0.4220612809463162 :+ 0.0)|...0000000(0)0001000...> + ((-0.38786838605913326) :+ 0.0)|...000000(0)001000...> + (0.32225270127555156 :+ 0.0)|...00000(0)01000...> + ((-0.23053001914523238) :+ 0.0)|...0000(0)1000...> + (0.12013116587858108 :+ 0.0)|...0001000...>"
1より小さい値、あるいは、10より大きい値を指定した場合は次のようになる。
*Test2> prEntangle $ eta 0 *** Exception: m should be 1 <= m <= 10. "*Test2> *Test2> prEntangle $ eta 11 *** Exception: m should be 1 <= m <= 10. "*Test2>
そこで、m=1,2,3,4の固有状態を図で表すと次のようになる。
ついでに、ブラでの表現も加えて、プログラムを次のようにしよう。ここで、格子点lに粒子がある状態をlattice' m lで、ブラでの固有状態をeta' mで表す。
{-#LANGUAGE GADTs #-} module Test2 where import Data.Complex import Qtm.KetBra import Qtm.Entangle n = 10 b = sqrt(2.0 /fromInteger (n + 1)) lattice :: Integer -> Integer -> (Complex Double, Integer) lattice m l = (b * sin ( pi * fromInteger m * fromInteger (l + 1) / fromInteger (n + 1)) :+ 0, l) eta :: Integer -> Entangle (Complex Double) Integer eta m | m < 1 = error $ "m should be 1 <= m <= " ++ show n ++ "." | m > 10 = error $ "m should be 1 <= m <= " ++ show n ++ "." | otherwise = eta1 m (n - 1) where eta1 m 0 = lattice m 0 :&: EnZero eta1 m l = lattice m l :&: eta1 m (l - 1) lattice' :: Integer -> Integer -> (Integer, Complex Double) lattice' m l = (l, b * sin ( pi * fromInteger m * fromInteger (l + 1) / fromInteger (n + 1)) :+ 0) eta' :: Integer -> CoEntangle Integer (Complex Double) eta' m | m < 1 = error $ "m should be 1 <= m <= " ++ show n ++ "." | m > 10 = error $ "m should be 1 <= m <= " ++ show n ++ "." | otherwise = eta1 m (n - 1) where eta1 m 0 = EnZero' :|: lattice' m 0 eta1 m l = eta1 m (l - 1) :|: lattice' m l
プログラムをロードして、ブラでの固有状態を調べてみよう。
*Test2> eta' 1 a0_0.12013116587858108 :+ 0.0 + a1_0.23053001914523244 :+ 0.0 + a2_0.32225270127555106 :+ 0.0 + a3_0.38786838605913326 :+ 0.0 + a4_0.4220612809463162 :+ 0.0 + a5_0.4220612809463162 :+ 0.0 + a6_0.38786838605913326 :+ 0.0 + a7_0.32225270127555106 :+ 0.0 + a8_0.23053001914523252 :+ 0.0 + a9_0.12013116587858108 :+ 0.0 *Test2> eta' 2 a0_0.23053001914523244 :+ 0.0 + a1_0.38786838605913326 :+ 0.0 + a2_0.4220612809463162 :+ 0.0 + a3_0.32225270127555106 :+ 0.0 + a4_0.12013116587858108 :+ 0.0 + a5_(-0.12013116587858097) :+ 0.0 + a6_(-0.32225270127555106) :+ 0.0 + a7_(-0.4220612809463162) :+ 0.0 + a8_(-0.3878683860591333) :+ 0.0 + a9_(-0.23053001914523238) :+ 0.0
また、ケットとブラの内積も求めて見よう。
*Test2> eta' 1 ^**^ eta 1 1.0 :+ 0.0 *Test2> eta' 2 ^**^ eta 2 1.0 :+ 0.0 *Test2>
またブラとケットでmの値が異なるときは、
*Test2> eta' 1 ^**^ eta 2 (-5.551115123125783e-17) :+ 0.0 *Test2> eta' 2 ^**^ eta 3 1.3877787807814457e-17 :+ 0.0 *Test2> eta' 2 ^**^ eta 4 4.163336342344337e-17 :+ 0.0
理論的には0であるが、実際は誤差のため0にはならない。しかし、0に限りなく近い値を結果として得る。
なお、参考のために、場の理論での演算子とプログラムでのそれとの対応を以下の表に示す。
量子力学 | ケット | ブラ | |
---|---|---|---|
真空状態(ケット) | \(|...00\dot000...>\) | KetZero | |
真空状態(ブラ) | \(<...00\dot000...|\) | BraZero | |
区間1,2に1粒子(有) | \(|...00\dot01100...>\) | 2 :+: 1 :+: KetZero | |
区間1,2に1粒子(待) | \(<...00\dot01100...|\) | BraZero :-: 1 :-: 2 | |
生成演算子 | \(\hat{a}^\dagger_i\) | i +^ | ^+ i |
消滅演算子 | \(\hat{a}_i\) | i -^ | ^- i |
生成演算子使用例 | \(\hat{a}^\dagger_1|...00\dot000...>\) | i +^ KetZero | |
生成演算子使用例 | \(<...00\dot000...|\hat{a}^\dagger_1\) | BraZero ^+ i | |
消滅演算子使用例 | \(\hat{a}_1|...00\dot000...>\) | 1 -^ KetZero | |
消滅演算子使用例 | \(<...00\dot000...|\hat{a}_1\) | BraZero ^- 1 | |
内積 | ^*^ | ||
内積使用例 | \(<...00\dot000...|...00\dot000...>\) | BraZero ^*^ KetZero | |
状態でない | \(0\) | Zero | Zero' |