首先对长文本感到抱歉,我试图尽可能好地解释我的问题/误解。
对于我的学生项目,我必须实现一个简单的量子计算机的模拟。我现在想了解的是,不同的盖茨是如何一点一点地应用于 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);
我对此一无所知,我认为我的网站上有一个基本的误解,这让我的事情变得如此复杂。
任何帮助我走上正确的道路/轨道将不胜感激。
非常感谢。