12. 任意酉矩阵门分解 (1)#

迄今为止,我们已经了解到,任意的量子计算可以看成作用在向量上的酉矩阵,我们还学习了许多单量子比特门和多量子比特门,我们也学习了一些非常基础的使用单量子门和双量子门的量子算法。更进一步,我们知道多量子比特门可以分解为单量子门和双量子门。

那么对于作用在任意数目的量子比特上的任意量子门,是否可以将其分解为单量子门和双量子门呢?如果可以,那我们将所使用的这些门的集合(一些单量子门和双量子门)称之为通用量子门

首先我们需要定义任意量子门,简单起见,不妨设 \(N\) 维向量空间的标准正交基为 \(\lbrace \left|0\right>, \left|1\right>, \ldots, \left|N-1\right>\rbrace\) ,那么作用在该空间上的任意量子门可以写作: $\( U = \left|\psi_0\right>\left<0\right| + \left|\psi_1\right>\left<1\right| + \cdots + \left|\psi_{N-1}\right>\left<N-1\right| \)\( 其中 \)\left|\psi_k\right>\( 形成一组单位正交基,\)\left<\psi_i|\psi_j\right> = \delta_{ij}\(,换言之,\)\left|\psi_k\right>$ 就是问题的输入。

\(U\)分解为二级酉矩阵#

首先我们需要知道二级酉矩阵是什么东西,它是这么定义的:对于一个 \(N\) 维单位阵 \(I_N\),选择两个下标 \(1 \leq i < j \leq N\) 和一个 \(2\times 2\) 的酉矩阵 \(\tilde{U}\),将 \(I_N\) 中对应下标的位置替换成 \(\tilde{U}\)

\[\begin{split} U = \begin{bmatrix} 1 & & & & & & \\ & \ddots & & & & & \\ & & a & & b & & \\ & & & \ddots & & & \\ & & c & & d & & \\ & & & & & \ddots & \\ & & & & & & 1 \\ \end{bmatrix} \quad \text{where } \tilde{U} = \begin{bmatrix} a & b \\ c & d \end{bmatrix} \end{split}\]

如何将 \(U\) 分解为一系列二级酉矩阵的乘积?具体的策略是一步步地将 \(U\) 变换成单位阵。

例如,我们想要找到另一个酉矩阵 \(W_0\) (我们希望它有一个简单的结构)使得:

\[ W_0^{-1} U = \left| 0 \right> \left< 0 \right| + | \tilde{\psi} _1 \rangle \langle 1 | + \cdots + | \tilde{\psi} _{N-1} \rangle \langle N-1 | \]

其中 \(|\tilde{\psi}_k\rangle \equiv W_0 |\psi_k\rangle\)

注意到,由于 \(W_0\)\(U\) 都是酉矩阵,所以 \(W_0^{-1}U\) 还是酉矩阵,根据酉矩阵的单位正交性(酉矩阵的每一行组成的向量单位正交,每一列组成的向量单位正交),对于 \(k>0\)\(\langle 0|\tilde{\psi}_k\rangle = 0\)

不断持续这一过程,我们得到: $\( W_{N-2}^{-1} \cdots W_{1}^{-1} W_0^{-1} U = |0\rangle\langle 0| + |1\rangle\langle 1| + \cdots |N-1\rangle \langle N-1| = I \)\( 因此,我们得到了 \)U\( 的分解: \)\( U = W_0 W_1 \cdots W_{N-2} \)$

下面我们将说明怎么用二级酉矩阵构造 \(W_k\)

对于矩阵的第一列 \(|\psi_0\rangle\) $\( U |0\rangle = |\psi_0\rangle = a_0 |0\rangle + a_1 |1\rangle + \cdots a_{N-1} |N-1\rangle \)$

写成矩阵形式 $\( U = \begin{bmatrix} a_0 & \star & \star & \cdots & \star \\ a_1 & \star & \star & \cdots & \star \\ a_2 & \star & \star & \cdots & \star \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{N-1} & \star & \star & \cdots & \star \end{bmatrix} \)$

