Skip to content

第二十七讲:复数矩阵和快速傅里叶变换

本讲主要介绍复数向量、复数矩阵的相关知识(包括如何做复数向量的点积运算、什么是复数对称矩阵等),以及傅里叶矩阵(最重要的复数矩阵)和快速傅里叶变换。

复数矩阵运算

先介绍复数向量,我们不妨换一个字母符号来表示:z=[z1z2zn],向量的每一个分量都是复数。此时z不再属于Rn实向量空间,它现在处于Cn复向量空间。

计算复向量的模

对比实向量,我们计算模只需要计算|v|=vTv即可,而如果对复向量使用zTz则有zTz=[z1z2zn][z1z2zn]=z12+z22++zn2,这里zi是复数,平方后虚部为负,求模时本应相加的运算变成了减法。(如向量[1i],右乘其转置后结果为0,但此向量的长度显然不是零。)

根据上一讲我们知道,应使用|z|=z¯Tz,即[z¯1z¯2z¯n][z1z2zn],即使用向量共轭的转置乘以原向量即可。(如向量[1i],右乘其共轭转置后结果为[1i][1i]=2。)

我们把共轭转置乘以原向量记为zHzH读作埃尔米特(人名为Hermite,形容词为Hermitian)

计算向量的内积

有了复向量模的计算公式,同理可得,对于复向量,内积不再是实向量的yTx形式,复向量内积应为yHx

对称性

对于实矩阵,AT=A即可表达矩阵的对称性。而对于复矩阵,我们同样需要求一次共轭A¯T=A。举个例子[23+i3i5]是一个复数情况下的对称矩阵。这叫做埃尔米特矩阵,有性质AH=A

正交性

在第十七讲中,我们这样定义标准正交向量:qiTqj={0ij1i=j。现在,对于复向量我们需要求共轭:q¯iTqj=qiHqj={0ij1i=j

第十七讲中的标准正交矩阵:Q=[q1 q2  qn]QTQ=I。现在对于复矩阵则有QHQ=I

就像人们给共轭转置起了个“埃尔米特”这个名字一样,正交性(orthogonal)在复数情况下也有了新名字,酉(unitary),酉矩阵(unitary matrix)与正交矩阵类似,满足QHQ=I的性质。而前面提到的傅里叶矩阵就是一个酉矩阵。

傅里叶矩阵

n阶傅里叶矩阵Fn=[11111ww2wn11w2w4w2(n1)1wn1w2(n1)w(n1)2],对于每一个元素有(Fn)ij=wiji,j=0,1,2,,n1。矩阵中的w是一个非常特殊的值,满足wn=1,其公式为w=ei2π/n。易知w在复平面的单位圆上,w=cos2πn+isin2πn

在傅里叶矩阵中,当我们计算w的幂时,w在单位圆上的角度翻倍。比如在6阶情形下,w=e2π/6,即位于单位圆上60角处,其平方位于单位圆上120角处,而w6位于1处。从开方的角度看,它们是16个六次方根,而一次的w称为原根。

  • 我们现在来看4阶傅里叶矩阵,先计算ww=i, w2=1, w3=i, w4=1F4=[11111ii2i31i2i4i61i3i6i9]=[11111i1i11111i1i]

    矩阵的四个列向量正交,我们验证一下第二列和第四列,c2¯Tc4=10+10=0,正交。不过我们应该注意到,F4的列向量并不是标准的,我们可以给矩阵乘上系数12(除以列向量的长度)得到标准正交矩阵F4=12[11111i1i11111i1i]。此时有F4HF4=I,于是该矩阵的逆矩阵也就是其共轭转置F4H

快速傅里叶变换(Fast Fourier transform/FFT)

对于傅里叶矩阵,F6, F3F8, F4F64, F32之间有着特殊的关系。

举例,有傅里叶矩阵F64,一般情况下,用一个列向量右乘F64需要约642次计算,显然这个计算量是比较大的。我们想要减少计算量,于是想要分解F64,联系到F32,有[F64]=[IDID][F3200F32][100110011001]

我们分开来看等式右侧的这三个矩阵:

  • 第一个矩阵由单位矩阵I和对角矩阵D=[1ww2w31]组成,我们称这个矩阵为修正矩阵,显然其计算量来自D矩阵,对角矩阵的计算量约为32即这个修正矩阵的计算量约为32,单位矩阵的计算量忽略不计。

  • 第二个矩阵是两个F32与零矩阵组成的,计算量约为2×322

  • 第三个矩阵通常记为P矩阵,这是一个置换矩阵,其作用是讲前一个矩阵中的奇数列提到偶数列之前,将前一个矩阵从[x0 x1 ]变为[x0 x2  x1 x3 ],这个置换矩阵的计算量也可以忽略不计。(这里教授似乎在黑板上写错了矩阵,可以参考FFTHow the FFT is computed做进一步讨论。)

所以我们把642复杂度的计算化简为2×322+32复杂度的计算,我们可以进一步化简F32得到与F16有关的式子[I32D32I32D32][I16D16I16D16I16D16I16D16][F16F16F16F16][P16P16][ P32 ]。而322的计算量进一步分解为2×162+16的计算量,如此递归下去我们最终得到含有一阶傅里叶矩阵的式子。

来看化简后计算量,2(2(2(2(2(2(1)2+1)+2)+4)+8)+16)+32,约为6×32=log264×642,算法复杂度为n2log2n

于是原来需要n2的运算现在只需要n2log2n就可以实现了。不妨看看n=10的情况,不使用FFT时需要n2=1024×1024次运算,使用FFT时只需要n2log2n=5×1024次运算,运算量大约是原来的1200

下一讲将继续介绍特征值、特征向量及正定矩阵。

本站没有备案,因为不需要备案