如何在我的计算机上实现一组量子位?
我想熟悉量子计算的基础知识。如何在我的计算机上实现一组量子位?
熟悉它的好方法是编写非常基本的虚拟量子计算机。 从我所了解的情况来看,实现单个量子位的努力不能简单地被复制来实现两个量子位系统。但我不知道如何实现一个量子位。
如何实现量子位? 如何实现一组量子位?
我实际上并不知道答案,但开始阅读关于量子位的一个有趣的地方是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。每个可能的经典状态都有一个幅度。在量子位的情况下,传统状态仅仅是各种状态的正常位可以英寸
举例来说,如果你有三个位,那么你就需要一个复杂的重量为000
,001
,010
,011
, 100
,101
,110
和111
状态。
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。)
- 您可以使用哪些技巧来加速模拟?例如,如果只有少数状态不为零,或者如果量子位没有纠缠,则不需要执行完整的矩阵乘法。
- 用户如何告诉模拟该做什么?你怎么能代表用户正在发生的事情?有很多数字流过...