如何在计算机上实现一组量子比特?

时间:2012-03-23 20:15:51

标签: quantum-computing

我想熟悉量子计算基础知识。

熟悉它的一个好方法是编写非常基本的虚拟量子计算机。 根据我的理解,实现单个量子比特的努力不能简单地复制以实现两个量子比特系统。但我不知道如何实现单个量子位。

如何实施量子比特? 我如何实现一组量子比特?

4 个答案:

答案 0 :(得分:1)

示例代码

如果你想从一些简单但有效的东西开始,你可以玩这个basic quantum circuit simulator on jsfiddle(约2k行,但大部分是UI的东西[绘图和点击]和数学的东西[定义复数和矩阵])。

<强>国家

量子计算机的状态是一组复杂的权重,称为amplitudes。每种可能的经典状态都有一个振幅。在量子位的情况下,经典状态只是普通位可以处于的各种状态。

例如,如果您有三位,那么您需要000001010011100的复杂权重, 101110111个州。

var threeQubitState = new Complex[8];

幅度必须满足约束:如果加上它们的平方幅度,结果为1.经典状态对应于幅度为1的一个幅度,而其他幅度都为0:

threeQubitState[3] = 1; // the system is 100% in the 011 state

<强>运营

对量子态的操作允许您通过在经典状态之间流动来重新分配幅度,但是您选择的流必须保持平方幅度 - 加起来属性在所有情况下。从技术上讲,操作必须与某些unitary matrix对应。

var myOperation = state => new[] {
    (state[1] + state[0])/sqrt(2),
    (state[1] - state[0])/sqrt(2),
    state[2],
    state[3],
    state[4],
    state[5],
    state[6],
    state[7]
};
var myNewState = myOperation(threeQubitState);

......这些都是基础知识。状态是具有单位2范数的复数列表,操作是酉矩阵,测量状态的概率就是它的平方幅度。

<强>等

您可能需要考虑的其他事项:

  • 您想要包含哪些类型的操作?
  • 1-qubit操作是2x2矩阵,3-qubit操作是8x8矩阵。当将1-qubit操作应用于3-qubit状态的单个量子位时,如何将1-qubit操作转换为8x8矩阵? (使用Kronecker Product。)
  • 您可以使用哪些技巧来加速模拟?例如,如果只有少数状态非零,或者量子比特没有纠缠,则无需进行全矩阵乘法。
  • 用户如何告诉模拟该做什么?你怎么能代表用户发生了什么?周围有很多数字......

答案 1 :(得分:0)

我实际上并不知道答案,但是开始阅读有关量子比特的一个有趣的地方是this article。它没有详细描述纠缠的量子比特是如何工作的,但它暗示了所涉及的复杂性:

  

如果只有两个量子比特,这是多么复杂,如何   复杂的它会得到3或4,或100?事实证明,   N-qubit量子计算机的状态只能完全定义   当绘制为具有(4 ^ N-1)维度的空间中的点时。这意味着   我们需要4 ^ N个古老的时尚经典数字来模拟它。

注意,这是最大空间复杂度,例如对于15个量子位,大约10亿个数字(2 ^ 30 = 4 ^ 15)。它没有说明模拟的时间复杂性。

答案 2 :(得分:0)

@Qwertie引用的文章是一个非常好的介绍。如果要在计算机上实现这些功能,可以使用libquantum模拟器,它可以在C库中实现复杂的量子操作。您可以查看this example以查看使用代码的内容。

答案 3 :(得分:0)

信息实际上存储在不同Qbits之间的交互中,因此没有实现1 Qbit不会转换为使用多个Qbit。我认为你可以采用的另一种方式是使用现有语言,如QCL或谷歌QCP http://qcplayground.withgoogle.com/#/home来玩游戏