Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/translations/ja/ch-appendix/linear_algebra.ipynb
3855 views
Kernel: Python 3

量子コンピューティング向け線形代数入門

from matplotlib import pyplot as plt import numpy as np from qiskit import * from qiskit.visualization import plot_bloch_vector

序論

線形代数は、量子コンピューティングの言語です。 このため、量子計算の驚くべき、かつおもしろい数多くの構造にたどり着くためには、その構造を構築する基本的な数学的概念を十分に理解することが肝要となります。このセクションの目的は、読者が量子コンピューティングの研究において活用できるようになるまで、基礎線形代数に関する知識の基盤を構築することにあります。

ベクトルとベクトル空間

まずは、量子計算において最も重要な数学量の1つであるベクトルについて議論することから、基礎線形代数の探究を始めましょう。

正式には、 ベクトル v|v\rangle は、ベクトル空間として知られる集合の元として定義されています。 より直感的で幾何学的な定義では、ベクトルは「方向と大きさの両方を持つ数学的な量」になります。 例えば、 xxyy 要素を持つベクトル (35)\begin{pmatrix} 3 \\ 5 \end{pmatrix} を考えましょう。このベクトルは、 xx 軸方向に 33 単位と yy軸方向に 55 単位を指す矢印として表示できます:

plt.figure() ax = plt.gca() ax.quiver([3], [5], angles='xy', scale_units='xy', scale=1) ax.set_xlim([-1, 10]) ax.set_ylim([-1, 10]) plt.draw() plt.show()
Image in a Jupyter notebook

ベクトルの「始点」を原点に配置する必要がないことに注意してください。重要なのは、正しい方向を指していることです。

量子コンピューティングでは、しばしば 状態ベクトル を扱います。状態ベクトルは、特定の量子状態に対応する空間内の特定の点を指します。 これは、しばしばブロッホ球を使用して可視化されます。 例えば、量子系の状態を表すベクトルは、ブロッホ球に囲まれたこの矢印のように見えます。これは、状態ベクトルが「指し示せる」すべての点の集合、いわゆる「状態空間」です:

plot_bloch_vector([1, 0, 0])
Image in a Jupyter notebook

この状態は、 0|0\rangle1|1\rangle を等しく重ね合わせたものに対応します(矢印は、球の上部である 0|0\rangle と下部である 1|1\rangle の間にありますよね)。ベクトルは球の表面のどこにでも回転させることができ、それぞれの点は異なる量子状態を表しているのです。

ベクトルのより正式な定義、ベクトルはベクトル空間の元であることに立ち戻りましょう。ここでまず、ベクトル空間を定義しなければなりません。 FF上の ベクトル空間 VV は、以下の2つの条件を満たすオブジェクト (ベクトル) の集合です。 1つ目の条件は、2つのベクトルa, b  V|a\rangle, \ |b\rangle \ \in \ Vベクトル加算 は、VVに含まれる3番目のベクトル a + b = c|a\rangle \ + \ |b\rangle \ = \ |c\rangleを生じること、2つ目の条件は、あるa  V|a\rangle \ \in \ V とある n  Fn \ \in \ Fスカラー乗算が、nan|a\rangle と表現でき、かつVVに含まれること、です。

では、基本的な例を使用して、上の定義を確認しましょう。 体 R\mathbb{R} 上の集合 R2\mathbb{R}^2 がベクトル空間であることを証明します。まず:

(x1y1) + (x2y2) = (x1 + x2y1 + y2)\begin{pmatrix} x_1 \\ y_1 \end{pmatrix} \ + \ \begin{pmatrix} x_2 \\ y_2 \end{pmatrix} \ = \ \begin{pmatrix} x_1 \ + \ x_2 \\ y_1 \ + \ y_2 \end{pmatrix}

が、R2\mathbb{R}^2 に含まれることを証明しましょう。まず、2つの実数の和は実数であり、新たに形成されたベクトルの両方の構成要素が実数になることから、これは明らかです。すなわち、このベクトルは R2\mathbb{R}^2 に含まれています。また:


nv = (nxny)  V    n  Rn |v\rangle \ = \ \begin{pmatrix} nx \\ ny \end{pmatrix} \ \in \ V \ \ \ \ \forall n \ \in \ \mathbb{R}

R2\mathbb{R}^2 に含まれることも証明しましょう。実数と実数の積は実数であり、新たなベクトルの値が実数になるので、この命題を証明できます。

行列と行列演算

次の基本概念である行列に関心を向けましょう。行列はベクトルを他のベクトルに変換する数学的オブジェクトです:


v  v = Mv|v\rangle \ \rightarrow \ |v'\rangle \ = \ M |v\rangle

一般的に、行列は次のような形で、数の「配列」として記述されます:


M = (12315i01 + i74)M \ = \ \begin{pmatrix} 1 & -2 & 3 \\ 1 & 5i & 0 \\ 1 \ + \ i & 7 & -4 \end{pmatrix}

