LoginSignup
1
0

More than 1 year has passed since last update.

量子回路を1つのユニタリー行列で表したい・・・手計算ではなく、パソコンで。

Last updated at Posted at 2022-04-26

量子回路を1つのユニタリー行列で表したい

量子計算について学習するとき、「今の量子回路のユニタリー行列求めたいなー」って思う時があります。
もちろん、手計算で求められます。
でもqubitが多すぎて行列が大きくなった時は、思いのほか面倒です。
(あるいは単に面倒でやる気が出ない時)

そんな時に、パソコンにユニタリー行列を求めさせる方法について解説します。

1. Qiskitをインストールする

ネットを探したら方法はいくらでも見つかりますので、省略します。

2.Qiskit textbookをインストールする

以下のコマンドを実行します。

 pip install git+https://github.com/qiskit-community/qiskit-textbook.git#subdirectory=qiskit-textbook-src

3. 以下のプログラムを実行

from qiskit import *
from qiskit_textbook.tools import array_to_latex

# (1)ユニタリー行列を求めたい量子回路を作る。(ここでは例として、簡単な回路を作ります)
qc = QuantumCircuit(2)
qc.h(0)
qc.x(1)

# あとはコピペでOKです。
# (2)実行して、unitaryを取得します。
backend = Aer.get_backend('unitary_simulator')
unitary = execute(qc,backend).result().get_unitary()

# (3)綺麗に表示します
array_to_latex(unitary, pretext="\\text{Circuit = }\n")

latexを使うので、Jupiter Notebook上で実行するのが良いと思います。

実行結果

image.png

具体例を紹介

1qubitに作用させる際、$HZH = X$となります。

  1. Hゲートによって、基底をZ基底からX基底に変換
  2. X基底においてZゲートはNOTの作用
  3. Hゲートによって、基底をX基底からZ基底に変換

よって、$HZH=X$

確認してみましょう。

from qiskit import *
from qiskit_textbook.tools import array_to_latex

# (1)ユニタリー行列を求めたい量子回路を作る。
qc = QuantumCircuit(1)
qc.h(0)
qc.z(0)
qc.h(0)


# あとはコピペでOKです。
# (2)実行して、unitaryを取得します。
backend = Aer.get_backend('unitary_simulator')
unitary = execute(qc,backend).result().get_unitary()

# (3)綺麗に表示します
array_to_latex(unitary, pretext="\\text{Circuit = }\n")

実行結果

image.png

ちゃんと$X$ゲートになっていることがわかりますね。

(この記事は https://qiskit.org/textbook/ja/ch-gates/multiple-qubits-entangled-states.html を参照)

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