概要
- Qiskit について, 学習サイト の サンプルプログラムを動かしてみた.
- 動作環境は, Google Colaboratory で行った
- 実行プログラム, 解説は, 下記の参照サイトをご覧ください
感想
- 本家のサイトの学習教材が非常に詳しいので, 今後も, 時間を見つけて, 確認していこうと思う.
単一量子ビットゲート
- 単一量子ビットゲート
- ブロッホ球
- 単一量子ビットゲート
- ブロッホ球
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(5) qc.x(0) qc.y(1) qc.z(2) qc.i(3) qc.h(4) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 |
[編集内容(ブロッホ球)] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # ブロッホ球で表示. backend = Aer.get_backend('statevector_simulator') out = execute(qc, backend).result().get_statevector() plot_bloch_multivector(out) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(5) qc.rz(pi/4, 0) qc.s(1) qc.sdg(2) qc.t(3) qc.tdg(4) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 |
[編集内容(ブロッホ球)] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # ブロッホ球で表示. backend = Aer.get_backend('statevector_simulator') out = execute(qc, backend).result().get_statevector() plot_bloch_multivector(out) |
複数量子ビットともつれ状態(練習問題含む)
- Statevector(|1>)
- Statevector(|+>)
- Statevector(|->)
- Statevector(|0>|1>)
- Statevector(|0>|+>)
- Statevector(|+>|1>)
- Statevector(|->|+>)
- Statevector
- 量子ビット(1/√2|00> + i/√2|01>)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(1) # Xゲート作用. qc.x(0) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(1) # Hゲート作用. qc.h(0) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(1) # X, Hゲート作用. qc.x(0) qc.h(0) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(2) # Xゲート作用. # ※ 複数量子ビット状態ベクトル上の単一量子ビットゲート で 解説されている通り, # X|q1> tensor H|q0>= (X tensor H)|q1q0> のように計算されるとのことなので, 演算順序に注意する. # -> |0>|1> = I|q1> tensor X|q0> = I|0> tensor X|0> = (I tensor X)|00> のような計算するように記述している. # なお, |00> は, I tensor X の 1列目 を取得すると理解する. qc.x(0) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(2) # Hゲート作用. # ※ 複数量子ビット状態ベクトル上の単一量子ビットゲート で 解説されている通り, # X|q1> tensor H|q0>= (X tensor H)|q1q0> のように計算されるとのことなので, 演算順序に注意する. # -> |0>|+> = I|q1> tensor H|q0> = I|0> tensor H|0> = (I tensor H)|00> のような計算するように記述している. # なお, |00> は, I tensor H の 1列目 を取得すると理解する. qc.h(0) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(2) # H, Xゲート作用. # ※ 複数量子ビット状態ベクトル上の単一量子ビットゲート で 解説されている通り, # X|q1> tensor H|q0>= (X tensor H)|q1q0> のように計算されるとのことなので, 演算順序に注意する. # -> |+>|1> = H|q1> tensor X|q0> = H|0> tensor X|0> = (H tensor X)|00> のような計算するように記述している. # なお, |00> は, H tensor X の 1列目 を取得すると理解する. qc.h(0) qc.x(1) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(2) # H, Xゲート作用. # ※ 複数量子ビット状態ベクトル上の単一量子ビットゲート で 解説されている通り, # X|q1> tensor H|q0>= (X tensor H)|q1q0> のように計算されるとのことなので, 演算順序に注意する. # -> |->|+> = XH|q1> tensor H|q0> = XH|0> tensor H|0> = (XH tensor H)|00> のような計算するように記述している. # なお, |00> は, XH tensor H の 1列目 を取得すると理解する. qc.h(0) qc.x(1) qc.h(1) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(1) # H, Sゲート作用. qc.h(0) qc.s(0) # 量子回路を表示. qc.draw('mpl') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[編集内容] from qiskit import * from math import pi from qiskit.visualization import plot_bloch_multivector # 量子ビットに対してゲート作用させてみる. qc = QuantumCircuit(2) # H, Sゲート作用. # |+> に S を 作用 = [1/√2, i/√2] は, 前問で確認した. # ※ 複数量子ビット状態ベクトル上の単一量子ビットゲート で 解説されている通り, # X|q1> tensor H|q0>= (X tensor H)|q1q0> のように計算されるとのことなので, 演算順序に注意する. # -> |0>(|+> に S を 作用) = I|q1> tensor (|+> に S を 作用)|q0> = I|0> tensor (|+> に S を 作用)|0> # = (I tensor (|+> に S を 作用))|00> のような計算するように記述している. # なお, |00> は, I tensor (|+> に S を 作用) の 1列目 を取得すると理解する. qc.h(0) qc.s(0) # 量子回路を表示. qc.draw('mpl') |