量子编程吧 关注:56贴子:269

回复:(转载)一文教你 “量子编程”入门

只看楼主收藏回复

我们可以通过计算矩阵的共轭转置(H†)是否等于矩阵的逆(H-1)来确定H的幺正性:


IP属地:山东来自Android客户端16楼2022-03-29 21:59
回复
    另一个重要的量子门是“控制非门”,也称为CNOT。CNOT作用于两个量子比特,一个控制量子比特和一个目标量子比特。我们可以将CNOT视为 “if语句”——如果控制量子比特等于1,则CNOT将NOT(非门)应用于目标量子比特。因此CNOT又叫控制非门。
    这是代表CNOT的矩阵。此矩阵将控制量子比特视为右矢内的最右值,将目标量子比特视为最左值。


    IP属地:山东来自Android客户端17楼2022-03-29 22:00
    回复
      将其作用到|00〉上,得:


      IP属地:山东来自Android客户端18楼2022-03-29 22:01
      回复
        在此示例中,我们看到CNOT不会修改“00”的值,这是被预期的行为,因为CNOT仅在控制态为1时才反转目标态。
        让我们来看看它对|01〉的影响。


        IP属地:山东来自Android客户端19楼2022-03-29 22:02
        回复
          请注意,这恰恰是传统计算机中控制位为1时对目标位应用“非”的行为。
          总结:量子门是一个幺正矩阵,幺正性需得保证其概率之和为1,且量子计算机可逆。由于幺正矩阵是方阵,因此输入和输出的数目是一样的。我们了解到Hadamard和CNOT两个重要的量子门。(还存在着更多的其他量子门。)


          IP属地:山东来自Android客户端20楼2022-03-29 22:02
          回复
            量子电路图
            在已经了解量子比特和量子门的基础上,进一步学习第一个量子电路图。
            量子电路图是我们对于量子程序的思考构建。将量子比特定义为行,从左到右应用量子门,构建量子电路图。遍历图的每一个部分。首先,我们有两个量子比特,每一行匹配一个量子比特,最上面的一行对应着x0的量子比特,下面对应着下x1的量子比特。将x0视为第0个量子比特,从0开始计数,标号x0:|0〉和x1:|0〉代表从状态|0〉开始。


            IP属地:山东来自Android客户端21楼2022-03-29 22:03
            收起回复
              H是Hadamard门,应用于量子比特x0。●-⊕是CNOT门,●是控制量子比特,⊕是目标量子比特。“-”是为了帮助我们表示受影响的两个量子比特。换句话说,我们正在应用CNOT量子门,其中控制态为量子比特x0,目标态为x1。注意,我们这些门的应用顺序很重要。在此图中,我们首先应用H,然后应用CNOT。


              IP属地:山东来自Android客户端22楼2022-03-29 22:03
              回复
                翻译量子电路图
                量子电路图只是量子编程的一种表达方式。它帮助我们了解量子计算机,但是其他的表示方法也是很有用的。我们能将我们的图形式变为字符串符号的形式,能够更好地帮助我们写作代码。以字符串表示能使之更轻松地转换为基础的数学,这个数学公式将告诉我们程序的预期输出。
                首先,将图转换为字符串符号。我们使用狄拉克表示法,像写二进制数一样,第0个量子比特将是|00〉中最右边的量子比特。这意味着量子比特x1是|00〉中最左边的量子比特。(请注意,顺序的定义可以不同,但前后要保证统一。)
                我们还需要转换“门”。
                由于我们将H作用于量子比特x0而不作用任何东西到量子比特x1(等同于应用单位门,I),因此我们将其写为(I⊗H)。最后,我们翻译CNOT门,指定哪个量子比特是控制态,哪个是目标态。结果为CNOT [control = 0,target = 1](I⊗H)|00〉(注意,从右到左读取此字符串)。当编写将在量子计算机上运行的代码时,这些都将非常有用。
                写出基础数学
                写出了量子电路图的字符串表示形式之后就可以轻松地将我们的程序转换为基础数学公式表达的形式。可以分为三个部分,即CNOT [control = 0,target = 1],(I⊗H)和|00〉。每一部分都可以转换成矩阵,如下图的第一行所示:


                IP属地:山东来自Android客户端23楼2022-03-29 22:05
                回复
                  我们甚至可以将矩阵相乘以找到结果状态向量,如上所示。该状态向量是量子计算完成后我们两个量子比特的预期状态。另外,我们可以将其视为程序的输出。它告诉我们每种可测量状态的概率幅度。
                  另外,还记得我们的混合态量子比特吗?请注意,我们无法再次编写量子比特x0和量子比特x1的纯态了,因为没有任何方法可以用张量积分解向量,因此我们的量子比特处于混合态!


                  IP属地:山东来自Android客户端24楼2022-03-29 22:05
                  回复
                    测量状态向量
                    如果我们现在测量量子比特会怎么样?我们会收到什么结果?我们可以通过将状态向量分解为可测量状态来找出其结果。用标准基(也称为|0〉和|1〉)(我们也可以测量其他基数,但现在不用担心)来衡量量子比特。因此,我们两个量子比特系统的可测量状态为|00〉、|01〉、|10〉和|11〉。


                    IP属地:山东来自Android客户端25楼2022-03-29 22:06
                    回复
                      dd


                      26楼2022-04-01 20:37
                      回复
                        就像我们可以使用|α|2来确定单个量子比特的|0〉的概率一样,我们可以用同样的方法来确定测量值的概率。由于|01〉和|10〉的概率振幅为0,因此我们知道我们永远也不会测到该状态。并且我们将以(1 / sqrt(2))² = 1/2的概率来测量到|00〉和|11〉。
                        现在,假设我们要将这两个量子比特分开很长的距离,然后再测量其中一个。在我们测量它的那一刻,我们也将知道另一个量子比特的值!这是因为我们知道量子比特只能是|00〉或|11〉。


                        IP属地:山东来自Android客户端27楼2022-04-03 20:40
                        回复
                          这就是爱因斯坦所说的“幽灵般的超距离作用”,也称为量子纠缠(参见EPR佯谬)。


                          IP属地:山东来自Android客户端28楼2022-04-03 20:41
                          回复
                            在量子计算机上运行
                            了解了量子比特、量子门和量子电路图的原理之后,让我们看看如何在真实的量子计算机上运行程序。可以使用Rigetti的量子计算机,因为他们目前向测试用户免费开放。我们也可以使用IBM的量子计算机。
                            这是Rigetti量子编程过程的基本概述:
                            1. 编写一个Python程序来指定您的量子电路和任何其他必需的代码;
                            2. 使用量子模拟器测试该Python程序;
                            3. 给Rigetti的量子计算机预留出时间;


                            IP属地:山东来自Android客户端29楼2022-04-03 20:41
                            回复
                              5. 在Rigetti的服务器上执行程序(他们会将您的量子程序发送给他们的量子计算机)。
                              这是上面的量子电路图的Python版本:


                              IP属地:山东来自Android客户端30楼2022-04-03 20:42
                              回复