0

首先对长文本感到抱歉,我试图尽可能好地解释我的问题/误解。

对于我的学生项目,我必须实现一个简单的量子计算机的模拟。我现在想了解的是,不同的盖茨是如何一点一点地应用于 n-qubits 的。

例如,一个量子比特由两个复数 (a1, a2) 表示:

a1 |0> + a2 |1>

其中 a1 和 a2 是幅度 - 测量值的可能性。所有幅度的平方和总和必须始终等于 1。

所以我添加了一个 Hadamard Gate,由它的 2x2 Matrizes 表示

public void Hadamard(){
  gate.entries[0][0] = new ComplexNumber(1,0);
  gate.entries[0][1] = new ComplexNumber(1,0);
  gate.entries[1][0] = new ComplexNumber(1,0);
  gate.entries[1][1] = new ComplexNumber(-1,0);
  gate = (Matrix.scalarMultiplication(gate,Math.pow(2,-0.5)));
}

现在我将使用 a1 和 a2 与 Hadamard 门进行矩阵乘法。

因此,我将寄存器设置为复数的二维数组,表示位的状态为:

Register register = new Register(1); 

其中数字代表量子比特的数量。我们只创建一行来保存我们所有的状态,并且列的索引等于状态。所以例如

[0][0] = |0> and [0][1] = |1> 

如果我们说 a1=1+0i 和 a2=0+0i 乘法将如下所示:

 cmplx1 = cmplxMultiplicate(gate.entries[0][0],a1);
 cmplx2 = cmplxMultiplicate(gate.entries[0][1],a2);
 cmplx3 = cmplxMultiplicate(gate.entries[1][0],a1);
 cmplx4 = cmplxMultiplciate(gate.entires[1][1],a2);
 register.entries[0][0] = cmplxAddition(cmplx1,cmplx2); // 0.70710678118
 register.entries[0][1] = cmplxAddition(cmplx3,cmplx4); // 0.70710678118

现在问题来了——如果我们有多个 Qubit,我不知道该怎么做。例如,在两个量子位上,我会有

a1 |00> + a2 |01> + a3 |10> + a4 |11> 

四种不同的状态(或任何给定数字的 2^(numberOfQubits) 个状态)。但是我现在如何将所有 4 个州应用于我的 Hadamard Gate ?我是否必须做出所有可能的结果,将 a1 与每个值相乘,而不是 a2 等?像这样 :

 cmplx1 = cmplxMultiplicate(gate.entries[0][0],a1);
 cmplx2 = cmplxMultiplicate(gate.entries[0][1],a2);
 cmplx3 = cmplxMultiplicate(gate.entries[1][0],a1);
 cmplx4 = cmplxMultiplciate(gate.entries[1][1],a2);
 cmplx1 = cmplxMultiplicate(gate.entries[0][0],a1);
 cmplx2 = cmplxMultiplicate(gate.entries[0][1],a3);
 cmplx3 = cmplxMultiplicate(gate.entries[1][0],a1);
 cmplx4 = cmplxMultiplciate(gate.entries[1][1],a3);

我对此一无所知,我认为我的网站上有一个基本的误解,这让我的事情变得如此复杂。

任何帮助我走上正确的道路/轨道将不胜感激。

非常感谢。

4

1 回答 1

0

请注意,https ://en.wikipedia.org/wiki/Hadamard_transform#Quantum_computing_applications写道:

值得注意的是,由于 Hadamard 变换的张量积结构,计算量子 Hadamard 变换只是将 Hadamard 门单独应用于每个量子位。

因此,仅对单个门建模并对其进行多次实例化是有意义的。

但是我现在如何将所有 4 个州应用于我的 Hadamard Gate ?

门将应用于 2-qubit 寄存器的所有 4 个状态。它将对成对的系数进行操作,即仅在单个位上不同的系数,对应于应用门的位位置。

如果您想获得更大的图片,请先将 Hadamard 操作应用于左侧 qubit

((|00> + |10>) <00| + (|00> - |10>) <10| + (|01> + |11>) <01| + (|01> - |11>) < 11|) / sqrt(2)

然后到正确的量子位

((|00> + |01>) <00| + (|00> - |01>) <01| + (|10> + |11>) <10| + (|10> - |11>) < 11|) / sqrt(2)

用你的系数顺序将它写成矩阵(第一步右矩阵和第二步左矩阵)你得到

  ⎛1  1  0  0⎞ ⎛1  0  1  0⎞     ⎛1  1  1  1⎞
  ⎜1 -1  0  0⎟ ⎜0  1  0  1⎟     ⎜1 -1  1 -1⎟
½ ⎜0  0  1  1⎟ ⎜1  0 -1  0⎟ = ½ ⎜1  1 -1 -1⎟
  ⎝0  0  1 -1⎠ ⎝0  1  0 -1⎠     ⎝1 -1 -1  1⎠

如果你愿意,你可以用你的符号对乘积矩阵进行编码。但我宁愿找到一种方法来模拟将量子门操作应用于寄存器中的量子位子集,同时通过未修改的其他位。这可以通过扩展矩阵来实现,就像我在上面所做的那样,从传统的 2×2 变为我使用的 4×4。或者它可能是您评估矩阵时间向量乘积的方式,以便更好地利用这些矩阵的稀疏特性。

查看您的代码,我对您的register.entries[0][0]. 如果第一个索引应该是 qubit 的索引,第二个是那个 qubit 的值,那么表示不适合模拟纠缠情况。

于 2017-12-15T21:36:24.853 回答