「杂」循环矩阵与傅里叶变换

循环矩阵 A 大概长这样:

A=(a0a1an1an1a0an2a1a2a0)

如果记矩阵 E

E=(0100001000011000)

A=a0I+a1E+a2E2++an1En1

由于 En=1,可以将 E 当作 n 阶形式变元。这解释了为什么循环矩阵的乘法等价于循环卷积。

据某位相关人士口胡,循环矩阵和什么 “线性非时变系统” 有关。

听到这个名词的瞬间,我就放弃了思考。


考虑 i=0n1ωni=0

如果记向量 vi=[ωn0×i,ωn1×i,,ωn(n1)×i],则上式又可描述成 vivj=[i=j]×n

注意复数向量的点积要取共轭,因此 vivj=kwn(ij)×k

考虑连续情况。记 fw(t)=eiwt,则函数点积 fw1fw2=[w1=w2]×2π

这里函数点积定义成 02πfw1(t)f¯w2(t)dt=02πei(w1w2)tdt

考虑将函数点积展开成实部虚部,还可以利用三角函数证明(这里要求 wN+)。

这些都在说明 正交性


接下来再考虑矩阵 V

V=(ωn0×0ωn0×1ωn0×(n1)ωn1×0ωn1×1ωn1×(n1)ωn(n1)×0ωn(n1)×1ωn(n1)×(n1))

上文已经说明了 {vi} 的正交性,即 v0,v1,,vn1 构成一组 Cn 的正交基(并不是规范正交基,模长为 n)。

那么它的逆矩阵也就呼之欲出了:

V1=1n(ωn0×0ωn0×1ωn0×(n1)ωn1×0ωn1×1ωn1×(n1)ωn(n1)×0ωn(n1)×1ωn(n1)×(n1))

所以这还是涉及到 正交性


接下来瞎扯淡一些东西。可以略过不看

据某位相关人士表示,广义的 “傅里叶变换” 其实分为 4 种:FT、FS、DTFT、DFT。

我自己揣摩了一下,大概这 4 种表达了不同程度的离散与连续。

计算机当然只能用最离散的 DFT。

为什么 DFT 一定要得是循环卷积而不能直接做线性卷积?

感性上说线性卷积其实就是周期无穷大的循环卷积(有点像 DTFT?我不太清楚这套理论),然而不可能取无穷个点。

至于为什么必然会循环,这似乎取决于 eiwt 本身的性质。也不是很懂。


回到循环矩阵。

根据一开始的分解,若 E 的特征值为 λ,则 A 的特征值为 f(λ)

注意 E 的特征多项式为 λn1=0

我们得到:循环矩阵的特征值为 f(ωni)(即 DFT 的结果)。

事实上,由于 A 的特征值互不相同,它可对角化。如果记 D

D=(f(ωn0)000f(ωn1)000f(ωnn1))

则会有 A=VDV1V 的定义参考上文)。

注意到所有循环矩阵共用同一组特征向量,由此可以加速矩阵乘法(即 DFT 简化循环卷积的原理)。


考虑循环矩阵 A 的行列式 det(A)=λi=f(ωni)

如果可以 DFT 当然最好,但是在模意义下不一定存在 n 次单位根。

考虑引入结式

f(x)=a0xn+a1xn1++ang(x)=b0xm+b1xm1++bm

则结式 R(f,g) 定义为如下 n+m 阶行列式:

img

懒得写了 直接复制了百科的图片。

如果设 f(x) 的根为 α1,α2,,αng(x) 的根为 β1,β2,,βm,另一个等价的定义:

R(f,g)=a0mi=1ng(αi)=a0mb0ni=1nj=1m(αiβj)

至于为什么等价,百科里也啥也不写(屑百度)。

此时你已经可以惊讶地发现 R(xn1,f) 就是 det(A)

考虑怎么计算 自然不会按定义算行列式

首先有 R(f,g)=(1)nmR(g,f)

f1=f/a0 为首一多项式,则 R(f,g)=a0mR(f1,g)

注意到 f1(αi)=0,则 R(f1,g)=R(f1,g+f1×p)=(1)nmR(gmodf1,f1)

特别地,R(0,g)=[m=0]

然后就可以跑多项式辗转相除。

结式最一般的还是用来判断两个多项式是否有公因式,以及多项式的重根问题。


当然,可以从抽代的角度理解 “卷积”。这一方面已经有丰富的结果(和一道毒瘤题目 https://loj.ac/p/548 )。

更深入的内容在这里就咕且不提。

posted @   Tiw_Air_OAO  阅读(1378)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示