循环矩阵和BCCB矩阵与向量乘积的快速计算——矩阵向量乘积与频域乘积之间的转换

ops/2024/11/19 10:26:45/

目录

循环矩阵(Circulant Matrix)和块循环对称矩阵(Block Circulant with Circulant Blocks, BCCB)是两种具有特殊结构的矩阵。循环矩阵和BCCB矩阵与向量的乘积可以利用快速傅里叶变换(FFT)来高效计算,解决大规模的线性系统问题。

循环矩阵

循环矩阵的定义

循环矩阵是一种特殊的方阵,它的每一行都是前一行向右循环移位一个位置的结果。如果矩阵 C C C n × n n \times n n×n的循环矩阵,那么它可以由第一行的 n n n个元素完全确定。假设 c 0 , c 1 , . . . , c n − 1 c_0, c_1, ..., c_{n-1} c0,c1,...,cn1矩阵 C C C的第一行,则矩阵的形式如下:

C = [ c 0 c n − 1 … c 2 c 1 c 1 c 0 c n − 1 c 2 ⋮ c 1 c 0 ⋱ ⋮ c n − 2 ⋱ ⋱ c n − 1 c n − 1 c n − 2 … c 1 c 0 ] C = \begin{bmatrix} c_0 & c_{n-1} & \dots & c_2 & c_1 \\ c_1 & c_0 & c_{n-1} & & c_2 \\ \vdots & c_1 & c_0 & \ddots & \vdots \\ c_{n-2} & & \ddots & \ddots & c_{n-1} \\ c_{n-1} & c_{n-2} & \dots & c_1 & c_0 \\ \end{bmatrix} C= c0c1cn2cn1cn1c0c1cn2cn1c0c2c1c1c2cn1c0
一个 n × n n \times n n×n的循环矩阵 C C C可以完全由其第一行 c = [ c 0 , c 1 , . . . , c n − 1 ] c = [c_0, c_1, ..., c_{n-1}] c=[c0,c1,...,cn1]决定。

特征值与特征向量

循环矩阵 C C C的特征值可以通过离散傅里叶变换(DFT)来计算,具体来说,如果 c c c C C C的第一行,则 C C C的特征值为 λ k = ∑ j = 0 n − 1 c j e − i 2 π j k / n \lambda_k = \sum_{j=0}^{n-1} c_j e^{- i2\pi jk / n} λk=j=0n1cjei2πjk/n k = 0 , 1 , . . . , n − 1 k = 0, 1, ..., n-1 k=0,1,...,n1

利用 FFT,可以高效地计算循环矩阵的特征值和特征向量,从而实现矩阵的快速对角化。

循环矩阵的对角化

由于循环矩阵的所有特征向量是正交的,因此循环矩阵可以被对角化。

一个 n × n n×n n×n的循环矩阵 C C C可以通过离散傅里叶变换(DFT)矩阵 F F F进行对角化,即存在一个对角矩阵 Λ Λ Λ,使得:
C = F − 1 Λ F C = F^{-1} \Lambda F C=F1ΛF
其中, F F F是DFT矩阵 Λ \Lambda Λ是对角矩阵,其对角线上的元素是 C C C的特征值,这些特征值可以通过计算 C C C的第一行向量的DFT获得。

循环矩阵与向量的乘积

对于一个 n × n n \times n n×n的循环矩阵 C C C和一个 n n n维向量 x x x,计算 C x Cx Cx的过程可以通过快速傅里叶变换(FFT)来高效实现:

  1. 计算 c c c x x x的 FFT,分别得到 F ( c ) F(c) F(c) F ( x ) F(x) F(x)
  2. F ( c ) F(c) F(c) F ( x ) F(x) F(x)做逐元素相乘,得到结果 Y = F ( c ) ⊙ F ( x ) Y = F(c) \odot F(x) Y=F(c)F(x)
  3. Y Y Y应用逆 FFT (IFFT),得到最终结果 y = I F F T ( Y ) y = IFFT(Y) y=IFFT(Y)