行列の乗算を実行することで、行列をベクトルに「適用」することができます。 一般的に、2つの行列の乗算とは、1つ目の行列の最初の行を取り、 2つ目の行列の最初の列にある各「パートナー」要素と乗算(行の最初の数値は列の最初の数値、行の2番目の数値は列の2番目の数値……と乗算)することからなります。これらの乗算された数字は足し合わされ、新しい行列の最初の行の最初の要素になるのです。最初の行の残りの部分に入力するには、2つ目の行列の 2番目、3番目……の列に対してこのプロセスを繰り返します。 次に、1つ目の行列の2番目の行を取り、 2つ目の行列の各列についてこのプロセスを繰り返し、 2番目の行を取得します。1つ目の行列のすべての行について、このプロセスを実行します。その結果の行列が、私たちの求める新しい行列です。例を示しましょう:


(2051)(3121) = ((2)(3)+(0)(2)(2)(1) + (0)(1)(5)(3)+(1)(2)(5)(1) + (1)(1)) = (62174)\begin{pmatrix} 2 & 0 \\ 5 & -1 \end{pmatrix} \begin{pmatrix} -3 & 1 \\ 2 & 1 \end{pmatrix} \ = \ \begin{pmatrix} (2)(-3) + (0)(2) & (2)(1) \ + \ (0)(1) \\ (5)(-3) + (-1)(2) & (5)(1) \ + \ (-1)(1) \end{pmatrix} \ = \ \begin{pmatrix} -6 & 2 \\ -17 & 4 \end{pmatrix}

ご覧の通り、前に説明したプロセスだけを使って最終的な行列に到達できました。「行列」をベクトルに適用するという点に立ち戻ると、ベクトルは単に11列の行列と解釈できるので、行列の乗算はベクトルと全く同じように振る舞うことがお分かりになると思います。量子コンピューティングの世界には、量子計算を実行するために操作する量子状態ベクトルというものがあります。ベクトルは単に1列の行列と解釈できます。行列をベクトルに適用するには、上記と同じ行列の乗算手順に従います。私たちは実際、連続した量子ゲートを適用することで量子コンピュータ内の量子ビットを操作します。 各量子ゲートは、状態ベクトルに適用できる行列として表現できるため、状態が変化します。 例えば、最もよく知られる量子ゲートの1つはPauli-Xゲートであり、これは以下の行列によって表現されます:

σx = (0110)\sigma_x \ = \ \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}

このゲートは、古典的なNOT論理ゲートと同様に機能します。計算基底状態である 0|0\rangle1|1\rangle に、 1|1\rangle0|0\rangle にマップ (状態を「反転」)します。 実際の列ベクトルとして、以下の2つの基底状態を定義します;


0 = (10)       1 = (01)|0\rangle \ = \ \begin{pmatrix} 1 \\ 0 \end{pmatrix} \ \ \ \ \ \ \ |1\rangle \ = \ \begin{pmatrix} 0 \\ 1 \end{pmatrix}

このとき、この行列をそれぞれのベクトルに適用すると:


σx0 = (0110)(10) = ((0)(1) + (1)(0)(1)(1) + (0)(0)) = (01) = 1\sigma_x |0\rangle \ = \ \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \end{pmatrix} \ = \ \begin{pmatrix} (0)(1) \ + \ (1)(0) \\ (1)(1) \ + \ (0)(0) \end{pmatrix} \ = \ \begin{pmatrix} 0 \\ 1 \end{pmatrix} \ = \ |1\rangle

σx1 = (0110)(01) = ((0)(0) + (1)(1)(1)(0) + (0)(1)) = (10) = 0\sigma_x |1\rangle \ = \ \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 0 \\ 1 \end{pmatrix} \ = \ \begin{pmatrix} (0)(0) \ + \ (1)(1) \\ (1)(0) \ + \ (0)(1) \end{pmatrix} \ = \ \begin{pmatrix} 1 \\ 0 \end{pmatrix} \ = \ |0\rangle

となります。この行列が、状態ベクトルに対して期待通りに動作していることが確認できました。

しばしば量子計算では、エルミート行列ユニタリ行列という、2つの非常に重要な行列を扱います。前者は量子力学の研究においてより重要ですが、量子計算の研究で議論するためにも依然として必要です。後者は、量子力学と量子計算の両方において、比類のない重要性を持ちます。もし読者がこの線形代数のセクションから持ち帰るべきものが一つあるとしたら、それはユニタリ行列の考え方です。

まず、エルミート行列とは、その共役転置( \dagger 記号を使用して表現されます)が自分自身と等しい行列を言います。つまり、エルミート行列の虚数成分の符号を反転させ、その行列の要素を正対角線(左上隅から右下隅への対角線)で折り返すと、同じ行列が生成されます。例えば、量子計算で一般的に使用される行列であるPauli-Y行列は、エルミート行列です:


