Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/translations/ja/ch-labs/Lab02_Single_Qubit_Gates.ipynb
3855 views
Kernel: Python 3

ラボ2 単一量子ビットゲート

前提条件
Ch.1.3 量子ビット状態の表現
Ch.1.4 単一量子ビットゲート

その他の関連資料
ブロッホ球をかじる

import numpy as np # Importing standard Qiskit libraries from qiskit import QuantumCircuit, transpile, Aer, IBMQ, execute from qiskit.tools.jupyter import * from qiskit.visualization import * from ibm_quantum_widgets import * from qiskit.providers.aer import QasmSimulator # Loading your IBM Quantum account(s) provider = IBMQ.load_account() backend = Aer.get_backend('statevector_simulator')

パート1 - 状態|0>に対する単一量子ビットゲートの影響


ゴール

量子回路を作成して、状態|0>にさまざまな単一量子ビットゲートを適用し、量子ビットの状態と位相の変化を理解します。

Xゲートの0状態への適用Yゲートの0状態への適用Zゲートの0状態への適用Sゲートの0状態への適用

各ゲートの効果を確認するために、4量子ビットの単一回路を取得し、各量子ビットに異なるゲートを適用して、ブロッホ球上の各量子ビットの値をプロットします。

qc1 = QuantumCircuit(4) # perform gate operations on individual qubits qc1.x(0) qc1.y(1) qc1.z(2) qc1.s(3) # Draw circuit qc1.draw()
Image in a Jupyter notebook
# Plot blochshere out1 = execute(qc1,backend).result().get_statevector() plot_bloch_multivector(out1)
/opt/conda/lib/python3.8/site-packages/qiskit/visualization/bloch.py:69: MatplotlibDeprecationWarning: The M attribute was deprecated in Matplotlib 3.4 and will be removed two minor releases later. Use self.axes.M instead. x_s, y_s, _ = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)
Image in a Jupyter notebook
ゲートの適用に対する量子ビットへの影響状態ベクトルQSphere プロット状態ベクトル(測定後)
入力状態 = (1+0jamp;0+0j)\begin{pmatrix} 1 + 0j&0 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(0+0jamp;1+0j)\begin{pmatrix} 0 + 0j&1 + 0j \end{pmatrix}
- 量子ビットの確率は1で、状態は「1」

測定後、終了状態は位相0の「1」
altaltalt
入力状態 = (1+0jamp;0+0j)\begin{pmatrix} 1 + 0j&0 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(0+0jamp;0+1j)\begin{pmatrix} 0 + 0j&0 + 1j \end{pmatrix}
- 量子ビットの確率は1で、状態は「1」

測定後、終了状態は位相 pi/2 の「1」
altaltalt
入力状態 = (1+0jamp;0+0j)\begin{pmatrix} 1 + 0j&0 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(1+0jamp;0+0j)\begin{pmatrix} 1 + 0j&0 + 0j \end{pmatrix}
- 量子ビットの確率は1で、状態は「0」

測定後、終了状態は位相0の「0」
altaltalt
入力状態 = (1+0jamp;0+0j)\begin{pmatrix} 1 + 0j&0 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(1+0jamp;0+0j)\begin{pmatrix} 1 + 0j&0 + 0j \end{pmatrix}
- 量子ビットの確率は1で、状態は「0」

測定後、終了状態は位相0の「0」
altaltalt

パート2 - 状態|1>に対する単一量子ビットゲートの影響


ゴール

量子回路を作成して、状態|1>にさまざまな単一量子ビットゲートを適用し、量子ビットの状態と位相の変化を理解します。

Xゲートの1状態への適用Yゲートの1状態への適用Zゲートの1状態への適用S ゲートの1状態への適用

各ゲートの効果を確認するために、4量子ビットの単一回路を取得し、各量子ビットに異なるゲートを適用して、ブロッホ球上の各量子ビットの値をプロットします。

