2013-07-30 43 views
0

两个量子位“控制旋转”我试图创建一个程序QCL(量子计算机语言),它随机产生六个国家之一(即骰子滚动程序)。虽然实现这个,我发现自己需要如下编写一个函数:我怎样才能在QCL

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没有明确说明矩阵?

回答

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-非门。另外,它在< 10 |上运行或者< 11 |产生1/sqrt(2)< 10 | + 1/sqrt(2)< 11 |。

创建这个实现之后,我已经了解到,为了得到我想要的结果,我不一定非得生成一个确切的矩阵。另外,我学会了拥抱相移门!