σy = (0ii0)  σy = (0(i)(i)0) = (0ii0) = σy\sigma_y \ = \ \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \ \Rightarrow \ \sigma_y^{\dagger} \ = \ \begin{pmatrix} 0 & -(i) \\ -(-i) & 0 \end{pmatrix} \ = \ \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \ = \ \sigma_y

どのようにiii-i の場所を切り替えたか (正対角線に対し反転しているため、ゼロは変更されていない)に注意してから、符号を反転させます。

ユニタリ行列はこれととてもよく似ています。 具体的には、ユニタリ行列とは、元の行列の共役転置行列が逆行列と等しい行列を言います。

ある行列 AA の逆行列 A1A^{-1} とは、以下のような行列を言います:

A1A = AA1 = IA^{-1} A \ = \ A A^{-1} \ = \ \mathbb{I}

ここで、I \mathbb{I} は単位行列です。 単位行列とは、正対角線(左上から右下へ)の成分が全て1、それ以外の成分はすべて0である行列です。それが単位行列と呼ばれるのは、それが他の行列に対し明らかに「効果がない」よう作用するからです。単位行列に他の行列を掛けることで、これを自分で証明できます。

行列が 2 × 22 \ \times \ 2 より大きくなると、逆行列の計算は非常に複雑になり、計算は通常コンピューターに任されます。 2 × 22 \ \times \ 2 行列の逆行列は、以下のように定義されます:


A = (abcd)  A1 = 1det A(dbca),A \ = \ \begin{pmatrix} a & b \\ c & d \end{pmatrix} \ \Rightarrow \ A^{-1} \ = \ \frac{1}{\text{det} \ A} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix},

ここで、det A\text{det} \ A は行列の行列式です。2 × 22 \ \times \ 2の行列では、det A = ad  bc\text{det} \ A \ = \ ad \ - \ bc になります。

量子コンピューティングにおいて、逆行列の計算はあまり重要ではありません。扱う行列の大部分はユニタリなので、逆行列は単に共役転置することで得られます。煩わしい処理を通じて、逆行列を厳密に計算する必要はないのです。

基本的な例を見てみましょう。 Pauli-Y行列は、エルミートかつユニタリです。つまり、Pauli-Y行列はその共役転置と等しく、その逆行列とも等しいのです。この行列が実際にユニタリであることを確認しましょう:


σy = (0ii0)     σy = (0ii0)  σyσy = ((0)(0)+(i)(i)(0)(i) + (i)(0)(i)(0) + (0)(i)(i)(i) + (0)(0)) = (1001) = I\sigma_y \ = \ \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \ \ \ \ \ \sigma_y^{\dagger} \ = \ \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \ \Rightarrow \ \sigma_y^{\dagger} \sigma_y \ = \ \begin{pmatrix} (0)(0) + (-i)(i) & (0)(-i) \ + \ (-i)(0) \\ (i)(0) \ + \ (0)(i) & (i)(-i) \ + \ (0)(0) \end{pmatrix} \ = \ \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \ = \ \mathbb{I}

ユニタリ行列が重要である理由は、ヒルベルト空間のセクション及び本教科書の量子力学サブトピックでさらに明らかになります。基本的な考え方は、ユニタリ行列の適用による量子状態の発展を、ある意味量子状態に「保存」することにあります。

スパン集合、線形従属、そして基底

ベクトル空間の構築について議論する場にやってきました。あるベクトル空間 VV を考えましょう。スパン集合に含まれるベクトルの線形結合として部分空間内の全てのベクトルが記述できるとき、ベクトルのある集合 SS は、ベクトル空間の部分空間 VS  VV_S \ \subset \ V (ベクトル空間演算の下で閉じた部分集合)を張る(span)と言います。

FF 上のあるベクトル空間内のベクトル v1, ..., vn|v_1\rangle, \ ..., \ |v_n\rangle の線形結合は、これらのベクトルの任意の合計として定義されます(もちろんこれは、別のベクトルとなり、v|v\rangleと呼ぶこととします):


v = f1v1 + f2v2 + ... + fnvn = i fivi|v\rangle \ = \ f_1 |v_1\rangle \ + \ f_2 |v_2\rangle \ + \ ... \ + \ f_n |v_n\rangle \ = \ \displaystyle\sum_{i} \ f_i |v_i\rangle

ここで、fif_iFFの要素です。ですので、空間を張るベクトルの集合があるとき、ベクトル空間内の他の任意のベクトル は、これらのベクトルの線形結合で記述できると、簡潔に言うことにしましょう。

ベクトル v1, ..., vn|v_1\rangle, \ ..., \ | v_n\rangle の集合は、以下のようなそれぞれのベクトルに対応する係数 bi  Fb_i \ \in \ Fが存在する場合、線形従属していると言います:


b1v1 + b2v2 + ... + bnvn = i bivi = 0,b_1 |v_1\rangle \ + \ b_2 |v_2\rangle \ + \ ... \ + \ b_n |v_n\rangle \ = \ \displaystyle\sum_{i} \ b_i |v_i\rangle \ = \ 0,

