循環矩陣 \(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 )。
更深入的內容在這里就咕且不提。