はじめに
今日から「14日で作る量子コンピュータ」という本を買ったので、これを実装しながら量子コンピュータについての理解を深めていきたいと思っています。この本は、14日をかけて最終的に簡易的な量子コンピュータのシミュレータを実装していくというものです。どちらかというと理論重視な感じで、量子力学全くわからない自分ですが、どうにかして読解していきたいと思います。
今回は、量子力学の基礎のところまでを読んでいきます。
0 環境構築
ここでは、Pythonの環境構築と数値計算、図形描画を行う。
0.1 Python、モジュールのインストール
Pyhthonのバージョンは3.8.2を想定している。インストールの方法については公式サイト(https://www.python.org/downloads/)からインストーラを
・ダウンロード
・回答
・インストール
の三段階でできる。これに関しては他のサイトを参考にした方が良い。
次にPythonで使う外部モジュールは、
numpy: 行列計算などを主に行うモジュール。大事
scipy: 科学計算を行うモジュール。初めて使う。大事
matplotlib: グラフ描画を行うモジュール。大事
これらのインストールは以下のコマンドでできる
$ pip install numpy scipy matplotlib
0.2 数値計算の基礎
私はScipyを使ったことがないので、それ用のサンプルスクリプトを残しておく。書籍でも適当な関数の積分を行なっている。
import scipy.integrate as integrate
import math
# 積分区間
x_min = 0
x_max = 1
# 積分する対象のグラフ
def func(x):
return math.exp(x)
# 理論上の積分結果
exact = math.e - 1
# 積分演算
result, err = integrate.quad(func, x_min, x_max)
print("積分結果:" + str(result))
print("計算誤差:" + str(result - exact) + " (推定誤差:" + str(err) + ")")
これを実行したところこのようになった。
$ python sample.py
>積分結果:1.7182818284590453
>計算誤差:2.220446049250313e-16 (推定誤差:1.9076760487502457e-14)
1 量子力学の基礎(シュレディンガーの方程式)
1.1 波動関数
量子コンピュータで扱う粒子には、波としての性質と粒子としての性質があるようでこの性質のために量子の状態を扱うためには、波動関数と言われる関数を使用する。波動関数には記号ψ
を用いる。
\begin{array}{l}
\psi(x,y):波動関数\\
x:位置\\
y:時間
\end{array}
波動関数の絶対値の二乗がその地点に粒子が存在する確率を表す性質がある。そのため波動関数は以下の規格化条件を満たす必要がある。
\begin{array}{l}
\S 1.1(規格化条件)\\
\int_{-\infty}^{\infty}\left|\psi(x,t)\right|^2dx
\end{array}
1.2 シュレディンガー方程式
シュレディンガー方程式は波動関数の振る舞いを決定する方程式で、以下のように表される。
\begin{array}{l}
\S 1.2(シュレディンガー方程式)\\
(1)\quad i\hbar\frac{\partial\psi(x,t)}{\partial t}=\hat{H}(x,t)\psi(x,t)\\
i:虚数単位\\
\hbar:ディラック定数(1.055\times 10^{-34}[Js])\\
\hat{H}(x,t):ハミルトニアン
\end{array}
虚数単位の説明は省く。ディラック定数は、プランク定数(h)を2πで割った定数です。
ハミルトニアンは古典力学においては、要は系のエネルギーを表すもののようです。これにハットが付くことで量子力学へと転換されていることを意味する。このハットは、内部の運動量p
が運動量演算子に、位置x
が位置演算子に置き換えることを意味する。
\begin{array}{l}
\S 1.3 (ハミルトニアン[量子力学])\\
(2)\quad\hat{H}=\hat{T}+\hat{V}\\
(3)\quad\hat{T}=\frac{\hat{p}^2}{2m}\\
(4)\quad\hat{V}=V(\hat{x},t)\\
\hat{p}:運動量演算子\\
\hat{x}:位置演算子
\end{array}
ここで定義している波動関数は位置x
と時間t
で定義されている。このような表し方を位置表示(座標表示?)という。また、運動量と時間によって波動関数を表す方法を、運動量表示というらしい。
位置表示の場合には運動量演算子と位置演算子は以下のように変換できる。
\begin{array}{l}
\S 1.4(位置表示の演算子)\\
\hat{p}=\frac{\hbar}{i}\frac{\partial}{\partial x}\\
\hat{x}=x
\end{array}
ここで位置演算子と運動量演算子は正準交換条件を満たす必要がある。正準交換条件とは、
\begin{array}{l}
\S 1.5(正準交換条件)\\
[\hat{x},\hat{p}]=\hat{x}\hat{p}-\hat{p}\hat{x}=i\hbar
\end{array}
位置演算子と運動量演算子は↑のような形を満たさないと行けないらしい。
これらを踏まえて、シュレディンガー方程式は次のように書き換えることができる。
\begin{array}{l}
\S 1.6(シュレディンガー方程式)\\
i\hbar\frac{\partial\psi(x,t)}{\partial t}=\left[-\frac{\hbar^2}{2m}\frac{\partial^2}{\partial x^2}+V(x,t)\right]\psi(x,t)
\end{array}
1.3 ポテンシャルが時間に依存しない場合
ポテンシャルが時間に依存しない場合、ψを次のように二つの関数に分けて考える。
\psi(x,t)=\phi(x)T(t)
ここではこのような形となる解(変数分離解)を求める。これ以外の解の形については考えなくても良いみたい。理由はわからなかった。シュレディンガーの方程式にこれを代入すると、
\begin{align}
i\hbar\frac{d(\phi(x)T(t))}{d t} &=& -\frac{\hbar^2}{2m}\frac{d (\phi(x)T(t))}{d x}+V(x)\phi(x)T(t)\\
i\hbar\phi(x)\frac{d T(t)}{d t} &=& -\frac{\hbar^2}{2m}T(x)\frac{d \phi(x)}{d x}+V(x)\phi(x)T(t)
\end{align}
両辺をϕ(x)T(t)
で割ると、
i\hbar\frac{1}{T(t)}\frac{d T(t)}{d t}=\frac{1}{\phi(x)}\left[-\frac{\hbar^2}{2m}\frac{d^2 \phi(x)}{d x^2}+V(x)\phi(x)\right]
式を見ると、左辺にt右辺にxのみ変数がある状態となっている。左辺と右辺が常に等しいので、両辺は定数となる。ここで定数(分離定数)をEとおくと、
\begin{align}
E &=& i\hbar\frac{1}{T(t)}\frac{d T(t)}{d t}\\
E &=& \frac{1}{\phi(x)}\left[-\frac{\hbar^2}{2m}\frac{d^2 \phi(x)}{d x^2}+V(x)\phi(x)\right]
\end{align}
上の式を整理すると、
\frac{d T(t)}{d t}=-\frac{iE}{\hbar}T(x)
T(x)の微分がT(x)に定数を欠けたものとなっているので、この微分方程式を解くと指数関数の形になり、定数T0を使って、
T(x)=T_{0}e^{-i\omega t}\quad
ただし\omega=\frac{E}{\hbar}
ここから波動関数は単振動していることがわかる。またディラック定数はプランク定数を2πで割ったものなので、
\begin{array}{l}
\S 1.7 (アインシュタインの関係)\\
E=\hbar\omega=hv\\
v:振動数
\end{array}
またxについての式を変形することで時間に依存しないシュレディンガー方程式が得られる。
\begin{array}{l}
\S 1.8 (時間に依存しないシュレディンガー方程式)\\
\left[ -\frac{\hbar^2}{2m}\frac{d^2}{d x^2}+V \right]\phi(x)=E\phi(x)
\end{array}
このような式を固有方程式とよび、Eは固有エネルギー、φは固有エネルギー関数という。