概要
- Qiskit について, 学習サイト の サンプルプログラムを動かしてみた.
- 動作環境は, Google Colaboratory で行った
- 実行プログラム, 解説は, 下記の参照サイトをご覧ください
感想
- 本家のサイトの学習教材が非常に詳しいので, 今後も, 時間を見つけて, 確認していこうと思う.
量子ビット状態を表現する(練習問題(パターン①))
- 量子回路
- |0>, |1> カウント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[編集内容(量子回路)] from qiskit import QuantumCircuit, execute, Aer from qiskit.visualization import plot_histogram, plot_bloch_vector from math import sqrt, pi # 回路のシミュレーション方法を指定. backend = Aer.get_backend('statevector_simulator') # 初期状態を 定義 # ※ |0> を測定する確率が 1 / 3 となるようにしたい. initial_state = [1 / sqrt(3), sqrt(2) / sqrt(3)] # 量子回路作成(1bit). qc1 = QuantumCircuit(1) # 初期化操作を 0番目 の 量子ビットに適用. qc1.initialize(initial_state, 0) # 回路を実行. state = execute(qc1, backend).result().get_statevector() # 結果を表示. print(state) |
1 2 |
[出力結果] [0.57735027+0.j 0.81649658+0.j] |
1 2 3 4 5 6 |
[編集内容(|0>, |1> カウント)] # シミュレーションを行い, 結果を返す. result = execute(qc1, backend).result().get_counts() # グラフを表示. plot_histogram(result) |
1 2 |
[出力結果] ※グラフが表示された(|0> が 33.3%, |1> が 66.7% で 表示された). |
量子ビット状態を表現する(練習問題(パターン②))
- 量子回路
- |0>, |1> カウント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[編集内容(量子回路)] from qiskit import QuantumCircuit, execute, Aer from qiskit.visualization import plot_histogram, plot_bloch_vector from math import sqrt, pi # 回路のシミュレーション方法を指定. backend = Aer.get_backend('statevector_simulator') # 初期状態を 定義 # ※ |0> を測定する確率が 1 / 3 となるようにしたい. initial_state = [1 / sqrt(3), -complex(0, sqrt(2) / sqrt(3))] # 量子回路作成(1bit). qc2 = QuantumCircuit(1) # 初期化操作を 0番目 の 量子ビットに適用. qc2.initialize(initial_state, 0) # 回路を実行. state = execute(qc2, backend).result().get_statevector() # 結果を表示. print(state) |
1 2 |
[出力結果] [ 0.57735027+0.j -0. -0.81649658j] |
1 2 3 4 5 6 |
[編集内容(|0>, |1> カウント)] # シミュレーションを行い, 結果を返す. result = execute(qc2, backend).result().get_counts() # グラフを表示. plot_histogram(result) |
1 2 |
[出力結果] ※グラフが表示された(|0> が 33.3%, |1> が 66.7% で 表示された). |
量子ビット状態を表現する(練習問題(パターン③))
- 量子回路
- |0>, |1> カウント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[編集内容(量子回路)] from qiskit import QuantumCircuit, execute, Aer from qiskit.visualization import plot_histogram, plot_bloch_vector from math import sqrt, pi # 回路のシミュレーション方法を指定. backend = Aer.get_backend('statevector_simulator') # 初期状態を 定義 # ※ |0> を測定する確率が 1 / 5 となるようにしたい. initial_state = [1 / sqrt(5), -2 / sqrt(5)] # 量子回路作成(1bit). qc3 = QuantumCircuit(1) # 初期化操作を 0番目 の 量子ビットに適用. qc3.initialize(initial_state, 0) # 回路を実行. state = execute(qc3, backend).result().get_statevector() # 結果を表示. print(state) |
1 2 |
[出力結果] [ 0.4472136 +0.j -0.89442719+0.j] |
1 2 3 4 5 6 |
[編集内容(|0>, |1> カウント)] # シミュレーションを行い, 結果を返す. result = execute(qc3, backend).result().get_counts() # グラフを表示. plot_histogram(result) |
1 2 |
[出力結果] ※グラフが表示された(|0> が 20%, |1> が 80% で 表示された). |
量子ビット状態を表現する(練習問題(パターン④))
- 量子回路
- |0>, |1> カウント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[編集内容(量子回路)] from qiskit import QuantumCircuit, execute, Aer from qiskit.visualization import plot_histogram, plot_bloch_vector from math import sqrt, pi # 回路のシミュレーション方法を指定. backend = Aer.get_backend('statevector_simulator') # 初期状態を 定義 # ※ |0> を測定する確率が 1 / 5 となるようにしたい. initial_state = [1 / sqrt(5), complex(2 / 5, 4 / 5)] # 量子回路作成(1bit). qc4 = QuantumCircuit(1) # 初期化操作を 0番目 の 量子ビットに適用. qc4.initialize(initial_state, 0) # 回路を実行. state = execute(qc4, backend).result().get_statevector() # 結果を表示. print(state) |
1 2 |
[出力結果] [0.4472136+0.j 0.4 +0.8j] |
1 2 3 4 5 6 |
[編集内容(|0>, |1> カウント)] # シミュレーションを行い, 結果を返す. result = execute(qc4, backend).result().get_counts() # グラフを表示. plot_histogram(result) |
1 2 |
[出力結果] ※グラフが表示された(|0> が 20%, |1> が 80% で 表示された). |
量子ビット状態を表現する(練習問題(パターン⑤))
- 量子回路
- |0>, |1> カウント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[編集内容(量子回路)] from qiskit import QuantumCircuit, execute, Aer from qiskit.visualization import plot_histogram, plot_bloch_vector from math import sqrt, pi # 回路のシミュレーション方法を指定. backend = Aer.get_backend('statevector_simulator') # 初期状態を 定義 # ※ |0> を測定する確率が 3 / 11 となるようにしたい. initial_state = [sqrt(3) / sqrt(11), complex(1 / sqrt(33), sqrt(23) / sqrt(33))] # 量子回路作成(1bit). qc5 = QuantumCircuit(1) # 初期化操作を 0番目 の 量子ビットに適用. qc5.initialize(initial_state, 0) # 回路を実行. state = execute(qc5, backend).result().get_statevector() # 結果を表示. print(state) |
1 2 |
[出力結果] [0.52223297+0.j 0.17407766+0.83484711j] |
1 2 3 4 5 6 |
[編集内容(|0>, |1> カウント)] # シミュレーションを行い, 結果を返す. result = execute(qc5, backend).result().get_counts() # グラフを表示. plot_histogram(result) |
1 2 |
[出力結果] ※グラフが表示された(|0> が 27.3%, |1> が 72.7% で 表示された). |