Nobisuke
Dekisugi
RAG
Privacy policy
2022/11/07 02:42
Dicke状態生成について実際に量子回路を作ってみます。 前回の記事はこちらです。
https://blueqat.com/yuichiro_minato2/850cb9fd-5f84-49ce-b099-71a2346914fc
使う論文は、
https://arxiv.org/pdf/1904.07358.pdf
まずは01の古典ビットから01/10のDicke状態を作ってみたいと思います。
回路はCXとCRYを使うそうですが、角度は、
のようです。blueqatに生存していたnumpyバックエンドを使います。(22/11/7現在TNバックエンドにCRYの実装を忘れていました)
|0> -----C--RY--C--
| | |
|0> --X--X--C---X--
Copy from blueqat import Circuit import numpy as np l=1 n=2 circ = Circuit(2).x[1].cx[0,1].cry(2*np.arccos(np.sqrt(l/n)))[1,0].cx[0,1] circ.run(backend="numpy")
array([0. +0.j, 0.70710678+0.j, 0.70710678+0.j, 0. +0.j])
Copy circ.m[:].run(backend="numpy",shots=1000)
Counter({'10': 530, '01': 470})
できました!もっと大きいのやります。
|001> + |010> + |100>
|0> ---------------C--RY--C--
| | |
|0> -----C--RY--C--X--C---X--
| | |
|0> --X--X--C---X------------
Copy circ2 = Circuit(3).x[2].cx[1,2].cry(2*np.arccos(np.sqrt(1/3)))[2,1].cx[1,2].cx[0,1].cry(2*np.arccos(np.sqrt(1/2)))[1,0].cx[0,1] circ2.run(backend="numpy")
array([0. +0.j, 0.57735027+0.j, 0.57735027+0.j, 0. +0.j,
0.57735027+0.j, 0. +0.j, 0. +0.j, 0. +0.j])
Copy circ2.m[:].run(backend="numpy",shots=1000)
Counter({'100': 360, '001': 299, '010': 341})
せっかくなのでをやってみます。
|011> + |110> + |101>
|0> ---------------C--RY--C--C--RY--C--
| | | | | |
|0> --X--C--RY--C--|--C---|--X--C---X--
| | | | | |
|0> --X--X--C---X--X--C---X------
CCRYを準備できてないので、CCRY = RY(theta)-CCX-RY(-theta)-CCXを使います。
Copy circ3 = Circuit(3).x[1,2].cx[1,2].cry(2*np.arccos(np.sqrt(1/3)))[2,1].cx[1,2].cx[0,2].ry(np.arccos(np.sqrt(2/3)))[0].ccx[2,1,0].ry(-np.arccos(np.sqrt(2/3)))[0].ccx[2,1,0].cx[0,2].cx[0,1].cry(2*np.arccos(np.sqrt(1/2)))[1,0].cx[0,1] circ3.run(backend="numpy")
array([0. +0.j, 0. +0.j, 0. +0.j, 0.57735027+0.j,
0. +0.j, 0.57735027+0.j, 0.57735027+0.j, 0. +0.j])
Copy circ3.m[:].run(backend="numpy",shots=1000)
Counter({'101': 314, '011': 339, '110': 347})
できました!完璧です!
Copy
© 2024, blueqat Inc. All rights reserved