如何在我的计算机上实现一组量子位?

问题描述:

我想熟悉量子计算的基础知识。如何在我的计算机上实现一组量子位?

熟悉它的好方法是编写非常基本的虚拟量子计算机。 从我所了解的情况来看,实现单个量子位的努力不能简单地被复制来实现两个量子位系统。但我不知道如何实现一个量子位。

如何实现量子位? 如何实现一组量子位?

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

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

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

@Qwertie引用的文章是一个很好的介绍。如果你想在你的计算机上实现这些功能,你可以使用模拟器libquantum,它可以在C库中实现复杂的量子操作。你可以看看this example看看使用代码是什么样的。

这些信息实际上存储在不同Qbits之间的交互中,所以没有实现1 Qbit不会转换为使用多个Qbit。我倒是觉得另一种方式,你可以玩就是用像QCL或谷歌QCP http://qcplayground.withgoogle.com/#/home现有的语言玩弄

示例代码

如果你想从简单的东西,但工作开始,你可以玩与此basic quantum circuit simulator on jsfiddle(约2千行左右,但大部分是UI的东西[绘图和点击]和数学的东西[定义复数和矩阵])。

国家

量子计算机的状态是一套复杂的权重,称为amplitudes。每个可能的经典状态都有一个幅度。在量子位的情况下,传统状态仅仅是各种状态的正常位可以英寸

举例来说,如果你有三个位,那么你就需要一个复杂的重量为000001010011100,101110111状态。

var threeQubitState = new Complex[8]; 

振幅必须满足约束条件:如果将它们的平方振幅相加,则结果为1。传统状态对应于具有幅度1一个幅度,而其他都是0:

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

操作

量子态

操作让你由传统状态之间流动它重新分配幅度,但流动您选择必须保留在所有情况下的平方幅度相加-1属性。更技术性地说,该操作必须对应于一些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矩阵。当将其应用于3-qubit状态的单个量子位时,如何将1-qubit操作转换为8x8矩阵? (使用Kronecker Product。)
  • 您可以使用哪些技巧来加速模拟?例如,如果只有少数状态不为零,或者如果量子位没有纠缠,则不需要执行完整的矩阵乘法。
  • 用户如何告诉模拟该做什么?你怎么能代表用户正在发生的事情?有很多数字流过...