量子计算 | 矩阵和基本运算
admin
2023-06-26 04:01:10
0
线性代数是数学的一个重要分支,主要的研究对象包括向量和矩阵。在量子计算中,线性代数扮演着举足轻重的角色,被视为量子计算的“语言”,这是因为向量和矩阵这些代数结构可用于表示量子状态以及相应的运算。今天,我们将介绍量子计算中至关重要的矩阵结构以及一些基本运算。

1 量子计算中的向量和矩阵

在线性代数中,我们已经知道:矩阵实际上就是数表,例如


是一个大小为 的矩阵,矩阵 中任意第 行、第 列的元素可以记作 。在这里,我们有 ,有时候,在一些程序语言如Python中,计数通常自0开始,因此,也可以记作 。

对于任意大小为 的矩阵,可以写成如下形式:


为了与下文的Python代码保持一致,我们将假设计数都是从0开始,即


很多时候,为了简化线性代数的问题,通常都假设矩阵的元素都在实数范畴内,然后,量子计算中的矩阵却与之大相径庭,量子计算几乎都是与复数为伴,例如


是一个大小 的矩阵,我们可以看到,该矩阵的一部分元素是复数,其中,元素 的实部是3、虚部是4。

当然,我们也可以定义复数范畴内的向量,例如


是一个大小为 的向量。

2 矩阵加法

矩阵加法或许是矩阵计算中最简单的运算,这是因为它的运算规则非常简单:对大小相同的矩阵,将其对应元素进行相加即可,例如



类似的运算是矩阵减法,它的运算规则也非常简单:对大小相同的矩阵,将其对应元素进行相减即可。

例1】使用Python中的list实现矩阵加法:
输入:大小均为 的矩阵 ;
输出:返回一个大小为 的矩阵 。

】Python代码为:

  • 定义matrix_add函数,定义输入 a 和 b 为矩阵、输出也为矩阵;
  • 使用 len() 函数计算矩阵的行数和列数;
  • 使用 create_empty_matrix() 函数定义一个新矩阵 c;



使用list定义的 create_empty_matrix() 函数

  • 使用 for 循环计算矩阵加法得到的矩阵。



这里定义的matrix_add函数可用于计算矩阵相加

3 标量-矩阵相乘

给定任意标量 ,对于大小为 矩阵 ,有


例2】使用Python实现标量与矩阵的相乘:
输入:标量 以及大小为 的矩阵 ;
输出:返回一个大小为 的矩阵 。

】举一个简单的例子,假设矩阵 为一个大小为 的矩阵 ,则


因此,标量-矩阵相乘的Python代码为:




这里定义的scalar_mult可用于计算标量-矩阵相乘,返回的结果仍然是一个矩阵

4 矩阵相乘

矩阵相乘是矩阵计算中非常关键的一种运算规则,也是线性代数有别于其他数学分支的一个重要特征。对于大小分别为 的矩阵和 的矩阵进行相乘,我们会得到一个大小为 的矩阵,运算规则是前一个矩阵的行和后一个矩阵的列进行相乘,具体而言,矩阵相乘 满足:


举一个简单的例子:


例3】使用Python实现矩阵相乘:
输入:大小为 的矩阵 和大小为 的矩阵 ;
输出:大小为 的矩阵 。

】举一个简单的例子:



因此,矩阵相乘的Python代码为:




这里定义的matrix_mult可用于计算矩阵相乘

5 逆矩阵

对于任意大小为 的可逆矩阵 ,其逆矩阵可写作 ,两者满足如下关系:


其中, 表示一个大小为 的单位矩阵 (identity matrix)。

简单来说,给定一个大小为 的矩阵:


我们的第一步是求解该矩阵的行列式 (determinant):


其中,绝对值符号 在这里表示矩阵的行列式。

第二步,根据已经计算得到的行列式,求解该矩阵的逆矩阵:


例4】使用Python实现求逆矩阵:
输入:大小为 的可逆矩阵 ;
输出:返回一个大小为 的逆矩阵 。

】Python代码为:




这里定义的matrix_inverse可计算大小为2 x 2矩阵的逆矩阵

6 矩阵转置

矩阵转置 (transpose) 是将给定矩阵进行翻转,符号为 ,例如:


这里是一个大小为 的矩阵,通过转置,我们可以得到一个大小为 的矩阵。

对于任意大小为 的矩阵:


其转置为


例5】使用Python实现求转置:
输入:大小为 的矩阵 ;
输出:返回一个大小为 的矩阵 。

】Python代码为:




这里定义的transpose可计算矩阵转置

7 共轭矩阵

我们最早接触到共轭这一概念是在复数中,例如,复数 的共轭为 ,其实,共轭矩阵是共轭复数概念的延伸,对于带有复数的矩阵:


其共轭矩阵为:


例6】使用Python实现求共轭矩阵:
输入:大小为 的矩阵 ;
输出:返回一个大小为 的矩阵 。

】Python代码为:




这里定义的conjugate可用于计算共轭矩阵,代码中的.real表示复数的实部,.imag表示复数的虚部。

8 伴随矩阵

伴随矩阵的英文名称为adjoint matrix,对于任意矩阵 ,要得到一个伴随矩阵,我们需要对该矩阵进行转置和计算共轭矩阵,伴随矩阵的定义为


例7】使用Python实现伴随矩阵:
输入:大小为 的矩阵 ;
输出:返回一个大小为 的矩阵 。

】Python代码为:




这里定义的adjoint可用于计算伴随矩阵

9 酉矩阵

酉 (yǒu) 矩阵的英文名称为unitary matrix,这一概念主要面向带有复数的矩阵。若要判断一个矩阵是否满足酉矩阵的性质,我们可以这样来分析:

如果一个矩阵是酉矩阵,则满足 。

对于大小为 的矩阵 ,验证的步骤包括:

  1. 计算给定矩阵的伴随矩阵 ;
  2. 将伴随矩阵跟原矩阵相乘,即 或 ;
  3. 若相乘之后的结果为单位矩阵,则该矩阵为酉矩阵。

举例来说,


是一个酉矩阵。

参考资料

  1. 微软推出的量子计算开源项目microsoft/QuantumKatas,已在GitHub上获得3.5k次标星和近一千次fork。
  2. Jupyter notebook: Linear Algebra Tutorial Workbook
  3. 博客Linear algebra for quantum computing - Azure Quantum
  4. 亚马逊量子研究科学家 Nicola Pancotti 的汇报slides:Quantum mechanics, tensor networks and machine learning
  5. 日本RIKEN赵启斌教授的汇报slides:Tensor Networks in Machine Learning: Recent Advances and Frontiers

相关内容