ここで、少なくとも一つの係数 bib_i はゼロではありません。これは、「ベクトルの集合は互いの線型結合として表現できる」という、より直感的な表現と同等です。例えば、集合 {v1, ..., vn}\{| v_1\rangle, \ ..., \ | v_n\rangle \} と対応する係数 {b1, ..., bn}\{b_1, \ ..., \ b_n \} があり、その線形結合が 00 に等しいとします。ゼロではない係数を持つベクトルが少なくとも1つ存在するので、その項を線形結合 bavab_a |v_a\rangleとします:

i bivi = bava + i, i  a bivi = 0  va = i, i  a bibavi = i, i  a civi\displaystyle\sum_{i} \ b_i |v_i\rangle \ = \ b_a |v_a\rangle \ + \ \displaystyle\sum_{i, \ i \ \neq \ a} \ b_i |v_i\rangle \ = \ 0 \ \Rightarrow \ |v_a\rangle \ = \ - \displaystyle\sum_{i, \ i \ \neq \ a} \ \frac{b_i}{b_a} |v_i\rangle \ = \ \displaystyle\sum_{i, \ i \ \neq \ a} \ c_i |v_i\rangle

ゼロでない係数がbab_aだけの場合、va|v_a\rangleがヌルベクトルになり、自動的に集合が線形従属になることは必然的に真です。もしそうでない場合、上で示されたように、va|v_a\rangle はゼロでないベクトルの線形結合として記述されます。その逆を証明するために、部分空間内の他のベクトルの線形結合として記述することができる部分空間 v1,..., vn|v_1\rangle, ..., \ |v_n\rangle 内に、あるベクトル va|v_a\rangle が存在すると仮定します。つまり:


va = sbsvs|v_a\rangle \ = \ \displaystyle\sum_{s} b_s |v_s\rangle

ここで、ss は部分空間のサブセット上で有効な添字です。すると:


va  sbsvs = va  (vs1 + ... + vsr) = 0|v_a\rangle \ - \ \displaystyle\sum_{s} b_s |v_s\rangle \ = \ |v_a\rangle \ - \ (|v_{s_1}\rangle \ + \ ... \ + \ |v_{s_r}\rangle) \ = \ 0

添字ssのサブセットに含まれない部分空間内の全てのベクトルに対して、係数(添字 qq )を 00 に等しいとします。すなわち、


va  (vs1 + ... + vsr) + (0)(vq1 + ... + vqt) = 0|v_a\rangle \ - \ (|v_{s_1}\rangle \ + \ ... \ + \ |v_{s_r}\rangle) \ + \ (0)(|v_{q_1}\rangle \ + \ ... \ + \ |v_{q_t}\rangle) \ = \ 0

これは、部分空間 v1, ..., vn|v_1\rangle, \ ..., \ | v_n\rangle のすべての元の線形結合であり、それが 00に等しいことを意味します。つまり、2つの線形依存関係の定義がお互いを意味していることの証明が完了しました。

では、基本的な例を考えましょう。R2\mathbb{R}^2 内の2つのベクトル、a = (1 0)|a\rangle \ = \ \begin{pmatrix} 1 \ 0 \end{pmatrix}b = (2 0)|b\rangle \ = \ \begin{pmatrix} 2 \ 0 \end{pmatrix}、の集合を考えます。R\mathbb{R}となるベクトル空間上の場を選んだとき、00となるようなベクトルの線形結合を生成することができます。例えば

2a  b = 02|a\rangle \ - \ |b\rangle \ = \ 0

集合内の他のベクトルの線形結合として表現できないベクトルの集合を、線形独立と言います。

基底 の概念は、単純に 線型独立なスパン集合 です。 この意味で、ベクトル空間の基底は、空間全体に張ることのできる最小の集合です。基底集合のサイズを、ベクトル空間の次元と呼びます。

基底とスパン集合が非常に重要である理由は、ベクトル空間を「縮小」することを可能にし、それらを大量ではなく少数のベクトルだけで表現できるからです。空間内のすべてのベクトルは基底ベクトルの線形結合にすぎないことが分かっていますので、基底空間に関する結論をベクトル空間全体に一般化することができます。

量子計算において、私たちがよく扱う基底の1つは、0, 1|0\rangle, \ |1\rangleです。これらの基底ベクトルの線型結合として、他の任意の量子ビット状態を記述することができます。 例えば、線形結合

0 + 12\frac{|0\rangle \ + \ |1\rangle}{\sqrt{2}}

は、0|0\rangle 基底状態と 1|1\rangle 基底状態の重ね合わせであり、基底ベクトル状態のいずれかにある状態を測定する確率が等しいことを表しています(線形結合内の「重み」や「各基底ベクトルの量」が等しくどちらも 1/21/\sqrt{2} ですから、ある意味直感的です)。

ヒルベルト空間、正規直交性、そして内積

