作为码农,你无需成为数学家即可掌握量子计算( 三 )


我们从三种状态的初始化开始 。每个状态都是两个数字的数组 。状态psi的值为1/2和√3/ 2(第4行) 。在此状态下测量0的概率为(1/2)^ 2 = 1/4 = 0.25 。测量1的概率为(√3/ 2)^ 2 = 3/4 = 0.75 。
状态always_0的值分别为1和0 。 在此状态下 , 测得0的概率为1 ^ 2 = 1(第5行) 。测量1的概率为0 ^ 2 = 0 。当我们在此状态下测量qubit时 , 始终将其测量为0 。 状态always_1分别是相反的 。我们总是将其度量为1(第6行) 。
接下来 , 我们创建一个便捷函数转换(第8-9行) 。我是否告诉过您 , 编写使程序更轻松的函数就是编程的全部内容? 这是一个例子 。该函数使用量子状态(显示的任意字符串) , 状态和函数f的名称 。将原始状态和在其上应用功能f后的状态转换到控制台 。
最后 , 我们创建一个函数reverse_state , 我们可以将其输入到transform中(第11-12行) 。reverse_state调用Python的默认反向函数 , 该函数以相反的顺序返回相同长度的数组 。
在输出中 , 我们可以看到状态数组中的数字已经切换了位置 。因此 , 分别测量0或1的概率 。反转的psi测出0的机会为0.75 , 测量1的机会为0.25 。 反转的always_0与原始的always_1相似 。
这些只是三种可能的状态 。在一种真值表中列出所有可能的状态是不可能的 。但是我认为reverse_state函数的行为非常清楚 。这是量子计算中X门的行为 。它是量子态的基本转变之一 。
让我们在实践中看看这个大门 。我们使用IBM的量子计算SDK Qiskit 。
作为码农,你无需成为数学家即可掌握量子计算文章插图
> Image by author, Frank Zickert
Qiskit的基本单元是量子电路 。量子电路是用于量子计算的模型 。该程序 , 如果您愿意 。我们的电路由一个1 qubit(第5行)组成 。
我们使用状态psi(第8行)初始化qubit , 并在其上应用X门(第11行) 。
Qiskit提供了Aer程序包(我们在第1行导入) 。它提供了用于仿真量子电路的不同后端 。最常见的后端是statevector_simulator(第14行) 。
执行功能(我们也在第1行导入)在指定的后端运行我们的量子电路(qc) 。它返回一个具有有用方法job.result()的作业对象(第17行) 。程序完成后 , 将返回结果对象 。
Qiskit使用Matplotlib提供有用的可视化 。一个简单的直方图就可以了 。结果对象提供get_counts方法以获得已执行电路的直方图数据(第18行) 。
方法plot_histogram返回Jupyter自动绘制的Matplotlib图形(第19行) 。
我们看到我们有75%的机会观察到值0 , 有25%的机会观察到值1 。 与初始状态完全相反 。
您可以在不同的初始状态下运行电路 , 以获得对该门更好的感觉 。
通常 , 量子电路与经典电路没有什么不同 。我们可以在图中表示它们 。Qiskit的QuantumCircuit类提供了可为我们完成工作的draw方法 。
qc.draw('mpl')
作为码农,你无需成为数学家即可掌握量子计算文章插图
> Image by author, Frank Zickert
我们可以看到我们唯一的一个量子位(q) , 使用数组[0.5 , 0.866]对其进行的初始化以及所应用的X门 。
您没有成为数学家 , 就已经完成了掌握量子计算的第一步 。作为经典电路门的量子同伴而获得对量子门的概念性理解并不依赖于数学 。普通英语和一点点Python的结合非常适合 。对于许多人来说 , 这种组合更容易获得 。
但是 , 数学仍然是量子计算的重中之重 。如果您想深入了解这些概念 , 请早晚使用数学公式 。正如我所说 , 数学是描述技术概念的好方法 。
让我们看一下X门的基础数学 。不用担心 , 我不希望您成为数学家 。不过 , 对代数的一点兴趣(即研究数学符号和操纵它们的规则)也不会受到损害 。


推荐阅读