我正在尝试用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?
发布于 2013-07-31 04:59:28
经过深思熟虑后,我意识到我可以用复系数实现我想要的东西。下面是我对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|。
在创建这个实现之后,我已经认识到,我不一定要生成一个精确的矩阵才能得到我想要的结果。此外,我还学会了拥抱相移门!
https://stackoverflow.com/questions/17937220
复制相似问题