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?

Qiskit 状態図示いろいろ

Last updated at Posted at 2023-11-07

前回は量子ゲートについて紹介したので,今回はそれによって生成された状態がどのようなものであるかを視覚的に表現する方法について見てみます.

Blochベクトル

まずは1量子ビットの適当な回路を作ってみます.

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

# 1つの量子ビットを持つ量子回路を作成
circ = QuantumCircuit(1)

# 量子ビット0にアダマールゲートを適用
circ.h(0)

# 量子回路の描画(matplotlibを使用)
circ.draw('mpl')

image.png

この回路によって生成された状態のBlochベクトル表示は,plot_bloch_multivectorを用います.

# 量子回路の状態ベクトルを計算
state = Statevector(circ)

# Bloch球面上に状態ベクトルを可視化
plot_bloch_multivector(state)

ンロード.png

確かにアダマールゲートが作用した後の状態になっています.しれっと,QuantumCircuitであったcircStatevevotrであるstateに変えています.

複数の量子ビットが存在する場合についても対応しています.

from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_bloch_multivector
import numpy as np

# 3つの量子ビットを持つ量子回路を作成
circ = QuantumCircuit(3)

# 量子ビット0と1に制御Zゲート(CZ)を適用
circ.cz(0, 1)

# 量子ビット1にRXゲートを適用
circ.rx(np.pi / 2, 1)

# 量子ビット1と2にRYYゲートを適用
circ.ryy(np.pi / 6, 1, 2)

# 量子ビット0と2にRZXを適用
circ.rzx(np.pi / 8, 0, 2)

# 量子ビット0と1にRXXを適用
circ.rxx(np.pi / 8, 0, 1)

# 量子ビット0と2にRZXを再度適用
circ.rzx(np.pi / 4, 0, 2)

# 量子ビット0と1にRXXを再度適用
circ.rxx(np.pi / 4, 0, 1)

# 量子回路の状態ベクトルを計算
state = Statevector(circ)

# Bloch球面上に状態ベクトルを可視化
plot_bloch_multivector(state)

ダウンロ.png

ここで,それぞれのブロッホベクトルは部分トレースをとったものに対応していることに注意してください.
$$
\rho_{1} := \operatorname{Tr}_{23} (\rho _ {123})
$$
3量子ビットがエンタングルしているため,部分トレースをとった後の状態が混合状態となってしまっていることが,ブロッホベクトルの長さから理解できます.

密度演算子の成分をヒストグラム表示

これも1量子ビットの場合からコードを見てみます.

from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import DensityMatrix
from qiskit.visualization import plot_state_city

# 1つの量子ビットを持つ量子回路を作成
circ = QuantumCircuit(1)

# 量子ビット0にアダマールゲートを適用
circ.h(0)

# 量子回路の状態密度行列を計算
state = DensityMatrix(circ)

# 状態の都市プロットを生成し、色を指定
plot_state_city(state, color=['midnightblue', 'crimson'])

以下が出力結果です.
dens.png
アダマールゲートを作用させた後の密度演算子は,全ての行列要素が$1/2$のため,確かにそれが表現されていることが分かります1.また,ここでもQuantumCircuitDensityMatrxのクラスに変えています.

3量子ビットの場合は,以下のようになります.

# 3つの量子ビットを持つ量子回路を作成
circ = QuantumCircuit(3)

# 量子ビット0と1に制御Zゲート(CZ)を適用
circ.cz(0, 1)

# 量子ビット1にRXゲートを適用
circ.rx(np.pi / 2, 1)

# 量子ビット1と2にRYYを適用
circ.ryy(np.pi / 6, 1, 2)

# 量子ビット0と2にRZXを適用
circ.rzx(np.pi / 8, 0, 2)

# 量子ビット0と1にRXXを適用
circ.rxx(np.pi / 8, 0, 1)

# 量子ビット0と2にRZXを再度適用
circ.rzx(np.pi / 4, 0, 2)

# 量子ビット0と1にRXXを再度適用
circ.rxx(np.pi / 4, 0, 1)

# 量子回路の状態密度行列を計算
state = DensityMatrix(circ)

# 状態の都市プロットを生成し、色を指定
plot_state_city(state, color=['midnightblue', 'crimson'])

dens3.png
圧巻ですね.2次元の表示の方が良い方は,plot_state_hintonを使うことも可能です.

from qiskit.visualization import plot_state_hinton

# 状態のヒントンプロットを生成
plot_state_hinton(state)

hinton.png

終わりに

今回は状態の図示について見ました.他の図示の仕方もあるので,気になる方はドキュメントをご覧ください.

Version Information

Software Version
qiskit 1.3.1
System information
Python version 3.10.12
  1. 都市プロット?洒落てますね.

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?