如何在QCL中进行两个量子比特“受控旋转”

时间:2013-07-30 02:09:41

标签: quantum-computing qcl

我正在尝试在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吗?

1 个答案:

答案 0 :(得分: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门。另外,它在&lt; 10 |上运行或者&lt; 11 |得到1 / sqrt(2)<10 | + 1 / sqrt(2)&lt; 11 |。

创建此实现后,我已经明白我不一定要生成一个精确的矩阵才能得到我想要的结果。另外,我学会了采用相移门!