はじめに
の記事で、下記のプロットについて書こうと思ったのですが、、、
書き始めたら意外に記事の量が膨らんでしまったので、こちらに切り出しました。
このグラフについて説明していきます。
サンプルコード
# https://qiskit.org/documentation/stubs/qiskit.visualization.plot_state_paulivec.html より引用
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_state_paulivec
%matplotlib inline
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
state = Statevector.from_instruction(qc)
plot_state_paulivec(state, color='midnightblue',
title="New PauliVec plot")
また、他の量子コンピュータ関係の他の記事は、下記で紹介しています。
% basic braket
\newcommand{\bra}[1]{\left\langle #1 \right|}
\newcommand{\ket}[1]{\left| #1 \right\rangle}
\newcommand{\bracket}[2]{\left\langle #1 \middle| #2 \right\rangle}
\newcommand{\ketbra}[2]{\left| #1 \right\rangle \left\langle #2 \right|}
\newcommand{\ketbraket}[3]{\left| #1 \right\rangle \left\langle #2 \middle| #3 \right\rangle}
% small-size
\newcommand{\bras}[1]{\left\langle {\scriptsize #1} \right|}
\newcommand{\kets}[1]{\left| {\scriptsize #1} \right\rangle}
\newcommand{\brackets}[2]{\left\langle {\scriptsize #1} \middle| {\scriptsize #2} \right\rangle}
\newcommand{\ketbras}[2]{\left| {\scriptsize #1} \right\rangle \left\langle {\scriptsize #2} \right|}
\newcommand{\ketbrakets}[3]{\left| {\scriptsize #1} \right\rangle \left\langle {\scriptsize #2} \middle| {\scriptsize #3} \right\rangle}
% Matrix
\newcommand{\tate}[2]{\begin{bmatrix} #1 \\ #2 \end{bmatrix}}
\newcommand{\yoko}[2]{\begin{bmatrix} #1 & #2 \end{bmatrix}}
\newcommand{\mtrx}[4]{\begin{bmatrix} #1 & #2 \\ #3 & #4 \end{bmatrix}}
% Matrix largesize
\newcommand{\tateL}[4]{\begin{bmatrix} #1 \\ #2 \\ #3 \\ #4 \end{bmatrix}}
\newcommand{\yokoL}[4]{\begin{bmatrix} #1 & #2 & #3 & #4 \end{bmatrix}}
計算アウトライン
状態ベクトル$\ket{\psi}$に対し、演算子$\rho=\ketbra{\psi}{\psi}$の計算結果をパウリ行列で分解した結果を表示している旨は、前回の記事で説明しておりますので、今回はこの計算を行い、上記グラフと一致するかを確認します。
サンプルコード
# https://qiskit.org/documentation/stubs/qiskit.visualization.plot_state_paulivec.html より引用
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_state_paulivec
%matplotlib inline
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
state = Statevector.from_instruction(qc)
plot_state_paulivec(state, color='midnightblue',
title="New PauliVec plot")
まずは、サンプルコードを見ると、この量子回路は2量子のもつれあいである$Bell$状態を作ります。
つまり、
\ket{\psi} = \ket{Bell} = \frac{1}{\sqrt{2}}(\ket{00} + \ket{11})
です。
- $\ket{00} = \ket{0} \otimes \ket{0}$とテンソル積となるので、$\ket{00},\ket{11}$等のテンソル積が必要になります
- また、パウリ行列も、$XX,YY,ZZ,II$等の行列のテンソル積となるので、こちらも事前に計算が必要です。
よって、
- まずは、計算に必要なテンソル積を事前に計算し
- 状態ベクトル$\ket{\psi}$に対して、演算子$\rho=\ketbra{\psi}{\psi}$を計算する
- qiskitのplot_state_paulivecと見比べてみる
の順で進めたいと思います。
テンソル積を計算する
事前の準備です。計算に必要なテンソル積を計算しておきます。
|00>
\ket{00} = \ket{0} \otimes \ket{0}
= \tate{1}{0} \otimes \tate{1}{0}
= \tate{1 \times \tate{1}{0}}{0 \times \tate{1}{0}}
= \tateL{1}{0}{0}{0}
|11>
\ket{11} = \ket{1} \otimes \ket{1}
= \tate{0}{1} \otimes \tate{0}{1}
= \tate{0 \times \tate{0}{1}}{1 \times \tate{0}{1}}
= \tateL{0}{0}{0}{1}
II
II = \mtrx{1}{0}{0}{1} \otimes \mtrx{1}{0}{0}{1}
= \mtrx{1 \mtrx{1}{0}{0}{1}}{0}{0}{1 \mtrx{1}{0}{0}{1}}
=
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
XX
XX = \mtrx{0}{1}{1}{0} \otimes \mtrx{0}{1}{1}{0}
= \mtrx{0}{1\mtrx{0}{1}{1}{0}}{1\mtrx{0}{1}{1}{0}}{0}
=
\begin{bmatrix}
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0
\end{bmatrix}
YY
YY = \mtrx{0}{-i}{i}{0} \otimes \mtrx{0}{-i}{i}{0}
= \mtrx{0}{-i\mtrx{0}{-i}{i}{0} }{i\mtrx{0}{-i}{i}{0} }{0}
=
\begin{bmatrix}
0 & 0 & 0 & -1 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
-1 & 0 & 0 & 0
\end{bmatrix}
ZZ
ZZ = \mtrx{1}{0}{0}{-1} \otimes \mtrx{1}{0}{0}{-1}
= \mtrx{1\mtrx{1}{0}{0}{-1}}{0}{0}{-1\mtrx{1}{0}{0}{-1}}
=
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & -1 & 0 & 0 \\
0 & 0 & -1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
ρ=|ψ><ψ|を計算する
やっと、準備が整いました。
\ket{\psi} = \frac{1}{\sqrt{2}}(\ket{00} + \ket{11})
=
\frac{1}{\sqrt{2}}
\left(
\tateL{1}{0}{0}{0} +
\tateL{0}{0}{0}{1}
\right) =
\frac{1}{\sqrt{2}}\tateL{1}{0}{0}{1}
の状態$\ket{\psi}$に対し、演算子$\rho=\ketbra{\psi}{\psi}$を計算します。
\rho =\ketbra{\psi}{\psi} = \frac{1}{\sqrt{2}}\frac{1}{\sqrt{2}}\tateL{1}{0}{0}{1}\yokoL{1}{0}{0}{1}
=
\frac{1}{2}
\begin{bmatrix}
1 & 0 & 0 & 1 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
1 & 0 & 0 & 1
\end{bmatrix}
この行列と、qiskitのグラフを見比べます
qiskitのplot_state_paulivecと見比べてみる
によると、
\displaylines{
\frac{1}{4}II + \frac{1}{4}XX - \frac{1}{4}YY + \frac{1}{4}ZZ
\\
= \frac{1}{4}
\left(
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
+
\begin{bmatrix}
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0
\end{bmatrix}
\color{red}{-1}
\begin{bmatrix}
0 & 0 & 0 & -1 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
-1 & 0 & 0 & 0
\end{bmatrix}
+
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & -1 & 0 & 0 \\
0 & 0 & -1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\right)
\\
=\frac{1}{4}
\begin{bmatrix}
2 & 0 & 0 & 2 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
2 & 0 & 0 & 2
\end{bmatrix}
=\frac{1}{2}
\begin{bmatrix}
1 & 0 & 0 & 1 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
1 & 0 & 0 & 1
\end{bmatrix}
}
よって、先程の演算子$\rho=\ketbra{\psi}{\psi}$の計算結果と一致するので、
\therefore \rho =\ketbra{\psi}{\psi}= 0.25II + 0.25XX - 0.25YY + 0.25ZZ
とplot_state_paulivecのグラフが、上記の通り、Bell状態をパウリゲートのテンソル積で表現されていることがわかりました。
まとめ
別出しでまとめてみましたが、やはり、数式多めとなってしまいました。
どなたかのお役に立てばと。。