qc2 = QuantumCircuit(4) # initialize qubits qc2.x(range(4)) # perform gate operations on individual qubits qc2.x(0) qc2.y(1) qc2.z(2) qc2.s(3) # Draw circuit qc2.draw()
# Plot blochshere out2 = execute(qc2,backend).result().get_statevector() plot_bloch_multivector(out2)
ゲートの適用に対する量子ビットへの影響状態ベクトルQSphere プロット状態ベクトル(測定後)
入力状態 = (0+0jamp;1+0j)\begin{pmatrix} 0 + 0j&1 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(1+0jamp;0+0j)\begin{pmatrix} 1 + 0j&0 + 0j \end{pmatrix}
- 量子ビットの確率は1で、状態は「0」

測定後、終了状態は位相0の「0」
altaltalt
入力状態 = (0+0jamp;1+0j)\begin{pmatrix} 0 + 0j&1 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(01jamp;0+0j)\begin{pmatrix} 0 - 1j&0 + 0j \end{pmatrix}
- 量子ビットの確率は1で、状態は「0」

測定後、終了状態は位相 3pi/2 の「0」
altaltalt
入力状態 = (0+0jamp;1+0j)\begin{pmatrix} 0 + 0j&1 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(0+0jamp;1+0j)\begin{pmatrix} 0 + 0j&-1 + 0j \end{pmatrix}
- 量子ビットの確率は1で、状態は「1」

測定後、終了状態は位相 pi の「1」
altaltalt
入力状態 = (0+0jamp;1+0j)\begin{pmatrix} 0 + 0j&1 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態=(0+0jamp;0+1j)\begin{pmatrix} 0 + 0j&0 + 1j \end{pmatrix}
- 量子ビットの確率は1で、状態は「1」

測定後、終了状態は位相 pi/2 の「1」
altaltalt

パート3 - 状態|+>に対する単一量子ビットゲートの影響


ゴール

量子回路を作成して、状態|+>にさまざまな単一量子ビットゲートを適用し、量子ビットの状態と位相の変化を理解します。

Xゲートの+状態への適用Yゲートの+状態への適用Zゲートの+状態への適用Sゲートの+状態への適用

各ゲートの効果を確認するために、4量子ビットの単一回路を取得し、各量子ビットに異なるゲートを適用して、ブロッホ球上の各量子ビットの値をプロットします。

qc3 = QuantumCircuit(4) # initialize qubits qc3.h(range(4)) # perform gate operations on individual qubits qc3.x(0) qc3.y(1) qc3.z(2) qc3.s(3) # Draw circuit qc3.draw()
# Plot blochshere out3 = execute(qc3,backend).result().get_statevector() plot_bloch_multivector(out3)
ゲートの適用に対する量子ビットへの影響状態ベクトルQSphere プロット確率(ヒストグラム)
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (00.707jamp;0+0.707j)\begin{pmatrix} 0 - 0.707j&0 + 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&-0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0+0.707j)\begin{pmatrix} 0.707 + 0j&0 + 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt

パート4 - 状態|->に対する単一量子ビットゲートの影響


ゴール

量子回路を作成して、状態|->にさまざまな単一量子ビットゲートを適用し、量子ビットの状態と位相の変化を理解します。

Xゲートの-状態への適用Yゲートの-状態への適用Zゲートの-状態への適用Sゲートの-状態への適用

各ゲートの効果を確認するために、4量子ビットの単一回路を取得し、各量子ビットに異なるゲートを適用して、ブロッホ球上の各量子ビットの値をプロットします。

qc4 = QuantumCircuit(4) # initialize qubits qc4.x(range(4)) qc4.h(range(4)) # perform gate operations on individual qubits qc4.x(0) qc4.y(1) qc4.z(2) qc4.s(3) # Draw circuit qc4.draw()
# Plot blochshere out4 = execute(qc4,backend).result().get_statevector() plot_bloch_multivector(out4)
ゲートの適用に対する量子ビットへの影響状態ベクトルQSphere プロット確率(ヒストグラム)
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&-0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} -0.707 + 0j&0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&-0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0+0.707j0+0.707j)\begin{pmatrix} 0 + 0.707j&0 + 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&-0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&-0.707 + 0j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;00.707j)\begin{pmatrix} 0.707 + 0j&0 - 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt

