【Qiskit Textbook】1. Quantum State and Qubits
個人的メモ。
1.2 Atoms Computation
1量子ビットの加算はNOT, CNOT, Toffoliゲートで行える。
(CNOTゲートはなくても良いみたいです。)
Toffoliゲートは3量子ビットに間に働く制御ゲートでQiskitではccx
として提供されている。
実装はめんどくさそう。
1量子ビットの加算が行えればプログラミングではほとんど何でも出来る。
1.3 Representing Qubit States
初期状態の設定
initial_state = [0,1] qc.initialize(initial_state, 0)
initial_state
に設定するのは1量子ビットを2次元の複素ベクトルで展開した時の値を入力する。
qc.initialize
の第2引数には初期化するビットの番号を入力する。
上の例では0番目のビットを$(0, 1) = \left|{1}\right\rangle$に初期化している。
initial_state
で設定する係数の値が規格化した時に1になっていないとエラーになる。
statevector
svsim = Aer.get_backend('statevector_simulator') # Tell Qiskit how to simulate our circuit
statevector_simulator
は.get_statevector()
を使うと途中の量子状態を複素ベクトルとして取り出せる。(実際の量子コンピュータでは不可能)
qasm_simulator
には.get_statevector()
が備わっていない。(実際の量子コンピュータで行える操作に寄せている。)
Measurement
回路の途中に測定を行うとその時点で状態が確定してしまう。
qc = QuantumCircuit(1) # We are redefining qc initial_state = [0.+1.j/sqrt(2),1/sqrt(2)+0.j] qc.initialize(initial_state, 0) qc.measure_all() qobj = assemble(qc) state = svsim.run(qobj).result().get_statevector() print("State of Measured Qubit = " + str(state))
1.4 Single Qubit Gates
Outer Product
Xゲートをブラケット表記すると$ \left|{0}\right\rangle \left\langle{1}\right| + \left|{1}\right\rangle \left\langle{0}\right|$である。
このブラケットの状態から外積(Outer Product)を行うことで行列表示に出来る。
$\left|{0}\right\rangle = (1, 0)^{T}, \left|{1}\right\rangle = (0, 1)^{T}$なので$ \left|{0}\right\rangle \left\langle{1}\right|$は、
になる。
$ \left|{1}\right\rangle \left\langle{0}\right|$も同様にすると、
となる。
1.5 The Case for Quantum Computers
- デジタルコンピュータ:0と1の離散値を使う。エラーが多いけど訂正する仕組みが整っている。
- アナログコンピュータ:連続値を使用する。エラーが小さいため検出できず訂正しにくい。
- 量子コンピュータ:0と1の離散値だが連続的なパラメータで制御できる。粒子と波動の2重性に由来する。