我们选取 \(W_0\) 使得它和 \(U\)\(|0\rangle\) 的作用效果相同,即 \(W_0 |0\rangle = U |0\rangle = |\psi_0\rangle\) ,这样一来 \(W_0^{-1} U |0\rangle = |0\rangle\)\(W_0\) 的矩阵第一列和 \(U\) 相同: $\( W_0 = \begin{bmatrix} a_0 & \star & \star & \cdots & \star \\ a_1 & \star & \star & \cdots & \star \\ a_2 & \star & \star & \cdots & \star \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{N-1} & \star & \star & \cdots & \star \end{bmatrix} \)$

我们可以把 \(U\) 写作 $\( U = W_0 |0\rangle \langle 0| + |\psi_1\rangle\langle 1| + \cdots + |\psi_{N-1}\rangle \langle N-1| \)$

因此 $\( W_0^{-1}U = |0\rangle\langle 0| + | \tilde{\psi} _1 \rangle \langle 1| + \cdots | \tilde{\psi} _{N-1} \rangle \langle N-1| \)$

\(W_0^{-1}U\) 记作新的 \(U_1\) : $\( U_1 \equiv W_0^{-1}U = \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ 0 & * & * & \cdots & * \\ 0 & * & * & \cdots & * \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & * & * & \cdots & * \end{bmatrix} \)$

因为我们只能使用二级酉矩阵来构造 \(W_0\),下面直接给出构造: $\( W_0 = \omega_{N-2} \omega_{N-3} \cdots \omega_1 \omega_0 \)$

其中

\[\begin{split}\begin{align*} \omega_0 & = \begin{bmatrix} a_0 & b_0^\star & & & & \\ b_0 & -a_0^\star & & & & \\ & & 1 & & & \\ & & & \ddots & \\ & & & & 1 \end{bmatrix} \\ & = (I - |0\rangle \langle 0| - |1\rangle \langle 1|) + a_0 |0\rangle \langle 0| + b_0 |1\rangle \langle 0| + b_0^\star |0\rangle \langle 1| - a_0^\star|1\rangle \langle 1| \end{align*}\end{split}\]

其中 \(|b_0|^2 = |a_1|^2 + |a_2|^2 + \cdots |a_{N-1}|^2\)

容易验证 $\( \omega_0 |0\rangle = a_0 |0\rangle + b_0 |1\rangle \)$

对于 \(0 < k < N\), $$

\[\begin{align*} \omega_k & = \begin{bmatrix} 1 & & & & & \\ & \ddots & & & & \\ & & \frac{a_k}{b_{k-1}} & \left(\frac{b_k}{b_{k-1}}\right)^* & & \\ & & \frac{b_k}{b_{k-1}} & -\left(\frac{a_k}{b_{k-1}}\right)^* & & \\ & & & & \ddots & \\ & & & & & 1 \end{bmatrix} \\ & = \left(I - |k\rangle\langle k| - |k+1\rangle\langle k+1|\right) \\ & + \frac{a_k}{b_{k-1}}|k\rangle\langle k| + \frac{b_k}{b_{k-1}}|k+1\rangle\langle k| \\ & + \left(\frac{b_k}{b_{k-1}}\right)^* |k\rangle\langle k+1| - \left(\frac{a_k}{b_{k-1}}\right)^* |k+1\rangle\langle k+1| \end{align*}\]

$$

其中 \(|b_k|^2 = |a_{k+1}|^2 + \cdots |a_{N-1}|^2\)

容易验证对于 \(0 \leq k < N\) 有 $\( \omega_k \omega_{k-1} \cdots \omega_1 \omega_0 |0\rangle = a_0 |0\rangle + a_1 |1\rangle + \cdots + a_{k} |k\rangle + b_{k} |k+1\rangle \)$

因此 $\( W_0 |0\rangle = \omega_{N-2} \cdots \omega_1 \omega_0 |0\rangle = |\psi_0\rangle \)$

另一种方法#

下面介绍另一种分解为二级酉矩阵的方法,该方法使用类似于「高斯消元」的思想。

下面以 \(3\times 3\) 的矩阵为例,对于任意 \(3\times 3\) 的酉矩阵 \(U\),可以写作 $\( U = \begin{bmatrix} a & d & g \\ b & e & h \\ c & f & j \end{bmatrix} \)$

