我正在尝试在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
吗?
答案 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 |。
创建此实现后,我已经明白我不一定要生成一个精确的矩阵才能得到我想要的结果。另外,我学会了采用相移门!