パート5 - 状態|i>に対する単一量子ビットゲートの影響


ゴール

量子回路を作成して、状態|i>にさまざまな単一量子ビットゲートを適用し、量子ビットの状態と位相の変化を理解します。

Xゲートのi状態への適用Yゲートのi状態への適用Zゲートのi状態への適用Sゲートのi状態への適用

各ゲートの効果を確認するために、4量子ビットの単一回路を取得し、各量子ビットに異なるゲートを適用して、ブロッホ球上の各量子ビットの値をプロットします。

qc5 = QuantumCircuit(4) # initialize qubits qc5.h(range(4)) qc5.s(range(4)) # perform gate operations on individual qubits qc5.x(0) qc5.y(1) qc5.z(2) qc5.s(3) # Draw circuit qc5.draw()
# Plot blochshere out5 = execute(qc5,backend).result().get_statevector() plot_bloch_multivector(out5)
ゲートの適用に対する量子ビットへの影響状態ベクトルQSphere プロット確率(ヒストグラム)
入力状態 = (0.707+0jamp;0+0.707j)\begin{pmatrix} 0.707 + 0j&0 + 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0+0.707jamp;0.707+0j)\begin{pmatrix} 0 + 0.707j&0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0+0.707j)\begin{pmatrix} 0.707 + 0j&0 + 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0+0.707j)\begin{pmatrix} 0.707 + 0j&0 + 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0+0.707j)\begin{pmatrix} 0.707 + 0j&0 + 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;00.707j)\begin{pmatrix} 0.707 + 0j&0 - 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;0+0.707j)\begin{pmatrix} 0.707 + 0j&0 + 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&-0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt

パート6 - 状態|-i>に対する単一量子ビットゲートの影響


ゴール

量子回路を作成して、状態|-i>にさまざまな単一量子ビットゲートを適用し、量子ビットの状態と位相の変化を理解します。

Xゲートの-i状態への適用Yゲートの-i状態への適用Zゲートの-i状態への適用Sゲートの-i状態への適用

各ゲートの効果を確認するために、4量子ビットの単一回路を取得し、各量子ビットに異なるゲートを適用して、ブロッホ球上の各量子ビットの値をプロットします。

qc6 = QuantumCircuit(4) # initialize qubits qc6.x(range(4)) qc6.h(range(4)) qc6.s(range(4)) # perform gate operations on individual qubits qc6.x(0) qc6.y(1) qc6.z(2) qc6.s(3) # Draw circuit qc6.draw()
# Plot blochshere out6 = execute(qc6,backend).result().get_statevector() plot_bloch_multivector(out6)
ゲートの適用に対する量子ビットへの影響状態ベクトルQSphere プロット確率(ヒストグラム)
入力状態 = (0.707+0jamp;00.707j)\begin{pmatrix} 0.707 + 0j&0 - 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (00.707jamp;0.707+0j)\begin{pmatrix} 0 - 0.707j&0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;00.707j)\begin{pmatrix} 0.707 + 0j&0 - 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0+0.707j)\begin{pmatrix} -0.707 + 0j&0 + 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;00.707j)\begin{pmatrix} 0.707 + 0j&0 - 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0+0.707jamp;0+0.707j)\begin{pmatrix} 0 + 0.707j&0 + 0.707j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
入力状態 = (0.707+0jamp;00.707j)\begin{pmatrix} 0.707 + 0j&0 - 0.707j \end{pmatrix}

測定前に、
- 量子ビット状態 = (0.707+0jamp;0.707+0j)\begin{pmatrix} 0.707 + 0j&0.707 + 0j \end{pmatrix}
- 量子ビットは、「0」と「1」のそれぞれの状態に確率0.5であります。
altaltalt
import qiskit qiskit.__qiskit_version__