如何将 N x N 酉矩阵分解为 2 或 1 量子位运算符?
How to decompose a N x N unitary matrix into 2- or 1-qubit operators?
给定一个 N x N 单一运算符 M,我想通过自己显式输入门(假设输入 IBMQ 作曲家)来构建一个执行与 M 相同操作的电路。我听说可以使用 Qiskit 内置函数分解 2 量子位运算符,但是我想知道在一般情况下是否存在这样的事情。
更具体地说,给定一个 N x N 酉算子 M,我想将它分解为某种形式
M_1 x M_2 x M_3 x ... x M_n
其中“x”表示张量积,M_i 是 2 或 1 量子位酉算子。
有没有办法以编程方式执行此操作,或者可以通过算法在纸上手工完成?
提前致谢!
如果你想实现自定义酉矩阵,有一种方法可以使用 Operator 函数来实现,就像这样(4x4 酉矩阵的示例):
from qiskit import QuantumRegister, QuantumCircuit
from qiskit.quantum_info.operators import Operator
q = QuantumRegister(2,"qreg")
qc = QuantumCircuit(q)
customUnitary = Operator([
[1, 0, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 1, 0, 0]
])
qc.unitary(customUnitary, [q[0], q[1]], label='custom')
qc.draw(output='mpl')
但如果您的目的是将其分解为 1 或 2 个量子位运算符,则问题会更加复杂,因为可以有多种方法来分解同一个酉元。
我认为你能做的最好的事情就是使用 Qiskit 转译器并定义你想要使用的一组门:
from qiskit.compiler import transpile
newCircuit = transpile(qc, basis_gates=['ry', 'rx', 'cx'], optimization_level = 3)
newCircuit.draw(output='mpl')
给定一个 N x N 单一运算符 M,我想通过自己显式输入门(假设输入 IBMQ 作曲家)来构建一个执行与 M 相同操作的电路。我听说可以使用 Qiskit 内置函数分解 2 量子位运算符,但是我想知道在一般情况下是否存在这样的事情。
更具体地说,给定一个 N x N 酉算子 M,我想将它分解为某种形式
M_1 x M_2 x M_3 x ... x M_n
其中“x”表示张量积,M_i 是 2 或 1 量子位酉算子。 有没有办法以编程方式执行此操作,或者可以通过算法在纸上手工完成?
提前致谢!
如果你想实现自定义酉矩阵,有一种方法可以使用 Operator 函数来实现,就像这样(4x4 酉矩阵的示例):
from qiskit import QuantumRegister, QuantumCircuit
from qiskit.quantum_info.operators import Operator
q = QuantumRegister(2,"qreg")
qc = QuantumCircuit(q)
customUnitary = Operator([
[1, 0, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 1, 0, 0]
])
qc.unitary(customUnitary, [q[0], q[1]], label='custom')
qc.draw(output='mpl')
但如果您的目的是将其分解为 1 或 2 个量子位运算符,则问题会更加复杂,因为可以有多种方法来分解同一个酉元。
我认为你能做的最好的事情就是使用 Qiskit 转译器并定义你想要使用的一组门:
from qiskit.compiler import transpile
newCircuit = transpile(qc, basis_gates=['ry', 'rx', 'cx'], optimization_level = 3)
newCircuit.draw(output='mpl')