ヒルベルト空間は、量子力学と量子計算における最も重要な数学的構成要素の1つです。厳密度を下げると、ヒルベルト空間はすべての量子状態ベクトルが「生きている」空間状態として考えることができます。 ヒルベルト空間と任意のランダムなベクトル空間とを区別する主な事実は、ヒルベルト空間には、2 つのベクトル間で実行されスカラー値を返す演算、 内積 が備えられていることです。

量子力学と量子計算のコンテキストにおいて、 2つの状態ベクトル間の内積は、1番目のベクトルが2番目のベクトルに沿っている量を表すスカラー値を返します。 このことから、特に、異なる量子状態における測定の確率を計算することができます(これは量子力学のサブトピックでより詳しく議論されます)。

ヒルベルト空間内の2つのベクトルa|a\rangleb|b\rangleに対し、内積を ab\langle a | b \rangle と記述します。ここで、a\langle a |a|a\rangle の共役転置で a|a\rangle^{\dagger} とも記述されます。すなわち、ヒルベルト空間内の2つのベクトル間の内積は次のようになります:


ab = (a1a2...an)(b1b2...bn) = a1b1 + a2b2 + ... + anbn\langle a | b \rangle \ = \ \begin{pmatrix} a_1^{*} & a_2^{*} & ... & a_n^{*} \end{pmatrix} \begin{pmatrix} b_1 \\ b_2 \\ . \\ . \\ . \\ b_n \end{pmatrix} \ = \ a_1^{*} b_1 \ + \ a_2^{*} b_2 \ + \ ... \ + \ a_n^{*} b_n

ここで * は、ベクトルの複素共役を表します。

量子系を表すヒルベルト空間の最も重要な条件の一つは、ベクトルのそれ自身の内積が1に等しいことです。つまり、ψψ = 1\langle \psi | \psi \rangle \ = \ 1です。これはいわゆる正規化条件で、本質的には、ベクトルの二乗の長さ (内積の定義により、ベクトルの各成分を二乗して合計したもの)が1に等しくなければならないことです。この物理的な意味は、特定の方向におけるベクトルの長さは、量子系がその特定の状態で測定される「確率振幅」を表現していることになります。明らかに、量子系が実際に存在する状態で測定される確率は11でなければならないことは言うまでもなく、ある特定の状態の量子系を見つける確率の合計は、1に等しいということになります (つまり ある 状態になる必要があるということです) 。

ブロッホ球を考えてみましょう:

plot_bloch_vector([0, 0, 0])
Image in a Jupyter notebook

この球面の表面は、量子ビットの状態ベクトル間の内積とともに、有効なヒルベルト空間になります。これに加えて、ブロッホ球の半径が 11 であるため、正規化条件が真であることが分かります。従って、各ベクトルの長さの二乗も1と等しくなければなりません。

ヒルベルト空間と内積についての最後の価値は、 ユニタリ行列との関係にあります。ユニタリ行列が量子計算において非常に重要である理由は、それらが内積を保持するためです。すなわち、ユニタリ行列を用いてベクトルをどのように変換しても、正規化条件は依然として真であることを意味します。 これは、以下の短い証明において実証されます:


ψψ = 1  ψ  Uψ = ψ  ψψ = (Uψ)Uψ = ψUUψ = ψψ = 1\langle \psi | \psi \rangle \ = \ 1 \ \Rightarrow \ |\psi\rangle \ \rightarrow \ U |\psi\rangle \ = \ |\psi'\rangle \ \Rightarrow \ \langle \psi' | \psi' \rangle \ = \ (U |\psi\rangle)^{\dagger} U|\psi\rangle \ = \ \langle \psi | U^{\dagger} U |\psi\rangle \ = \ \langle \psi | \psi \rangle \ = \ 1

これはつまり、ユニタリ発展は、ある量子状態を他の有効な量子状態に変化させることを意味します。ブロッホ球として表現される一量子ビットのヒルベルト空間に対して、ユニタリ変換とは、状態ベクトルの球面上の異なる点への回転に対応し、状態ベクトルの長さを変化させることではないのです。

固有ベクトルと固有値

次の形式の関係を考えてみましょう。

Av = λvA |v\rangle \ = \ \lambda |v\rangle

ここで AA は行列、λ\lambda はある数値です。ある行列 AA が与えられ、上の関係を満たすベクトル v|v\rangle および λ \lambda を探す必要があるとき、これらのベクトルを 固有ベクトル 、それぞれのベクトルに対応する係数を 固有値と呼びます。 固有ベクトルと固有値は、量子力学のコンテキストでは非常に重要な物理的意味を持っており、それはすなわち量子計算というコンテキストにおいても重要ということになります。あるAAが与えられた時、固有ベクトルと対応する固有値のセットを見つけるために、おもしろいトリックを利用します。 次のように式を書き直してみましょう:


Av  λv =0  (A  λI)v = 0A |v\rangle \ - \ \lambda |v\rangle \ = 0 \ \Rightarrow \ (A \ - \ \lambda \mathbb{I}) |v\rangle \ = \ 0

