「杂」循环矩阵与傅里叶变换
循环矩阵 \(A\) 大概长这样:
如果记矩阵 \(E\):
则 \(A = a_0I + a_1E + a_2E^2 + \dots + a_{n-1}E^{n-1}\)。
由于 \(E^n = 1\),可以将 \(E\) 当作 \(n\) 阶形式变元。这解释了为什么循环矩阵的乘法等价于循环卷积。
据某位相关人士口胡,循环矩阵和什么 “线性非时变系统” 有关。
听到这个名词的瞬间,我就放弃了思考。
考虑 \(\sum_{i=0}^{n-1}\omega_n^i = 0\)。
如果记向量 \(v_i = [\omega_n^{0\times i},\omega_n^{1\times i},\dots,\omega_n^{(n-1)\times i}]\),则上式又可描述成 \(v_i\cdot v_j = [i = j]\times n\)
注意复数向量的点积要取共轭,因此 \(v_i\cdot v_j = \sum_k w_{n}^{(i-j)\times k}\)。
考虑连续情况。记 \(f_w(t) = e^{iwt}\),则函数点积 \(f_{w_1}\cdot f_{w_2} = [w_1 = w_2]\times 2\pi\)。
这里函数点积定义成 \(\int_{0}^{2\pi}f_{w_1}(t)\overline{f}_{w_2}(t)dt = \int_{0}^{2\pi}e^{i(w_1-w_2)t}dt\)。
考虑将函数点积展开成实部虚部,还可以利用三角函数证明(这里要求 \(w\in N_+\))。
这些都在说明 正交性。
接下来再考虑矩阵 \(V\):
上文已经说明了 \(\{v_i\}\) 的正交性,即 \(v_0, v_1, \dots, v_{n-1}\) 构成一组 \(\mathbb C^n\) 的正交基(并不是规范正交基,模长为 \(\sqrt n\))。
那么它的逆矩阵也就呼之欲出了:
所以这还是涉及到 正交性。
接下来瞎扯淡一些东西。可以略过不看。
据某位相关人士表示,广义的 “傅里叶变换” 其实分为 4 种:FT、FS、DTFT、DFT。
我自己揣摩了一下,大概这 4 种表达了不同程度的离散与连续。
计算机当然只能用最离散的 DFT。
为什么 DFT 一定要得是循环卷积而不能直接做线性卷积?
感性上说线性卷积其实就是周期无穷大的循环卷积(有点像 DTFT?我不太清楚这套理论),然而不可能取无穷个点。
至于为什么必然会循环,这似乎取决于 \(e^{iwt}\) 本身的性质。也不是很懂。
回到循环矩阵。
根据一开始的分解,若 \(E\) 的特征值为 \(\lambda\),则 \(A\) 的特征值为 \(f(\lambda)\)。
注意 \(E\) 的特征多项式为 \(\lambda^n - 1 = 0\)。
我们得到:循环矩阵的特征值为 \(f(\omega_{n}^i)\)(即 DFT 的结果)。
事实上,由于 \(A\) 的特征值互不相同,它可对角化。如果记 \(D\):
则会有 \(A = VDV^{-1}\)(\(V\) 的定义参考上文)。
注意到所有循环矩阵共用同一组特征向量,由此可以加速矩阵乘法(即 DFT 简化循环卷积的原理)。
考虑循环矩阵 \(A\) 的行列式 \(\det(A) = \prod \lambda_i = \prod f(\omega_n^i)\)。
如果可以 DFT 当然最好,但是在模意义下不一定存在 \(n\) 次单位根。
考虑引入结式:
设 \(f(x) = a_0x^n + a_1x^{n-1} + \dots + a_n\),\(g(x) = b_0x^m + b_1x^{m-1} + \dots + b_m\)。
则结式 \(R(f, g)\) 定义为如下 \(n + m\) 阶行列式:
懒得写了 直接复制了百科的图片。如果设 \(f(x)\) 的根为 \(\alpha_1,\alpha_2,\dots,\alpha_n\),\(g(x)\) 的根为 \(\beta_1, \beta_2, \dots, \beta_m\),另一个等价的定义:
\[R(f, g) = a_0^m\prod_{i=1}^{n} g(\alpha_i) = a_0^mb_0^n\prod_{i=1}^{n}\prod_{j=1}^{m}(\alpha_i - \beta_j) \]至于为什么等价,百科里也啥也不写(屑百度)。
此时你已经可以惊讶地发现 \(R(x^n - 1, f)\) 就是 \(\det(A)\)。
考虑怎么计算
自然不会按定义算行列式。首先有 \(R(f, g) = (-1)^{nm}R(g, f)\)。
设 \(f_1 = f/a_0\) 为首一多项式,则 \(R(f, g) = a_0^mR(f_1, g)\)。
注意到 \(f_1(\alpha_i) = 0\),则 \(R(f_1, g) = R(f_1, g + f_1\times p) = (-1)^{n'm'}R(g\bmod f_1, f_1)\)。
特别地,\(R(0, g) = [m = 0]\)。
然后就可以跑多项式辗转相除。
结式最一般的还是用来判断两个多项式是否有公因式,以及多项式的重根问题。
当然,可以从抽代的角度理解 “卷积”。这一方面已经有丰富的结果(和一道毒瘤题目 https://loj.ac/p/548 )。
更深入的内容在这里就咕且不提。