这样,通过使用 FFT,可以高效地计算出循环矩阵与向量的乘积,避免了直接矩阵乘法带来的高计算复杂度。这种方法利用了 FFT 的高效性,将原本需要 O ( n 2 ) O(n^2) O(n2)复杂度的矩阵乘法降低到了 O ( n log ⁡ n ) O(n \log n) O(nlogn)的复杂度,极大地提高了计算效率。

BCCB矩阵

BCCB矩阵的定义

块循环对称矩阵(Block Circulant with Circulant Blocks, BCCB)是由多个循环矩阵(Circulant Matrix)组成的块矩阵(Block Circulant Matrix)。它在每个块上都具有循环矩阵的性质,并且这些块本身也按照循环矩阵的方式排列。

假设有一个大小为 n × n n \times n n×n的BCCB矩阵,其中每个块是一个大小为 m × m m \times m m×m的循环矩阵,则整个BCCB矩阵的大小为 n m × n m nm \times nm nm×nm

B = [ B 0 B n − 1 … B 2 B 1 B 1 B 0 B n − 1 B 2 ⋮ B 1 B 0 ⋱ ⋮ B n − 2 ⋱ ⋱ B n − 1 B n − 1 B n − 2 … B 1 B 0 ] B = \begin{bmatrix} B_0 & B_{n-1} & \dots & B_2 & B_1 \\ B_1 & B_0 & B_{n-1} & & B_2 \\ \vdots & B_1 & B_0 & \ddots & \vdots \\ B_{n-2} & & \ddots & \ddots & B_{n-1} \\ B_{n-1} & B_{n-2} & \dots & B_1 & B_0 \\ \end{bmatrix} B= B0B1Bn2Bn1Bn1B0B1Bn2Bn1B0B2B1B1B2Bn1B0

每个 B i B_i Bi都是一个 m × m m \times m m×m的循环矩阵

BCCB矩阵的对角化

根据循环矩阵的性质,单个循环矩阵可以通过 FFT 对角化。同样地,BCCB 矩阵也可以通过对每个块进行 FFT 操作来对角化。BCCB矩阵的对角化可以通过两次应用DFT矩阵实现, F n F_n Fn用于处理块循环结构, F m F_m Fm用于处理每个循环矩阵块。这个过程可以形式化地表示为:
B = ( F n ⊗ F m ) − 1 Λ ( F n ⊗ F m ) B = (F_n \otimes F_m)^{-1} \Lambda (F_n \otimes F_m) B=(FnFm)1Λ(FnFm)
这里, ⊗ \otimes 表示Kronecker积, Λ \Lambda Λ是对角矩阵,包含BCCB矩阵的所有特征值。

BCCB 矩阵也可以通过适当的傅里叶变换矩阵 F n ⊗ F m F_n \otimes F_m FnFm ⊗ \otimes 表示克罗内克积)来对角化。 F n F_n Fn n × n n \times n n×n 的DFT矩阵 F m F_m Fm m × m m \times m m×m 的DFT矩阵

BCCB 矩阵与向量的乘积

当考虑 BCCB 矩阵 A A A与向量 x x x的乘积 y = A x y = Ax y=Ax时,如果直接进行计算,计算复杂度为 O ( n 2 m 2 ) O(n^2m^2) O(n2m2),这在 n n n m m m较大时是非常高的。但是,利用 BCCB 矩阵可以对角化的性质,使用快速傅里叶变换(FFT)来降低计算复杂度到 O ( n m log ⁡ ( n m ) ) O(nm\log(nm)) O(nmlog(nm))

