首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cirq中量子电路的分解

Cirq中量子电路的分解
EN

Stack Overflow用户
提问于 2020-05-16 10:56:43
回答 1查看 1.2K关注 0票数 3

我正在研究Cirq,需要在量子位上执行某些酉运算。为此,我在Cirq中使用MatrixGate()函数。与Qiskit不同的是,我找不到任何像分解或转换这样的函数来简化U3和CNOT的基本操作。

例如,如果我想执行以下操作,

酉算子

为此,我在Qiskit中使用了以下代码。在Cirq寻找类似的东西。

代码语言:javascript
复制
qc=QuantumCircuit(2)
qc.unitary(U,[0,1])
qc=transpile(qc,basis_gates=['cx','u3'])
qc.draw(output='mpl')

幺正门

在Qiskit中使用Transpile函数后

转移单栅

我甚至尝试制定余弦-正弦分解算法,Qiskit用它来分解这些一元运算。正如论文中提到的,用于偏振光的量子电路,但它们并不会产生所需的分解。请提供帮助,建议:

  1. 用Cirq中的一些代码来分解电路或
  2. 向Cirq或Cirq输出齐克西电路的变通方法
  3. 一种更简单的分解单位运算的算法。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-17 10:27:13

这种方法的一个例子是cirq.two_qubit_matrix_to_operations。它使用kak分解(cartan分解)来确定如何将一个酉矩阵转化为具有最小CZ门数的一系列运算。

代码语言:javascript
复制
import cirq

desired_matrix = cirq.testing.random_unitary(dim=4)

synthesized_operations = cirq.two_qubit_matrix_to_operations(
    cirq.LineQubit(0),
    cirq.LineQubit(1),
    desired_matrix,
    allow_partial_czs=False,
)
circuit = cirq.Circuit(synthesized_operations)

synthesized_matrix = cirq.unitary(circuit)

cirq.testing.assert_allclose_up_to_global_phase(
    desired_matrix,
    synthesized_matrix,
    atol=1e-4
)

print(desired_matrix.round(3))
print(circuit)

打印(例如):

代码语言:javascript
复制
[[ 0.234-0.169j -0.81 +0.038j -0.327+0.138j -0.364-0.029j]
 [-0.503-0.407j  0.221-0.206j  0.063+0.144j -0.629-0.264j]
 [ 0.271+0.338j  0.337-0.128j -0.343+0.731j -0.165+0.052j]
 [ 0.504+0.236j  0.222+0.269j  0.244-0.371j -0.608-0.043j]]
0: ───PhX(-0.283)^0.631───@───PhX(0.673)^0.5────@───PhX(-0.375)^0.5───@───PhX(0.827)^0.147───Z^-0.269───
                          │                     │                     │
1: ───PhX(0.508)^0.338────@───PhX(0.65)^(5/6)───@───PhX(0.65)^0.995───@───PhX(0.302)^0.512───Z^-0.516───
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61835652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档