线性代数28——复矩阵和快速傅立叶变换

2024-02-14 20:48

本文主要是介绍线性代数28——复矩阵和快速傅立叶变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  原文 | https://mp.weixin.qq.com/s/YzPoPnRb-gEm_EiV9et0TA

 

  实矩阵也可能碰到复特征值,因此无可避免地在矩阵运算中碰到复数。

  矩阵当然也有可能包含复数,最重要的复矩阵是傅立叶矩阵,它用于傅立叶变换。一种特殊的傅立叶变换是快速傅立叶变换(fast Fourier transform),简称FFT,在计算机中很常用,特别是涉及到大数据时,FFT将把傅立叶变换中的n阶方正阵乘法的运算次数从n2降低到nlog2n,这是一个巨大的进步。

 

本文相关前置知识

复数和复平面、复平面上的旋转

傅立叶矩阵中w的由来

标准正交矩阵及其性质

复矩阵的特征值

 

复向量

  先给出一个复向量,即向量的分量中至少有一个是复数:

  虽然这个向量在表达上和普通的实向量没什么区别,但这个向量不再属于实空间Rn,而是属于复空间Cn,即n维复空间。

模长

  关于复向量的第一个问题是模长怎么计算?

  由于向量中有复数分量,再用过zTz的方式是无法计算出模长的,比如下面的(1, i):

  但很明显,(1, i)在复平面上的模长不是0:

  我们知道一个复数的模长的平方等于这个复数与它的共轭复数的乘积,因此可以通过下面的方式计算复向量的模长:

  通常用zH(H来自Hermite)表示共轭向量的转置:

点积

  与模长类似,如果有两个复向量pq,它们的点积也不能简单地定义成pTq,而是pHq

  复平面上有两个向量p(1, i)和q(1, -i),二者的点积是:

  二者的点积是0,因此可以判断两个复向量互相垂直:

复矩阵

  我们曾讲过,对于一个矩阵A来说,如果AT=A,那么A是对称矩阵,实际上这个结论仅对实矩阵有效,对复矩阵可不管用。

厄米特矩阵

  如果一个复矩阵是对称矩阵,那么:

  通常写作另一种方式:

  这种对称复矩阵称为厄米特矩阵(或埃米特矩阵,Hermitian matrix),比如下面这个:

酉矩阵

  上一章讲到,一个复对称矩阵的特征值仍然是实数,且可以找到互相垂直的特征向量,其对角元素都是实数。

  假设有一个由n个标准正交向量组成的复矩阵Q = [q1, q2, …, qn],这里的正交意味:

  这个复空间的正交矩阵Q称为酉矩阵(unitary matrix)。

傅立叶矩阵和快速傅立叶变换

  傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分。

  在电子工程或计算机中,n×n矩阵的行和列都是从0开始的,到n-1结束,由于傅立叶变换经常用在计算机上,所以我们在讨论傅立叶矩阵的时候遵从这种下标规则。

傅立叶矩阵

  型如Fn的复矩阵是傅立叶矩阵:

  矩阵中的每个元素都不为0,是个全矩阵。w是个特殊的值:

   相关链接: 傅立叶矩阵中w的由来   

          复数和复平面、复平面上的旋转

  在计算w的乘方的时候,我们需要考虑用极坐标表示复平面。在极坐标下,w表示模长为1的向量从(1,0)开始,绕原点逆时针旋转了2π/n,如此一来,我们就可以知道n等于任意值时w的位置,并且也同样知道w的乘方的位置。对于w来说,wn的模长仍然等于1,只是旋转的角度有所不同。比如n=6时,w=ei2π/6= eiπ/3,w2=(eiπ/3)2= ei2π/3。

  同理,n=4时,w=ei2π/4,正好落在虚轴上,w= i,w4=1。我们写出4阶傅立叶矩阵:

  傅立叶矩阵可以得到一个四点(离散的)傅立叶变换,它的逆矩阵可以得到傅立叶逆变换。此外,傅立叶矩阵的列向量是正交的,所以很容易求得逆矩阵。实际上傅立叶矩阵可以分解成一系列稀疏矩阵,这些矩阵有大量的0元素,所以相应的乘法和求逆都很简单。

  F4的列向量正交,这意味着任意两个列向量的点积为0,但如果你还是用过去的点积计算方法就会发现它并不是0(当然有时候会凑巧等于0),比如第2列和第4列:

  前面介绍过,复向量的点积不是这么算的,正确算法应该是取共轭的转置:

  F4的列向量的模长是2,为了使矩阵更完美,可以把它除以2,于是矩阵的各列就变成了标准正交向量:

  对于标准正交的实矩阵来说,矩阵的逆等于矩阵的转置,傅立叶矩阵可化简为标准正交的复矩阵,具有同样的性质,F4的逆矩阵就是它共轭的转置:

  由于F4的逆矩阵就是F4共轭的转置,所以F4的逆矩阵和F4具有同样的性质。

快速傅立叶变换

  什么是快速傅立叶变换呢?举个例子,F6与F3之间存在着某种奇妙的联系,F8与F4,F64与F32也一样,我们可以把这种联系描述出来。

  以F64与F32为例,F64是一个64阶方阵,w64 = 1,w = 1;同理对于F32来说,w32 = 1,w = 1。

  w64和w32的模长相等,w64的幅角是w32的2倍:

  既然如此,F64和F32也应该存在某种联系。实际上F64与由两个F32和两个零矩阵构成的方阵有关:

  这种分解称为快速傅立叶变换。其中P是一个2n×2n的置换矩阵,D是由w的幂构成的对角矩阵:

  P的效果是使得所乘行向量x中序号为奇数的分量x1,x3,x5……提到前面,偶数序号的分量x2,x3,x6……放到后面。例如:

  可以看到,快速傅立叶变换实际上使用的是分治算法。计算64阶傅立叶变换的计算量是642,而经过一次变换后,计算量变成了2×322(2个32阶的傅立叶矩阵)再加上一些修正项,而修正项主要来自于和对角矩阵D的乘法,共32次。继续对F32进行分解……知道矩阵尺度为1。对于n阶矩阵,可将n2次计算降至(n/2) log2n。


  作者:我是8位的

  出处:https://mp.weixin.qq.com/s/YzPoPnRb-gEm_EiV9et0TA

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途! 

  扫描二维码关注作者公众号“我是8位的”

这篇关于线性代数28——复矩阵和快速傅立叶变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709548

相关文章

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

UE5 半透明阴影 快速解决方案

Step 1: 打开该选项 Step 2: 将半透明材质给到模型后,设置光照的Shadow Resolution Scale,越大,阴影的效果越好