具体步骤如下:

  1. 计算向量 x x x n m nm nm维傅里叶变换 x ^ = ( F n ⊗ F m ) x \hat{x} = (F_n \otimes F_m)x x^=(FnFm)x
  2. 将对角矩阵 Λ A \Lambda_A ΛA x ^ \hat{x} x^相乘,得到 y ^ = Λ x ^ \hat{y} = \Lambda \hat{x} y^=Λx^
  3. 计算 y ^ \hat{y} y^的逆傅里叶变换 y = ( F n ⊗ F m ) − 1 y ^ y = (F_n \otimes F_m)^{-1}\hat{y} y=(FnFm)1y^

这样,我们就得到了 A x Ax Ax的结果 y y y,提高计算效率。

BCCB 矩阵与向量乘积的实现

对于一个 BCCB 矩阵 B B B与一个向量 x x x的乘积 B x Bx Bx,可以通过以下步骤高效地计算:

  1. 特征值计算
    构造矩阵 Z Z Z
    在这里插入图片描述
    在这里插入图片描述

  2. 向量重塑:首先,将向量 x x x重塑成 n × n n \times n n×n矩阵形式 X X X
    在这里插入图片描述

  3. 二维 FFT:对矩阵 X X X进行二维 FFT 得到 F ( X ) F(X) F(X)
    在这里插入图片描述

  4. 点乘运算:将 F ( X ) F(X) F(X)与前面提到的对角化后的矩阵 Λ \Lambda Λ中对应的特征值进行逐元素点乘,得到新的矩阵 Y Y Y
    在这里插入图片描述

  5. 逆二维 FFT:最后,对 Y Y Y应用逆二维 FFT 得到最终结果 Y Y Y,再将 Y Y Y重新拉平为一个向量,即为 B x Bx Bx的结果。
    在这里插入图片描述

总结

循环矩阵和BCCB 矩阵的对角化和与向量的乘积都可以通过 FFT 相关技术高效地实现。这种高效的算法对于处理大规模数据集尤其重要,可以在保持计算精度的同时显著减少计算时间和资源消耗。


http://www.ppmy.cn/ops/134937.html

相关文章

【conda】老conda就地更新方法

老conda默认使用经典求解器,比较慢。 手动装包有可能装不上,因为权限问题 可以用conda update conda 来进行更新 更新 conda conda activate base conda update conda就行了 使用 libmamba 求解器 conda config --set solver libmamba

【爬虫实战】抓取某站评论

【爬虫实战】抓取某站评论 声明:本文中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 方式一:JS逆向request发…

【漏洞复现】某全新H5购物商城系统存在前台任意文件上传漏洞(RCE)

漏洞描述 该源码采用HTML5技术开发,可以完美适配各种移动设备,以及iOS和Android系统。同时,易支付接口更为商家提供了便捷的交易功能,让顾客可以轻松通过手机进行网络支付,享受到更加便捷的购物体验。该源码界面设计十分简洁、清爽,同时还保证了购物流程的顺畅和简便。无…

DP动态规划基础题(Kadane算法)

动态规划(Dynamic Programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划算法通常用于优化问题,特别是那…

百度世界大会2024,展现科技改变生活的力量

百度世界2024大会以“应用来了”为主题,于2024年11月12日在上海世博中心隆重举行。大会吸引了众多科技爱好者、行业专家和媒体人士参与,共同见证AI技术的最新进展和未来趋势。 会上,李彦宏首先宣布了检索增强的文生图技术——文心iRAG的正式亮…

Nginx参数配置-笔记

文章目录 upstream实现后台应用服务负载均衡&高可用proxy_set_header参数 upstream实现后台应用服务负载均衡&高可用 角色IPnginx172.168.110.2后端应用服务1172.168.110.3后端应用服务2172.168.110.4后端应用服务3(备用)172.168.110.5 示例如下: upstre…

spi 回环

///tx 极性0 (sclk信号线空闲时为低电平) /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

ASUS/华硕灵耀X双屏Pro UX8402Z 原厂Win11-22H2系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 ,安装结束后带隐藏分区,一键恢复,以及机器所有驱动软件。 系统版本:windows11 原厂系统下载网址:http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意:仅支持以上型号专用…