什么是量子态矢量?
在前面一篇量子系统模拟的博客中,我们介绍了使用python去模拟一个量子系统演化的过程。当我们尝试理解量子态和量子门操作时,可以通过其矩阵形式的运算来描述量子态演化的过程:
\[\left|\psi_t\right>=e^{-iHt}\left|\psi_0\right>
\]
这里的狄拉克标记符号和矩阵指数运算,在这篇博客中同样进行了介绍。我们可以简单的将该过程理解为:一个矩阵和一个矢量进行了一个点乘操作,得到了一个更新后的态矢量:
\[\overrightarrow{x'}=\textbf{A}\overrightarrow{x}
\]
在量子计算的框架下,由于通用的量子门操作都是酉矩阵(Unitary),因此不论是更新前还是更新后的操作,得到的态矢量总是归一化的:
\[\left=1
\]
因此,在本文中考虑采样时,为了方便计算,我们将态矢量先转换为概率幅矢量,再进行采样。概率幅矢量的特征表现为:
\[\sum_{i=0}^{2^n-1}p_i=1
\]
这里的\(n\)就表示该量子系统的比特数,一个量子系统的量子态元素个数,或者是概率幅的元素个数是比特数的指数倍数(跟量子比特所占用的能级数有关,最常用的是两能级系统,因此为\(2^n\)个元素个数)。
如何实现采样?
在上一个章节中所表述的是量子态的形式,在转换为概率幅矢量之后,其每一个元素都代表获取到当前二进制量子态的概率。这样我们获得一个量子态的态矢量或者概率幅矢量时,其实就是获得了该系统的概率分布。通过该概率分布,我们可以进行蒙特卡罗模拟:先在\([0,1)\)上面进行均匀随机撒点,同时将概率幅矢量转换为其对应的累积分布图,最后计算随机撒的点对应的累积分布图的位置,即可获得当前概率下的模拟采样,具体实现请参考如下示例。
采样示例一
我们先假设一个概率幅的分布,再对其进行采样。
给定一个指数下降的概率幅分布
这里我们先给定一个\(e^{-x}\)的概率分布函数,注意我们采取的是概率幅,因此要对其进行归一化的话只需要计算\(y_i=\frac{y_i}{\sum_jy_j}\)即可。
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
x=[i for i in range(32)]
y=[np.exp(-i) for i in range(32)]
y/=sum(y)
plt.title('Distribution of Quantum States')
plt.xlabel('Quantum States