我们要找到一系列二级酉矩阵 \(U_1, \ldots , U_3\) 使得 $\( U_3 U_2 U_1 U = I \)\( 那么我们就找到了分解 \)\( U = U_1^\dagger U_2^\dagger U_3^\dagger \)$

我们使用初等行变换,首先考虑削去 \(b\)

  • 如果 \(b=0\),那么令 \(U_1 = I\);

  • 如果 \(b \neq 0\),那么令

\[\begin{split} U_1 = \begin{bmatrix} \frac{a^\star}{\sqrt{|a|^2 + |b|^2}} & \frac{b^\star}{\sqrt{|a|^2 + |b|^2}} & 0 \\ \frac{b}{\sqrt{|a|^2 + |b|^2}} & \frac{-a}{\sqrt{|a|^2+ |b|^2}} & 0 \\ 0 & 0 & 1 \end{bmatrix} \end{split}\]

容易验证 \(U_1\) 将削去 \(b\),我们得到 $\( U_1 U = \begin{bmatrix} a' & d' & g' \\ 0 & e' & h' \\ c' & f' & j' \end{bmatrix} \)$

下面考虑削去 \(c'\)

  • 如果 \(c' = 0\),令 \(U_2 = I\);

  • 如果 \(c' \neq 0\),令

\[\begin{split} U_2 = \begin{bmatrix} \frac{{a'}^\star}{\sqrt{|a'|^2 + |c'|^2}} & 0 & \frac{{c'}^\star}{\sqrt{|a'|^2 + |c'|^2}} \\ 0 & 1 & 0 \\ \frac{c'}{\sqrt{|a'|^2 + |c'|^2}} & 0 & \frac{-a'}{\sqrt{|a'|^2 + |c'|^2}} \end{bmatrix} \end{split}\]

削去后,矩阵为 $\( U_2 U_1 U = \begin{bmatrix} a'' & d'' & g'' \\ 0 & e'' & h'' \\ 0 & f'' & j'' \end{bmatrix} \)\( 因为结果依然为酉矩阵,所以每一行每一列都是单位向量,所以 \)a'' = 1\(,\)d'' = g'' = 0$。

我们令 $\( U' = U_2 U_1 U = \begin{bmatrix} 1 & 0 & 0 \\ 0 & e'' & h'' \\ 0 & f'' & j'' \end{bmatrix} \)$ 继续上述过程,直至变成单位阵为止。

综上所述,对于任意 \(N\times N\) 的酉矩阵,存在一种将其分解为 \(O(N^2)\) 个二级酉矩阵的分解。

from copy import deepcopy
import numpy as np

def decompose(u):
    n = u.shape[0]
    arr = []
    for j in range(n-1):
        for i in range(j+1, n):
            w = np.identity(n, dtype=np.complex128)
            if np.allclose(u[i, j], 0):
                arr.append(w)
            else:
                a = u[j, j]
                b = u[i, j]
                c = np.sqrt(np.abs(a)**2 + np.abs(b)**2)
                w[j, j] = a.conj() / c
                w[j, i] = b.conj() / c
                w[i, j] = b / c
                w[i, i] = -a / c
                arr.append(w)
            u = w @ u
    w = u.T.conj()
    arr.append(w)
    u = w @ u
    print(np.allclose(u, np.identity(n)))
    return arr

u = np.array([[1, 1, 1, 1],
              [1, 1j, -1, -1j],
              [1, -1, 1, -1],
              [1, -1j, -1, 1j]]) / 2
u0 = deepcopy(u)
arr = decompose(u)
v = np.identity(u.shape[0])
for a in arr:
    v = v @ a.T.conj()
print(np.allclose(v, u0))
True
True
from show_info import InfoTable

InfoTable('mindquantum', 'numpy')
Software Version
mindquantum0.11.0
numpy1.26.4
System Info
Python3.11.10
OSDarwin arm64
Memory17.18 GB
CPU Max Thread10
DateTue Sep 16 18:01:05 2025

习题#

Exercise 1#

尝试将下面的 \(U\) 分解为二级酉矩阵的乘积。

\[\begin{split} U = \frac{1}{2}\begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \end{bmatrix} \end{split}\]