この方程式の両側を逆行列 (A  λI)1(A \ - \ \lambda \mathbb{I})^{-1} で乗算すると、v = 0|v\rangle \ = \ 0が得られます。これは本質的な解ではありません(固有ベクトルがヌルベクトルであることを許していないですし、どんな固有値/行列の組み合わせも、固有ベクトル-固有値の関係を満たしていません)。 したがって、許される固有ベクトルおよび固有値が存在するためには、行列 (A  λI)(A \ - \ \lambda \mathbb{I})非可逆だと仮定しなければなりません。逆行列は、次の形式であることを思い出してください:


M1 = 1det(M) F(M),M^{-1} \ = \ \frac{1}{\text{det} (M)} \ F(M),

ここで、F(M)F(M) は、 MM に依存する新しい行列 (行列が実際に存在するかどうかはここでは気にしません)です。 この式で私たちが興味を持つ部分は、行列式の逆数です。行列 MM の行列式が 00 の場合、逆数は定義できず、その逆もそうですので、行列 MM は非可逆式になります。したがって、以下が必要となります:


det(A  λI) = 0\text{det} (A \ - \ \lambda \mathbb{I}) \ = \ 0

これから、λ\lambdaを定義でき、λ\lambdaの各値を元の方程式に代入することで固有値を得ることができます! 例として、Pauli-Z行列 σz\sigma_z の固有ベクトル及び固有値を求めてみましょう。以下の式から始めます:


det(σz  λI) = det(1  λ001  λ) = (1  λ)(1  λ) = 1  λ2 = 0  λ = ±1\text{det} (\sigma_z \ - \ \lambda \mathbb{I}) \ = \ \text{det} \begin{pmatrix} 1 \ - \ \lambda & 0 \\ 0 & -1 \ - \ \lambda \end{pmatrix} \ = \ (-1 \ - \ \lambda)(1 \ - \ \lambda) \ = \ 1 \ - \ \lambda^2 \ = \ 0 \ \Rightarrow \ \lambda \ = \ \pm 1

行列式を解くときに得られるλ\lambdaについてのこの方程式は、固有多項式 と呼ばれます。そして、これらの値をそれぞれ元の方程式に代入することができます。まず、λ = 1\lambda \ = \ 1 から始めましょう:


(1001)v = v  (1001)(ab) = (ab) (ab) = (ab)\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} |v\rangle \ = \ |v\rangle \ \Rightarrow \ \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} \begin{pmatrix} a \\ b \end{pmatrix} \ = \ \begin{pmatrix} a \\ b \end{pmatrix} \ \Rightarrow \begin{pmatrix} a \\ -b \end{pmatrix} \ = \ \begin{pmatrix} a \\ b \end{pmatrix}

つまり、 aa は任意の値、 bb00ということになります。したがって、ベクトル (10)\begin{pmatrix} 1 \\ 0 \end{pmatrix} は、あの関係を満たすすべてのベクトルの基底を形成します。これはつまり、11の固有値に対応する固有ベクトルになります。λ = 1 \lambda \ = \ -1に対して同じことをしましょう:


(1001)v = v  (1001)(ab) = (ab) (ab) = (ab)\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} |v\rangle \ = \ -|v\rangle \ \Rightarrow \ \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} \begin{pmatrix} a \\ b \end{pmatrix} \ = \ \begin{pmatrix} -a \\ -b \end{pmatrix} \ \Rightarrow \begin{pmatrix} a \\ -b \end{pmatrix} \ = \ \begin{pmatrix} -a \\ -b \end{pmatrix}

今度は、bb は任意の数で、aa00 です。したがって、 基本ベクトル( 1-1 に対応する固有ベクトル) は (01)\begin{pmatrix} 0 \\ 1 \end{pmatrix} になります。 Pauli-Z行列の固有ベクトルが、量子計算の基底状態 0|0\rangle および 1|1\rangle であることに注意してください。これは偶然の一致ではありません。 例えば、 ZZ 基底で量子ビットを測定するということは、量子ビットの状態を、Z行列の固有ベクトル、0|0\rangle または 1|1\rangleのどちらか1つに落とし込む測定を実行していることにほかならないのです。

行列指数関数

行列指数の概念は、非常に独特なものですが非常に重要な概念です。 次の形式のユニタリ変換を見ることがあります:


U = eiγH,U \ = \ e^{i\gamma H},

ここで HH はあるエルミート行列で、 γ\gamma は実数です。この形式のすべての行列がユニタリであることは、とても簡単に証明できます。UU の共役転置を取りましょう:

U = (eiγH) = eiγHU^{\dagger} \ = \ \Big( e^{i\gamma H} \Big)^{\dagger} \ = \ e^{-i \gamma H^{\dagger}}

しかし、HHはエルミートですから、 H = HH^{\dagger} \ = \ H です。すなわち:


eiγH = eiγH  UU = eiγHeiγH = Ie^{-i \gamma H^{\dagger}} \ = \ e^{-i \gamma H} \ \Rightarrow \ U^{\dagger} U \ = \ e^{-i \gamma H} e^{i\gamma H} \ = \ \mathbb{I}

