5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rx(π/2)とHSHの結果が一致しない

Last updated at Posted at 2021-03-24

この記事について

$|0\rangle$から、$|i-\rangle$への回転に関して、

% 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}}


HSH\ket{0} \equiv\ket{i-}
\ \ \ \ \ \ \ \ 
Rx(\pi/2)\ket{0} \equiv\ket{i-}

どちらも、$\ket{i-}$となり計算結果が一致しそうですが、結果が一致しません。
果たして、何故でしょう。という、小ネタ(作業メモ)です。

また、他の量子コンピュータ関係の他の記事は、下記で紹介しています。

結論から

$Rx(\pi/2)$と$HSH$は、グローバル位相が異なります。なので計算結果がズレる。
確率振幅や相対位相は一致しているので、観測すると結果は同一となります。
ただし、シミュレータ等で計算過程の状態ベクトル等を取り出すと、
グローバル位相分ずれた結果となります。

問題の確認

Rx(π/2)|0>

X軸を中心に$\pi/2$回転なので、$Rx(\pi/2)\ket{0} \equiv\ket{i-}$となりそうです。

image.png

HSH|0>

最初の$H$で$\ket{+}$へ、$S$で$\ket{i}$へ、そして、$H$で$\ket{i-}$に到達します。

image.png

なお、HSHの回転の詳細は、下記をご確認ください。

計算結果

両者の計算結果を下記に整理します。なおQiskitでの計算のソースは、後述します。

$Rx(\pi/2)$の計算結果 $HSH$の計算結果
回路 image.png image.png
ブロッホ球
結果 [0.70710678+0.j 0. -0.70710678j] [0.5+0.5j 0.5-0.5j]
数式にすると $\ket{0}+i\ket{1}/\sqrt{2}$ $\frac{1+i}{2}\ket{0}+\frac{1-i}{2}\ket{1}$

グローバル位相をくくりだす

この2つの実行結果ですがグローバル位相をくくりだすと、両者とも$\ket{i-}$となります。

Rx(\pi/2)\ket{0} = \frac{1}{\sqrt{2}}(\ket{0} - i\ket{1}) = \ket{i-}

一方で、

HSH\ket{0} = \frac{(1+i)}{2}\ket{0} + \frac{(1-i)}{2}\ket{1}

ですが、後者は、

\displaylines{
\frac{(1+i)}{2}\ket{0} + \frac{(1-i)}{2}\ket{1}
=\frac{(1+i)}{2}\ket{0} -i \frac{(1+i)}{2}\ket{1}
\\
=\frac{(1+i)}{\sqrt{2}} \times \color{red}{\frac{\ket{0}-i\ket{1}}{\sqrt{2}}} 
\\
=\frac{(1+i)}{\sqrt{2}}\color{red}{\ket{i-}}
}

と式変形できるので、

  • グローバル位相を無視すると、結果が一致する。一方で、
  • シミュレータで状態ベクトルを取得すると、グローバル位相も含まれた値が得られる
  • ブロッホ球上では、グローバル位相は無視されるので、結果が一致しているように見える

という落ちでございました。

(おまけ)ソース

Qiskitで計算してみたソースを掲載しておきます。(簡素なもので恐縮です)

Rx(π/2)|0>

from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_bloch_multivector
import math

# Rx(π/2)|0>
qc = QuantumCircuit(1)
qc.rx(math.pi/2,0)

print(qc)
state = Statevector.from_instruction(qc)
print(state.data)
plot_bloch_multivector(state,title="")

HSH|0>

# HSH|0>
qc = QuantumCircuit(1)
qc.h(0)
qc.s(0)
qc.h(0)

print(qc)
state = Statevector.from_instruction(qc)
print(state.data)
plot_bloch_multivector(state,title="")
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?