我正在研究Cirq,需要在量子位上执行某些酉运算。为此,我在Cirq中使用MatrixGate()函数。与Qiskit不同的是,我找不到任何像分解或转换这样的函数来简化U3和CNOT的基本操作。
例如,如果我想执行以下操作,
为此,我在Qiskit中使用了以下代码。在Cirq寻找类似的东西。
qc=QuantumCircuit(2)
qc.unitary(U,[0,1])
qc=transpile(qc,basis_gates=['cx','u3'])
qc.draw(output='mpl')在Qiskit中使用Transpile函数后
我甚至尝试制定余弦-正弦分解算法,Qiskit用它来分解这些一元运算。正如论文中提到的,用于偏振光的量子电路,但它们并不会产生所需的分解。请提供帮助,建议:
发布于 2020-05-17 10:27:13
这种方法的一个例子是cirq.two_qubit_matrix_to_operations。它使用kak分解(cartan分解)来确定如何将一个酉矩阵转化为具有最小CZ门数的一系列运算。
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)打印(例如):
[[ 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───https://stackoverflow.com/questions/61835652
复制相似问题