あなたはなぜ指数内部にある行列がまだ行列と考えられるのか疑問に思うかもしれません。指数関数をテイラー級数として展開すると、答えがより明確になります。テイラー級数は本質的に任意の関数を無限次数の多項式として書く方法であり、主な考え方は、多項式の項を選び、多項式に変換しようとしている関数上のある点 x0x_0を中心にすることです。つまり、その点での0次、1次、2次、3次……の微分係数が、元の関数と多項式で同じだということです。従って、テイラー級数を次の形式で記述します:


g(x) = n = 0 f(n)(x0) (x  x0)nn!,g(x) \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ f^{(n)}(x_0) \ \frac{(x \ - \ x_0)^n}{n!},

ここで、 g(x)g(x) は多項式、 f(x)f(x) は元の関数、 f(n)f^{(n)}ffnn 次微分、x0x_0 は関数で中心に据えた点です。近似ではないので、x0x_0自身は実は問題ではなく、x0 = 0x_0 \ = \ 0とすると、テイラー級数はマクローリン級数になります:


g(x) = n = 0 f(n)(0) xnn!g(x) \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ f^{(n)}(0) \ \frac{x^n}{n!}

そこで、f(x) = exf(x) \ = \ e^xとすると、マクローリン級数を使って等価の級数を作成できます。 exe^x の微分は単純に exe^x であり、明らかに e0 = 1e^0 \ = \ 1 ですから、以下のようになります:


g(x) = n = 0 xnn! = exg(x) \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{x^n}{n!} \ = \ e^x

つまり、ある行列 iγHi \gamma H について、以下のようになります:


eiγH = n = 0 (iγH)nn!e^{i \gamma H} \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(i \gamma H)^n}{n!}

これはより大きなの意味を持ちます。すなわち、行列の指数関数は行列ということです。 これは、行列の冪乗の無限和で、恐れを抱かせるように見えますが、少なくとも、行列指数関数が実際には行列であるという結論に達しました。そして、非常に重要な事実を示す時にやってきました。 B2 = IB ^2 \ = \ \mathbb{I}対合行列と呼びます) を満たす行列 BB について以下を考えます:

eiγB = cos(γ)I + isin(γ)Be^{i \gamma B} \ = \ \cos(\gamma) \mathbb{I} \ + \ i \sin(\gamma) B

マクローリン級数から始めます:


eiγB = n = 0 (iγB)nn!e^{i \gamma B} \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(i \gamma B)^n}{n!}

合計の各項のnnが偶数か奇数かに応じて、足し合わせを虚数部と実数部に分けられることに注意しましょう:


n = 0 (iγB)nn! = n = 0 (1)nγ2nB2n(2n)! + in = 0(1)nγ2n+1B2n+1(2n+1)!\displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(i \gamma B)^n}{n!} \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(-1)^n \gamma^{2n} B^{2n}}{(2n)!} \ + \ i \displaystyle\sum_{n \ = \ 0}^{\infty} \frac{(-1)^n \gamma^{2n + 1} B^{2n + 1}}{(2n + 1)!}

では、sinx\sin xcosx\cos x の両方について、マクローリン級数を求めましょう。f(x) = sinxf(x) \ = \ \sin xから始めます:


sinx = n = 0 fn(0)xnn!\sin x \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ f^{n}(0) \frac{x^n}{n!}

ご存知のように、sinx\sin x の微分はある意味循環しています(それぞれの矢印は前の関数を微分することを表しています):


sinx  cosx  sinx  cosx  sinx\sin x \ \rightarrow \ \cos x \ \rightarrow \ -\sin x \ \rightarrow \ -\cos x \ \rightarrow \ \sin x

sin(0) = 0\sin (0) \ = \ 0 and cos(0) = 1\cos (0) \ = \ 1ですから、偶数 nn のすべての項は 00 になります。


n = 0 fn(0)xnn! = n = 0 (1)nx2n + 1(2n + 1)!\displaystyle\sum_{n \ = \ 0}^{\infty} \ f^{n}(0) \frac{x^n}{n!} \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(-1)^n x^{2n \ + \ 1}}{(2n \ + \ 1)!}

これは元の方程式の奇数項に驚くほど似ています。事実、x = γBx \ = \ \gamma B とすると、全く同じになります。偶数項が f(x) = cosxf(x) \ = \ \cos x の時のマクローリン級数と同一であることを示した時とほぼ同じプロセスを実施します:

cosx = n = 0 fn(0)xnn!\cos x \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ f^{n}(0) \frac{x^n}{n!}

 cosx  sinx  cosx  sinx  cosx\Rightarrow \ \cos x \ \rightarrow \ -\sin x \ \rightarrow \ -\cos x \ \rightarrow \ \sin x \ \rightarrow \ \cos x

 n = 0 fn(0)xnn! = n = 0 (1)nx2n(2n)!\Rightarrow \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ f^{n}(0) \frac{x^n}{n!} \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(-1)^n x^{2n}}{(2n)!}

