https://qiskit.org/textbook/ch-states/representing-qubit-states.html#2.-The-Rules-of-Measurement- で書いていることは分かりにくいのだが、確率振幅の求め方を書いている。
$$
\begin{align*}
\ket{q_0} = \frac{1}{\sqrt{2}} \ket{0} + \frac{i}{\sqrt{2}} \ket{1}
\end{align*}
$$
という状態がある場合に、$\ket{0}$ の確率振幅を知りたければ内積をとって $\braket{0|q_0}$ を計算して、その絶対値の 2 乗 $|\braket{0|q_0}|^2$ をとれば良いということが書いてあるに過ぎない。
Quick Exercise
Create a state vector that will give a 1/3 probability of measuring $\ket{0}$.
は面白くない問題だが、[1/sqrt(3), sqrt(2)/sqrt(3)]
とかを放り込めば良い。
qc = QuantumCircuit(1) initial_state = [0.+1.j/np.sqrt(2),1/np.sqrt(2)+0.j] qc.initialize(initial_state, 0) #qc.measure_all() qc.save_statevector() qobj = assemble(qc) results = sim.run(qobj).result() state = results.get_statevector()
については、qc.measure_all()
をコメントアウトしていれは、状態ベクトル $\frac{1}{\sqrt{2}} \ket{0} + \frac{1}{\sqrt{2}} \ket{1}$ が得られるが、コメントアウトを解除すると、50% の確率で $\ket{0}$ だけか $\ket{1}$ だけが観測されることを言っている。$get_counts()$ を使う場合、ショット数の半分程度が $\ket{0}$ に対応し、残りが $\ket{1}$ に対応する。
ところで、
qc = QuantumCircuit(1) initial_state = [0.+1.j/np.sqrt(2),1/np.sqrt(2)+0.j] qc.initialize(initial_state, 0) qc.save_statevector() qc.measure_all() qobj = assemble(qc) results = sim.run(qobj).result() state = results.get_statevector()
とすると、測定より前に状態ベクトルをセーブすることになるので、測定をしても状態ベクトルは $\frac{1}{\sqrt{2}} \ket{0} + \frac{1}{\sqrt{2}} \ket{1}$ が得られる。シミュレータでは学習用途でそういうことができるようにしていると書いてある。