循环矩阵 A 大概长这样:
A=⎛⎜
⎜
⎜
⎜
⎜⎝a0a1…an−1an−1a0…an−2⋮⋮⋱⋮a1a2…a0⎞⎟
⎟
⎟
⎟
⎟⎠
如果记矩阵 E:
E=⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝010…0001…0⋮⋮⋮⋱⋮000…1100…0⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠
则 A=a0I+a1E+a2E2+⋯+an−1En−1。
由于 En=1,可以将 E 当作 n 阶形式变元。这解释了为什么循环矩阵的乘法等价于循环卷积。
据某位相关人士口胡,循环矩阵和什么 “线性非时变系统” 有关。
听到这个名词的瞬间,我就放弃了思考。
考虑 ∑n−1i=0ωin=0。
如果记向量 vi=[ω0×in,ω1×in,…,ω(n−1)×in],则上式又可描述成 vi⋅vj=[i=j]×n
注意复数向量的点积要取共轭,因此 vi⋅vj=∑kw(i−j)×kn。
考虑连续情况。记 fw(t)=eiwt,则函数点积 fw1⋅fw2=[w1=w2]×2π。
这里函数点积定义成 ∫2π0fw1(t)¯¯¯fw2(t)dt=∫2π0ei(w1−w2)tdt。
考虑将函数点积展开成实部虚部,还可以利用三角函数证明(这里要求 w∈N+)。
这些都在说明 正交性。
接下来再考虑矩阵 V:
V=⎛⎜
⎜
⎜
⎜
⎜
⎜⎝ω0×0nω0×1n…ω0×(n−1)nω1×0nω1×1n…ω1×(n−1)n⋮⋮⋱⋮ω(n−1)×0nω(n−1)×1n…ω(n−1)×(n−1)n⎞⎟
⎟
⎟
⎟
⎟
⎟⎠
上文已经说明了 {vi} 的正交性,即 v0,v1,…,vn−1 构成一组 Cn 的正交基(并不是规范正交基,模长为 √n)。
那么它的逆矩阵也就呼之欲出了:
V−1=1n⎛⎜
⎜
⎜
⎜
⎜
⎜⎝ω−0×0nω−0×1n…ω−0×(n−1)nω−1×0nω−1×1n…ω−1×(n−1)n⋮⋮⋱⋮ω−(n−1)×0nω−(n−1)×1n…ω−(n−1)×(n−1)n⎞⎟
⎟
⎟
⎟
⎟
⎟⎠
所以这还是涉及到 正交性。
接下来瞎扯淡一些东西。可以略过不看。
据某位相关人士表示,广义的 “傅里叶变换” 其实分为 4 种:FT、FS、DTFT、DFT。
我自己揣摩了一下,大概这 4 种表达了不同程度的离散与连续。
计算机当然只能用最离散的 DFT。
为什么 DFT 一定要得是循环卷积而不能直接做线性卷积?
感性上说线性卷积其实就是周期无穷大的循环卷积(有点像 DTFT?我不太清楚这套理论),然而不可能取无穷个点。
至于为什么必然会循环,这似乎取决于 eiwt 本身的性质。也不是很懂。
回到循环矩阵。
根据一开始的分解,若 E 的特征值为 λ,则 A 的特征值为 f(λ)。
注意 E 的特征多项式为 λn−1=0。
我们得到:循环矩阵的特征值为 f(ωin)(即 DFT 的结果)。
事实上,由于 A 的特征值互不相同,它可对角化。如果记 D:
D=⎛⎜
⎜
⎜
⎜
⎜⎝f(ω0n)0…00f(ω1n)…0⋮⋮⋱⋮00…f(ωn−1n)⎞⎟
⎟
⎟
⎟
⎟⎠
则会有 A=VDV−1(V 的定义参考上文)。
注意到所有循环矩阵共用同一组特征向量,由此可以加速矩阵乘法(即 DFT 简化循环卷积的原理)。
考虑循环矩阵 A 的行列式 det(A)=∏λi=∏f(ωin)。
如果可以 DFT 当然最好,但是在模意义下不一定存在 n 次单位根。
考虑引入结式:
设 f(x)=a0xn+a1xn−1+⋯+an,g(x)=b0xm+b1xm−1+⋯+bm。
则结式 R(f,g) 定义为如下 n+m 阶行列式:

懒得写了 直接复制了百科的图片。
如果设 f(x) 的根为 α1,α2,…,αn,g(x) 的根为 β1,β2,…,βm,另一个等价的定义:
R(f,g)=am0n∏i=1g(αi)=am0bn0n∏i=1m∏j=1(αi−βj)
至于为什么等价,百科里也啥也不写(屑百度)。
此时你已经可以惊讶地发现 R(xn−1,f) 就是 det(A)。
考虑怎么计算 自然不会按定义算行列式。
首先有 R(f,g)=(−1)nmR(g,f)。
设 f1=f/a0 为首一多项式,则 R(f,g)=am0R(f1,g)。
注意到 f1(αi)=0,则 R(f1,g)=R(f1,g+f1×p)=(−1)n′m′R(gmodf1,f1)。
特别地,R(0,g)=[m=0]。
然后就可以跑多项式辗转相除。
结式最一般的还是用来判断两个多项式是否有公因式,以及多项式的重根问题。
当然,可以从抽代的角度理解 “卷积”。这一方面已经有丰富的结果(和一道毒瘤题目 https://loj.ac/p/548 )。
更深入的内容在这里就咕且不提。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现