ここで、元の方程式に戻りましょう。 B2 = IB^2 \ = \ \mathbb{I} であることを思い出してください。 任意の nn に対して、以下が得られます。


B2n = (B2)n = In = IB^{2n} \ = \ \big( B^2 \Big)^n \ = \ \mathbb{I}^n \ = \ \mathbb{I}

B2n + 1 = B (B2)n = B In = B I = BB^{2n \ + \ 1} \ = \ B \ \big( B^2 \Big)^n \ = \ B \ \mathbb{I}^n \ = \ B \ \mathbb{I} \ = \ B

この新情報で全て置き換えると、次が得られます。


n = 0 (1)nγ2nB2n(2n)! + in = 0(1)nγ2n+1B2n+1(2n+1)! = In = 0 (1)nγ2n(2n)! + iBn = 0(1)nγ2n+1(2n+1)! = cos(γ)I + isin(γ)B\displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(-1)^n \gamma^{2n} B^{2n}}{(2n)!} \ + \ i \displaystyle\sum_{n \ = \ 0}^{\infty} \frac{(-1)^n \gamma^{2n + 1} B^{2n + 1}}{(2n + 1)!} \ = \ \mathbb{I} \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{(-1)^n \gamma^{2n}}{(2n)!} \ + \ i B \displaystyle\sum_{n \ = \ 0}^{\infty} \frac{(-1)^n \gamma^{2n + 1}}{(2n + 1)!} \ = \ \cos (\gamma) \mathbb{I} \ + \ i \sin (\gamma) B

この事実は量子計算においてとても便利なのです。パウリ行列を考えてみましょう:


σx = (0110)\sigma_x \ = \ \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}

σy = (0ii0)\sigma_y \ = \ \begin{pmatrix} 0 & i \\ -i & 0 \end{pmatrix}

σz = (1001)\sigma_z \ = \ \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}

これらの行列は、量子計算にとって非常に重要で、量子ビットを操作するために使われる最も基本的な「量子ゲート」の一部です。 これらの演算子は、ユニタリであるだけでなく、 エルミート でもあり 対合 でもあります。 これは、 eiγσk k  {x, y, z}e^{i \gamma \sigma_k} \ k \ \in \ \{x, \ y, \ z\} の形式の行列が、量子状態ベクトル (量子ビット) に作用できる有効なユニタリ行列であるだけでなく、今証明したばかりのサイン-コサイン関係を使用して表現できることを意味します。 このタイプのゲートが常に使われているように(この教科書の先のセクションで取り上げるように)、この事実は非常に強力であり、量子計算理論を通じて見られるものなのです。

このセクションを終了する前に、 行列指数関数に関して議論すべきもう一つの便利な事実があります。固有ベクトル v|v\rangle と対応する固有値 λ\lambdaを持つ行列 MM があるとき以下が成り立ちます:


eMv = eλve^{M} |v\rangle \ = \ e^\lambda |v\rangle

これは、より簡単に証明することができます:


eMv = n = 0 Mnvn! = n = 0 λnvn! = eλve^M |v\rangle \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{M^n |v\rangle}{n!} \ = \ \displaystyle\sum_{n \ = \ 0}^{\infty} \ \frac{\lambda^n |v\rangle}{n!} \ = \ e^\lambda |v\rangle

この事実も非常に役立ちます。あるハミルトニアン (特に変分回路)をシミュレートする量子回路を作成する際には、 eiγσze^{i \gamma \sigma_z} という形式のゲートが使用されることがよくあります。さて、 0|0\rangle および 1|1\rangleσz\sigma_z の固有値ですから、 eiγσze^{i \gamma \sigma_z} は、 0|0\rangleeiγe^{i \gamma} の位相を、1|1\rangleeiγe^{-i\gamma}の位相を足し合わせるということが、数学的に簡単に確定できます。 これにより、それぞれの計算基底状態に対するゲートの出力を数学的に知ることができるので、CNOTCNOT や位相/回転ゲートといったゲートをかなり簡単に構築できるようになるのです。

この事実は、σz\sigma_z ゲートの指数関数にだけ適用されるのではありません。例えば、 eiγσxe^{i \gamma \sigma_x} のゲートの結果を、 σx\sigma_x の固有ベクトル (0 + 1)/2(|0\rangle \ + \ |1\rangle)/\sqrt{2}(0  1)/2(|0\rangle \ - \ |1\rangle)/\sqrt{2}の上で確定することもできます。 σy\sigma_y 行列の指数関数についても同じことが当てはまります。

参考文献

[1] Cayley, Arthur. “A Memoir on the Theory of Matrices.” Philosophical Transactions of the Royal Society of London, vol. 148, 1858, pp. 17–37. JSTOR.

[2] A New Branch of Mathematics: The Ausdehnungslehre of 1844 and Other Works: Hermann Grassmann, Lloyd C. Kannenberg: 9780812692761