0

我正在尝试用QCL(量子计算机语言)创建一个程序,该程序随机生成 6 个状态中的 1 个(即滚模程序)。在实现这一点时,我发现自己需要编写一个函数,如下所示:

operator CondRot(qureg r, qureg c) {
    qureg newReg = r & c;
    complex half;

    half = 1/sqrt(2);
    Matrix4x4(1, 0, 0, 0,           // <00|
              0, 1, 0, 0,           // <01|
              0, 0, half, -half,    // <10|
              0, 0, half, half,     // <11|
              newReg);
}

我很失望,我发现自己需要明确地声明一个酉矩阵才能实现我的目标。我已经了解到,仅使用 Hadamard 矩阵和受控 V 矩阵,我应该能够生成我想要的任何酉矩阵。但是,如何做到这一点并不是很明显。你们中有人知道我如何在operator不明确说明矩阵的情况下重写它吗?

4

1 回答 1

0

经过一番思考,我意识到我可以用复杂的系数来实现我想要的。这是我的新实现CondRot

operator CondRot(qureg r, qureg c) {
    qureg joined = r & c;
    H(r);
    V(pi / 2, joined);
    H(r);
}

请注意,结果是一个复杂的矩阵:

[2   0   0   0
 0   2   0   0
 0   0   1+i 1-i
 0   0   1-i 1+i] * 1/2

虽然这个矩阵包含复数值,但它的平方是 C-Not 门。此外,它在 <10| 或 <11| 产生 1/sqrt(2)<10| + 1/sqrt(2)<11|。

在创建了这个实现之后,我了解到我不一定要产生一个精确的矩阵才能得到我想要的结果。此外,我学会了拥抱相移门!

于 2013-07-30T20:59:27.740 回答