1
0

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 3 years have passed since last update.

1量子ビットゲート(アダマール、位相ゲート)

Last updated at Posted at 2021-02-15

$\phantom{}$$
\newcommand\bra[1]{\mathinner{\langle{#1}|}}
\newcommand\ket[1]{\mathinner{|{#1}\rangle}}
\newcommand\bk[2]{\mathinner{\langle{#1}|{#2}\rangle}}
$

#はじめに
前回は1量子ビットゲートゲートのうち、パウリゲートを説明しました。今回は、1量子ビットゲートゲートであるアダマールゲートと位相回転ゲートについて説明します。他の最後に、動作をシミュレーションして確かめたいと思います。

参考にさせていただいた文献は以下になります。

1.Michael A. Nielsen & Isaac L. Chuang 「Quantum Computation and Quantum Information」
2.「量子コンピューティング 基本アルゴリズムから量子機械学習まで」オーム社(2020年)
3.「量子情報工学」森北出版(2016年)

#アダマールゲート

早速、アダマールゲートの行列表現を見てみましょう。

\begin{eqnarray}
H=\frac{1}{\sqrt{2}}
\left[
\begin{array}{cc}
1 & 1 \\
1 & -1 \\
\end{array}
\right]
\tag{1}
\end{eqnarray}

前回同様、Z基底で表現すると以下のようになります。

\begin{eqnarray}
H=\frac{1}{\sqrt{2}}
\left(
\ket{0}\bra{0}+\ket{1}\bra{0}+\ket{0}\bra{1}-\ket{1}\bra{1}
\right)
\tag{2}
\end{eqnarray}

アダマールゲートがどのようなはたらきをするのか見てみます。$H$ゲートを$\ket{0}$ と $\ket{1}$に作用させます。

\begin{eqnarray}
H\ket{0}
=
\frac{1}{\sqrt{2}}
\left[
\begin{array}{cc}
1  \\
1  \\
\end{array}
\right]
=\frac{1}{\sqrt{2}}
\left(
\ket{0}+\ket{1}
\right)
\tag{3}
\end{eqnarray}
\begin{eqnarray}
H\ket{1}
=
\frac{1}{\sqrt{2}}
\left[
\begin{array}{cc}
1  \\
-1  \\
\end{array}
\right]
=\frac{1}{\sqrt{2}}
\left(
\ket{0}-\ket{1}
\right)
\tag{4}
\end{eqnarray}

よって$H$ゲートは0と1の重ね合わせ状態を作ることが分かります。また、アダマールゲートを使うと、$X$ゲートと$Z$ゲートを相互に変換できます。これは行列計算をする、またはゲートの基底表示を計算することで導くことができます。

\begin{eqnarray}
HXH=Z , HZH=X
\tag{5}
\end{eqnarray}

#位相回転ゲート
次に位相回転ゲートを考えてみます。位相回転ゲートは次のように定義されます。

\begin{eqnarray}
Q(\phi)=
\left[
\begin{array}{cc}
    1 & 0 \\
    0 & e^{i\phi}
\end{array}
\right]
=\ket{0}\bra{1}+e^{i\phi}\ket{1}\bra{1}
\tag{6}
\end{eqnarray}

つまり位相回転ゲートは$\ket{1}$状態の位相を$i\phi$だけずらす操作だとわかります。$Z$ゲートは$\phi=\pi$とした特殊な場合と見ることもできます。

\begin{eqnarray}
Q(\pi)=
\left[
\begin{array}{cc}
    1 & 0 \\
    0 & -1
\end{array}
\right]
=Z
\tag{7}
\end{eqnarray}

特に$\phi=\pi/2$と$\phi=\pi/4$としたものはそれぞれ$S$ゲート、$T$ゲートと呼ばれます。

\begin{eqnarray}
S=Q(\frac{\pi}{2})=
\left[
\begin{array}{cc}
    1 & 0 \\
    0 & i
\end{array}
\right]
=\ket{0}\bra{1}+i\ket{1}\bra{1}
\tag{8}
\end{eqnarray}
\begin{eqnarray}
T=Q(\frac{\pi}{4})=
\left[
\begin{array}{cc}
    1 & 0 \\
    0 & \frac{1+i}{\sqrt{2}}
\end{array}
\right]
=\ket{0}\bra{1}+\frac{1+i}{\sqrt{2}}\ket{1}\bra{1}
\tag{9}
\end{eqnarray}

#動作確認
アダマールゲートと位相回転ゲートのはたらきを、シミュレーションしてみます。言語はjuliaを用いています。まずは必要な関数を定義していきます。

  • ini0関数でZ基底を用意
  • ini関数でZ基底での一般の初期状態を用意
  • $X$ゲートと$Z$ゲート、アダマールゲート、位相回転ゲートをini0関数を用いて定義
  • $S$ゲートと$T$ゲートは式(8)と式(9)を使って定義
function ini0(a,b)
    ket0 = [1 0]'
    ket1 = [0 1]'
    psi = a*ket0 + b*ket1
    return psi
end

function ini()
    #0,1 base
    ket0 = [1 0]'
    ket1 = [0 1]'

    #initial state
    a=rand()
    b=1-a
    a1=rand(Uniform(0,a))
    a2=a-a1
    b1=rand(Uniform(0,b))
    b2=b-b1

    psi = (sqrt(a1)+im*sqrt(a2))*ket0 + (sqrt(b1)+im*sqrt(b2))*ket1
    return psi
end

#X_gate
function Xgate(psi)
    X =  ini0(1,0) * ini0(0,1)' +  ini0(0,1) * ini0(1,0)'
    psi = X * psi
    return psi
end

#Z_gate
function Zgate(psi)
    Z = ini0(1,0) * ini0(1,0)' - ini0(0,1) * ini0(0,1)'
    psi = Z * psi
    return psi
end

#hadamard_gate
function Hgate(psi)
    H = 1/sqrt(2) * (ini0(1,0) * ini0(1,0)' + ini0(0,1) * ini0(1,0)' + ini0(1,0) * ini0(0,1)' - ini0(0,1) * ini0(0,1)')
    psi = H * psi
    return psi
end

#phase_gate
function Qgate(psi,phi)
    Q = ini0(1,0) * ini0(1,0)' + exp(im*(phi)) * ini0(0,1) * ini0(0,1)' 
    psi = Q * psi
    return psi
end

#S_gate
Sgate(psi) = Qgate(psi,pi/2)

#T_gate
Tgate(psi) = Qgate(psi,pi/4)

1.$T\ket{1}=\frac{1+i}{\sqrt{2}}\ket{1}$の確認

psi = ini0(0,1)
psi = Tgate(psi)

実行結果は以下のようになり、動作を確認できました。

2×1 Array{Complex{Float64},2}:
                0.0 + 0.0im
 0.7071067811865476 + 0.7071067811865475im

2.$HXH\ket{\psi}=Z\ket{\psi}$の確認
初期状態$\ket{\psi}$に$HXH$と$Z$を作用させたときの状態を比較します。各々状態を$\ket{\psi_1}$と$\ket{\psi_2}$としています。

psi = ini()
psi1 = copy(psi)
psi2 = copy(psi)
psi1 = Hgate(Xgate(Hgate(psi1)))
psi2 = Zgate(psi2)
println(psi1)
println(psi2)

実行結果は以下のようになり、結果が一致していることを確かめられました。

Complex{Float64}[0.7593834157482464 + 0.5913499159687791im; -0.135926404468029 - 0.23487468432897862im]
Complex{Float64}[0.7593834157482465 + 0.5913499159687792im; -0.135926404468029 - 0.23487468432897862im]

#おわりに
今回は1量子ビットゲートであるアダマールゲートと位相ゲートについて説明してきました。簡単なものですが、シミュレーションでゲートが正しく作用することが確認できました。次回は2量子ビットゲートを取り扱いたいと思います。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?