量子计算基础数学
向量表示和向量运算
线性代数的基本对象是向量,量子计算的基本单位量子比特,使用向量来描述。
向量表示,使用一个列矩阵:
$$
\begin{bmatrix}
z_1\
\vdots\
z_n\
\end{bmatrix}
$$
加法运算:
$$
\begin{bmatrix}
z_1\
\vdots\
z_n\
\end{bmatrix}
+
\begin{bmatrix}
z_1^{‘}\
\vdots\
z_n^{‘}\
\end{bmatrix}
\equiv
\begin{bmatrix}
z_1+z_1^{‘}\
\vdots\
z_n+z_n^{‘}\
\end{bmatrix}
$$
标量乘:
$$
z
\begin{bmatrix}
z_1\
\vdots\
z_n\
\end{bmatrix}
\equiv
\begin{bmatrix}
zz_1\
\vdots\
zz_n\
\end{bmatrix}
$$
狄拉克(Dirac)符号:
$$
|\psi\rangle
$$
符号
在量子理论里,需要适应并使用狄拉克符号来描述抽象表示
名称 | 符号 |
---|---|
共轭复数 | $z^*$ |
态,向量,Ket | $|\psi\rangle$ |
对偶向量 | $\langle\varphi|$ |
内积(Bracket) | $\langle\varphi|\psi\rangle$ |
张量积 | $|\varphi\rangle\bigotimes|\psi\rangle\equiv|\varphi\rangle|\psi\rangle$ |
复数共轭矩阵 | $A^*$ |
矩阵的转置 | $A^T$ |
矩阵的厄米共轭 | $A^†=(A^T)^*$ |
内积 | $\langle\varphi|A|\psi\rangle$ |
基
对于一组向量$|0\rangle,\dots,|v_n\rangle$张成(Spanning)的$C^n$:
$$|v\rangle=\sum_{i}x_i|u_i\rangle\equiv
\begin{bmatrix}
x_1\
x_2\
\vdots\
x_n\
\end{bmatrix}
$$
这个集$|0\rangle,\dots,|v_n\rangle$就作为$C^n$的基(Basis)
内积
在$C^n$上的内积表示为:
$$
\left((a_1,\dots,a_n),(b_1,\dots,b_n)\right)=\sum_{i=1}^{n}a_i^b_i
$$
狄拉克符号表示为:
$$
\langle\omega|\nu\rangle\equiv(|\omega\rangle,|\nu\rangle)
$$
*结果是一个值**
$$
希尔伯特空间 = 内积空间
$$
线性算子和矩阵
正交
我们称两个向量$|\nu\rangle,|\omega\rangle$正交:
如果满足:
$$
\langle\omega|\nu\rangle = 0
$$
一个正交集里的向量$|i\rangle$满足:
$$
\langle j|i\rangle=\delta_{ij}\quad \delta_{ij}=
\begin{cases}
0 , i \not= j \
1 , i = j \
\end{cases}
$$
完备性
若向量集$|i\rangle$来源于$C^n$里的一组正交基$\langle j|i\rangle = \delta_{ij}$那么,完备性满足:
$$
\sum_{i=1}^{n} | i \rangle\langle i| = I
$$
外积
外积$|\varphi\rangle\langle\phi|$是一个线性算子:
$$
|\varphi\rangle\langle\psi|\left(|\psi^{‘}\rangle\right) = |\varphi\rangle\langle\psi|\psi^{‘} = \langle\psi|\psi^{‘}|\varphi\rangle
$$
结果是一个矩阵
线性算子
给定一个线性算子A,意味着:
$$
A\left(\sum_i a_i|\nu_i\rangle\right) = \sum_i a_iA(|\nu_i\rangle)
$$
符号表示:
$$
A|\nu\rangle\equiv A(|\nu\rangle)\quad BA|\nu\rangle \equiv B(A(|\nu\rangle))
$$
泡利矩阵
$$
\sigma_0 \equiv I \equiv \begin{pmatrix}
1&0\
0&1\
\end{pmatrix}\
\sigma_1 \equiv \sigma_x \equiv X \equiv \begin{pmatrix}
0&1\
1&0\
\end{pmatrix}\
\sigma_2 \equiv \sigma_y \equiv Y \equiv \begin{pmatrix}
0&-i\
i&0\
\end{pmatrix}\
\sigma_3 \equiv \sigma_z \equiv Z \equiv \begin{pmatrix}
1&0\
0&-1\
\end{pmatrix}\
$$
厄米算子
给定一个算子A,它的厄米共轭(或自伴)是$$A^† = A$$
给定另一个算子B,满足:
$$
(AB)^† = B^†A^†
$$
而且
$$
|\nu\rangle^† = \langle |\nu\rangle\langle\omega|)^† = |\omega\rangle\langle\nu|
$$
投影算子
一个投影算子$P:C^n \rightarrow C^m, m<n$
表示为:
$$
P = \sum_{i=1}^m |i\rangle\langle i|
$$
投影算子满足:
$$
P^† = P
$$
正规算子
一个算子A被称为正规(Normal)的,如果满足:
$$
A^†A = AA^†
$$
注意:如果一个算子是正规的,那么它一定是可对角化(Diagonalizable)的。因此,厄米算子是正规算子。
酉算子
一个算子(矩阵)U被称为酉正(Unitary)的,如果满足:
$$
U^†U = UU^† = I
$$
特征值和特征向量
一个算子A的特征向量$|\nu\rangle$和特征值$\nu$满足:
$$
A|\nu\rangle = \nu|\nu\rangle
$$
其对角表示为:
$$
A = \sum_i \lambda_i|i\rangle\langle i|
$$
其中$\lambda_i$是A对应的特征值,$|i\rangle$是特征值对应的一组正交特征向量。
$$
特征值\quad 特征向量\
\lambda_1 \rightarrow |1\rangle\
\lambda_2 \rightarrow |2\rangle\
\lambda_3 \rightarrow |3\rangle\
\quad\dots\quad\
\lambda_n \rightarrow |n\rangle\
$$
谱分解(Spectral Decomposition)
对于一个正规算子,可以将其写成谱分解的形式:
$$
A = \sum_a a|a\rangle\langle a|
$$
回顾对角化的概念,此处一个比较重要的概念是,如果一个算子满足正规算子的条件,则该算子具备谱分解,必定可以对角化。
当我们需要对一个算子(矩阵)进行函数运算,比如给定算子A,需要求解f(A),所用的方法,就是将A谱分解,求解表示为:
$$
f(A) = \sum_a f(a)|a\rangle\langle a|
$$
同理其他的函数操作,包括求幂函数,开方等操作。
张量积与迹
张量积的理解
向量$|\nu\rangle,|\omega\rangle$在$C^n,C^m$中的张量积为:
$$
|\nu\rangle \bigotimes |\omega\rangle \equiv |\nu\rangle|\omega\rangle \equiv |\nu\omega\rangle
$$
即是$C^{n\times m}$中的向量
例:
$$
\begin{bmatrix}
\nu_1\
\nu_2\
\end{bmatrix}
\bigotimes
\begin{bmatrix}
\omega_1\
\omega_2\
\end{bmatrix}
=\begin{bmatrix}
\nu_1\omega_1\
\nu_1\omega_2\
\nu_2\omega_1\
\nu_2\omega_2\
\end{bmatrix}
$$
矩阵A,B的张量积定义为:
$$
A \bigotimes B
$$
操作为:
$$
A \bigotimes B ( | \nu \rangle \bigotimes | \omega \rangle ) = A | \nu \rangle \bigotimes B | \omega \rangle
$$
张量积操作规则:
$$
( A \bigotimes B )^† = A^† \bigotimes B^†
$$
张量积的矩阵表示案例
给定矩阵A,B:
$$
A = \begin{bmatrix}
A_{11}&A_{12}\
A_{21}&A_{22}\
\end{bmatrix}\
B = \begin{bmatrix}
B_{11}&B_{12}\
B_{21}&B_{22}\
\end{bmatrix}
$$
A,B的张量积表示为:
$$
A \bigotimes B = \begin{bmatrix}
A_{11}B&A_{12}B\
A_{21}B&A_{22}B\
\end{bmatrix}
=\begin{bmatrix}
A_{11}B_{11}&A_{11}B_{12}&A_{12}B_{11}&A_{12}B_{12}\
A_{11}B_{21}&A_{11}B_{22}&A_{12}B_{21}&A_{12}B_{22}\
A_{21}B_{11}&A_{21}B_{12}&A_{22}B_{11}&A_{22}B_{12}\
A_{21}B_{21}&A_{21}B_{22}&A_{22}B_{21}&A_{22}B_{22}\
\end{bmatrix}
$$
迹
一个矩阵A的迹(Trace)定义为:
$$
tr(A) = \sum_i A_{ii}
$$
简易理解为,矩阵对角元素之和,迹的操作将矩阵映射成了一个数。
给定几个矩阵如A,B,C。迹遵循如下的一些规则:
循环性:
$$
tr(ABC) = tr(CAB) = tr(BCA)
$$
外积公式:
$$
tr(A | \psi \rangle \langle \psi | ) = \langle \psi | A | \psi \rangle
$$
select poll epoll
select
select是将所有的描述符状态保存进fd_set中,然后遍历fd_set的状态变化来进行相应的操作。它的主要缺点有:
- 采用轮询的方式遍历所有描述符的状态,当数量较多时效率低下;
- 单个进程支持最大并发连接的数量有限,通常为1024个;
- 大量的fd_set数据结构需要从用户到内核的不断拷贝,效率低;
- 大量高并发时使用多个进程实现还需要进程上下文切换的开销;
- 如果触发了某个描述符这次没有处理,那么下次仍然会触发。
- 平台支持广
poll
poll跟select一样也是需要轮询描述符状态来实现,主要的区别在于poll是使用链表来保存多个描述符的监听,所以就没有了最大连接限制,但仍然效率低下。
epoll
epoll对于每一个创建的epoll对象都会维护一个红黑树和一个双链表,红黑树存储着所有添加到epoll中需要监控的描述符,而双链表则存放着将要通过epoll_wait返回给用户的满足条件的描述符,而epoll_wait则又采用了回调的方式将触发的描述符返回给用户,除此之外epoll还使用了内存映射的方式将添加的描述符映射到内核空间(内存共享),避免了拷贝的代价。因此epoll的并发高效性远远优于select和poll,但是有一点必须清楚,当连接数不大,并且连接点都处于比较活跃的状态,那么epoll的效率就不如前两者了,毕竟回调通知的方式在大用户量下也会很慢。
旧版本linux内核和macOS等不支持epoll。