1

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

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

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

4

4 回答 4

1

示例代码

如果你想从简单但有效的东西开始,你可以在 jsfiddle 上玩这个基本的量子电路模拟器(大约 2k 行,但其中大部分是 UI 的东西 [绘图和点击] 和数学的东西 [定义复数和矩阵])。

状态

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

例如,如果您有 3 个位,那么您需要为000001010011100101110111状态使用复权重。

var threeQubitState = new Complex[8];

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

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

运营

对量子态的操作让您可以通过在经典状态之间流动来重新分配幅度,但是您选择的流动必须在所有情况下都保留 squared-magnitudes-add-up-to-1 属性。从技术上讲,该操作必须对应于一些酉矩阵

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 范数的复数列表,操作是酉矩阵,测量状态的概率只是其幅度的平方。

ETC

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

  • 您希望包括哪些类型的操作?
  • 1-qubit 操作是 2x2 矩阵,3-qubit 操作是 8x8 矩阵。将 1 量子位运算应用于 3 量子位状态的单个量子位时,如何将其转换为 8x8 矩阵?(使用克罗内克产品。)
  • 您可以使用哪些技巧来加快模拟速度?例如,如果只有少数状态是非零的,或者如果量子比特没有纠缠,则不需要进行全矩阵乘法。
  • 用户如何告诉模拟该做什么?您如何代表用户正在发生的事情?有大量的数字在流动...
于 2015-05-06T21:30:24.553 回答
0

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

如果这就是仅使用两个量子位可以使事情变得多么复杂,那么使用 3 个或 4 个或 100 个量子位会变得多么复杂?事实证明,只有将 N 量子位量子计算机的状态绘制为具有 (4^N-1) 维空间中的一个点时,才能完全定义其状态。这意味着我们需要 4^N 个老式经典数字来模拟它。

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

于 2012-03-23T20:38:12.410 回答
0

@Qwertie 引用的文章是一个很好的介绍。如果你想在你的计算机上实现这些,你可以使用libquantum模拟器,它在 C 库中实现了复杂的量子操作。您可以查看此示例以了解使用代码的情况。

于 2013-07-10T22:23:15.997 回答
0

信息实际上存储在不同 Qbit 之间的交互中,因此不实现 1 Qbit 不会转化为使用多个。我认为您可以玩的另一种方法是使用现有的语言,如 QCL 或 google QCP http://qcplayground.withgoogle.com/#/home

于 2014-08-13T21:04:26.420 回答