从范德蒙德矩阵聊开去.
范德蒙德(Vandermonde)矩阵 : \(\bm{V}=\left[ \begin{array}{ccc} 1 & x_0 & x_0^2 & \cdots & x_0^{n-1} \\ 1 & x_1 & x_1^2 & \cdots & x_1^{n-1} \\ 1 & x_2 & x_2^2 & \cdots & x_2^{n-1} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n-1} & x_{n-1}^2 &\cdots & x_{n-1}^{n-1} \\ \end{array} \right]\)
\(\bm{V}:=[v_{i,j}]=(x_i)^j\)
(有些地方的记法可能会转置一下或者指标从1开始,对推导没有实质影响)
范德蒙德矩阵的直观意义是其表示了从多项式到点值的变换(求值).
考虑不超过 \(n-1\) 次的多项式 \(f(z)=\sum\limits_{k=0}^{n-1} a_kz^k\) .
你们记 \([z^k]f(z)=a_k\) .
不妨记 \(\bm{F}=\left[ \begin{array}{ccc} a_0\\ a_1\\ \vdots\\ a_{n-1} \end{array} \right]\)
你们有 \(\bm{V}\bm{F}=\left[ \begin{array}{ccc} f(x_0)\\ f(x_1)\\ \vdots\\ f(x_{n-1}) \end{array} \right]\)
值得一提的是, 范德蒙德矩阵的行列式被称为范德蒙德行列式, 其具有非常好的形式.
范德蒙德行列式 : \(\det \bm{V}=\prod\limits_{i\lt j}(x_j-x_i)\)
proof
更规范的, 你们记 \(\det\bm{V}=\Delta(x_0,x_1\dots x_{n-1})\)
对于 \(n\) 阶的范德蒙德矩阵, 你们对其施以初等列变换.
(从后往前的)将每列减去前一列的 \(x_0\) 倍, 我们得到
\(\Delta(x_0,x_1\dots x_{n-1})=\det\left[ \begin{array}{ccc} 1 & 0 & 0 & \cdots & 0 \\ 1 & x_1-x_0 & x_1^2-x_1x_0 & \cdots & x_1^{n-1}-x_1^{n-2}x_0 \\ 1 & x_2-x_0 & x_2^2-x_2x_0 & \cdots & x_2^{n-1}-x_2^{n-2}x_0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n-1}-x_0 & x_{n-1}^2-x_{n-1}x_0 &\cdots & x_{n-1}^{n-1}-x_{n-1}^{n-2}x_0 \\ \end{array} \right]\)
对其按第一行展开得到
\(=\det\left[ \begin{array}{ccc} (x_1-x_0) & x_1(x_1-x_0) & \cdots & x_1^{n-2}(x_1-x_0) \\ (x_2-x_0) & x_2(x_2-x_0) & \cdots & x_2^{n-2}(x_2-x_0) \\ \vdots & \vdots & \ddots & \vdots \\ (x_{n-1}-x_0) & x_{n-1}(x_{n-1}-x_0) &\cdots & x_{n-1}^{n-2}(x_{n-1}-x_0) \\ \end{array} \right]\)
从第 \(i\) 行提取出 \(x_i-x_0\) 的系数得到,
\(=\prod\limits_{i=1}^{n-1}(x_i-x_0)\det\left[ \begin{array}{ccc} 1 & x_1 & \cdots & x_1^{n-2} \\ 1 & x_2 & \cdots & x_2^{n-2} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n-1} &\cdots & x_{n-1}^{n-2} \\ \end{array} \right]\)
这就是 \(n-1\) 阶的范德蒙德行列式, 即
\(\Delta(x_0,x_1\dots x_{n-1})=\prod\limits_{i=1}^{n-1}(x_i-x_0)\Delta(x_1,x_2\dots x_{n-1})\)
因此由对最后一项因子施以数学归纳法, 我们得到
\(\det\bm{V}=\prod\limits_{i=0}^{n-1}\prod\limits_{j=0}^{i-1}(x_i-x_j)=\prod\limits_{i\lt j}(x_j-x_i)\)
插值与逆矩阵
你们来考虑其逆矩阵, 既然范德蒙德矩阵表示多项式求值, 那么其逆矩阵自然就表示多项式插值.
其逆矩阵同样具有封闭形式.
\(\bm{V}^{-1}=[\overset{\sim}{v}_{i,j}]\)
\(\overset{\sim}{v}_{i,j}=\frac{1}{\prod\limits_{k=0,k\neq j}^{n-1}(x_j-x_k)}[z^i]\prod\limits_{k=0,k\neq j}^{n-1}(z-x_k)\)
更常见的形式是 \(\overset{\sim}{v}_{i,j}=\frac{1}{\prod\limits_{k=0,k\neq j}^{n-1}(x_k-x_j)}(-1)^i\sum\limits_{p_0\lt p_1\cdots p_{n-i-1},p_k\neq j}\prod\limits_{k=0}^{n-i-1}(x_{p_k})\)
proof
你们先推导一下两个形式的等价性 .
\(\overset{\sim}{v}_{i,j}=\frac{1}{\prod\limits_{k=0,k\neq j}^{n-1}(x_j-x_k)}[z^i]\prod\limits_{k=0,k\neq j}^{n-1}(z-x_k)=\frac{1}{\prod\limits_{k=0,k\neq j}^{n-1}(x_k-x_j)}(-1)^i[z^i]\prod\limits_{k=0,k\neq j}^{n-1}(x_k+z)=\frac{1}{\prod\limits_{k=0,k\neq j}^{n-1}(x_k-x_j)}(-1)^i\sum\limits_{p_0\lt p_1\cdots p_{n-i-1},p_k\neq j}\prod\limits_{k=0}^{n-i-1}(x_{p_k})\)
由于几个证明方法均较具启发性故均记录于此
拉格朗日插值
你们有拉格朗日插值公式 :
\(f(z)=\sum\limits_{i=0}^{n-1}f(x_i)\dfrac{\prod\limits_{j=0,j\neq i}^{n-1}(z-x_j)}{\prod\limits_{j=0,j\neq i}^{n-1}(x_i-x_j)}\)
考虑 \(\bm{V}^{-1}\left[ \begin{array}{ccc} f(x_0)\\ f(x_1)\\ \vdots\\ f(x_{n-1}) \end{array} \right]=\bm{F}\) , 你们有 \([z^k]f(z)=\sum\limits_{i=0}^{n-1}f(x_i)\overset{\sim}{v}_{k,i}\)
这个式子看起来有点让你们过载, 不要忘记你们手里最锋利的武器, 线性性.
不妨考虑 \(f(x_j)=1,f(x_i)=0(i\neq j)\) 的情况, 显然一般情况为其线性叠加故若其成立则一般情况总是成立
此时有 \([z^k]f(z)=f(x_j)\overset{\sim}{v}_{k,j}\Rightarrow f(z)=\sum\overset{\sim}{v}_{k,j}z^k\) 带回原式即可得到 \(\overset{\sim}{v}_{k,i}=\dfrac{[z^k]\prod\limits_{j=0,j\neq i}^{n-1}(z-x_j)}{\prod\limits_{j=0,j\neq i}^{n-1}(x_i-x_j)}\)
伴随矩阵
你们知道 \(\bm{V}^{-1}=\frac{1}{\det \bm{V}}\bm{V}^*\)
不妨记
\(\Delta_j(x_0,x_1,x_2\dots x_{n-1})=\det\left[ \begin{array}{ccc} 1 & x_0 & \cdots & x_0^{j-1} & x_0^{j+1} & \cdots & x_0^{n} \\ 1 & x_1 & \cdots & x_1^{j-1} & x_1^{j+1} & \cdots & x_1^{n} \\ 1 & x_2 &\cdots & x_2^{j-1} & x_2^{j+1} & \cdots & x_2^{n} \\ \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n-1} &\cdots & x_{n-1}^{j-1} & x_{n-1}^{j+1} &\cdots & x_{n-1}^{n} \\ \end{array} \right]\)
那么有 \(\bm{A}^*_{j,i}=A_{i,j}=(-1)^{i+j}M_{i,j}=(-1)^{i+j}\Delta_j(x_0,x_1,\cdots,x_{i-1},x_{i+1},\cdots,x_{n-1})\)
那么主要难点就是去掉(一行)一列的范德蒙德矩阵行列式怎么算.
你们有一个巧妙的思路(天哪这是怎么想到的) .
你们引入一个形式变元 \(z\) 再对去掉它的一行作展开, 也就是
\(\Delta(z,x_0,x_1...x_{n-1})=\sum\limits_{i=0}^{n-1}z^i(-1)^i\Delta_i(x_0,x_1,x_2\dots x_{n-1})+z^n(-1)^n\Delta(x_0,x_1...x_{n-1})\)
对两边展开并提取系数.
\([z^i]\Delta(z,x_0,x_1...x_{n-1})=(-1)^i\Delta_i(x_0,x_1,x_2\dots x_{n-1})\)
对左边按范德蒙德行列式展开
\([z^i]\prod\limits_{i\lt j}(x_j-x_i)\prod\limits(x_i-z)=(-1)^i\Delta_i(x_0,x_1,x_2\dots x_{n-1})\)
带回原式即可得到
\(\overset{\sim}{v}_{i,j}=\frac{1}{\det \bm{V}}\bm{A}^*_{i,j}=\dfrac{(-1)^{i+j}M_{j,i}}{\prod\limits_{i'\lt j'}(x_{j'}-x_{i'})}\)
\(=\dfrac{(-1)^{i+j}\Delta_i(x_0,x_1,\cdots,x_{j-1},x_{j+1},\cdots,x_{n-1})}{\prod\limits_{i'\lt j'}(x_{j'}-x_{i'})}\)
\(=\dfrac{(-1)^j[z^i]\prod\limits_{i'\neq j}(x_{i'}-z)\prod\limits_{i'\lt j',i'\neq j,j'\neq j}(x_{j'}-x_{i'})}{\prod\limits_{i'\lt j'}(x_{j'}-x_{i'})}\)
\(=\dfrac{(-1)^j[z^i]\prod\limits_{i'\neq j}(x_{i'}-z)\prod\limits_{i'\lt j',i'\neq j,j'\neq j}(x_{j'}-x_{i'})}{\prod\limits_{i'\lt j',i'\neq j,j'\neq j}(x_{j'}-x_{i'})\prod\limits_{i'\lt j}(x_j-x_{i'})\prod\limits_{j\lt i'}(x_{i'}-x_{j})}\)
\(=\dfrac{(-1)^j[z^i]\prod\limits_{i'\neq j}(x_{i'}-z)}{\prod\limits_{i'\lt j}(x_j-x_{i'})\prod\limits_{j\lt i'}(x_{i'}-x_{j})}\)
\(=\dfrac{(-1)^j[z^i](-1)^{n-1}\prod\limits_{i'\neq j}(z-x_{i'})}{\prod\limits_{i'\lt j}(x_j-x_{i'})(-1)^{n-1-j}\prod\limits_{j\lt i'}(x_{j}-x_{i'})}\)
\(=\dfrac{[z^i]\prod\limits_{i'\neq j}(z-x_{i'})}{\prod\limits_{i'\neq j}(x_j-x_{i'})}\)
推广
你们来尝试推广这个东西, 这要如何推广呢, 从信息考虑插值和求值似乎已经完备.
你们考虑多项式求值的另一个思路, \(f(c)=f(z)\mod (z-c)\)
由代数基本定理 \(f(z)=\prod (z-x_i)\) 但其存在重根, 这启发你们思考 \(f(z) \mod (z-c)^{k}\) 是什么东西呢 ?
先做一个换元, 令 \(t=z-c,z=t+c\) 原式就是 \(f(c+t)\mod t^k \circ (g(t)=z-c)\) 这某种意义上可以看成对 \(f(c)\) 邻域情况的表达.
这种推广同样是关于多项式系数的线性变换, 因此你们可以得到一个 “推广” 的矩阵, 我们定义
\(\bm{\overline{M}}_{k,n}(t)=\left[ \begin{array}{ccc} 1 & t & t^2 & \cdots & t^{n-1} \\ 0 & 1 & \binom{2}{1}t & \cdots & \binom{n-1}{1}t^{n-2} \\ 0 & 0 & 1 & \cdots & \binom{n-1}{2}t^{n-3} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 &\cdots & \binom{n-1}{k-1}t^{n-k} \\ \end{array} \right]\)
\(\bm{\overline{M}}_{k,n}(t):=[\overline{M}_{k,n}(t)_{i,j}]=\binom{j}{i}t^{j-i}\)
\(\bm{\overline{V}}_n(x_0,k_0,x_1,k_1,x_2,k_2,\dots,x_{c},k_c)=\left[ \begin{array}{ccc} \bm{\overline{M}}_{k_0,n}(x_0) \\ \bm{\overline{M}}_{k_1,n}(x_1) \\ \bm{\overline{M}}_{k_2,n}(x_2) \\ \vdots \\ \bm{\overline{M}}_{k_c,n}(x_c) \end{array} \right]\)
其中 \(\sum k_i=n\)
当 \(k_0=k_1=k_2=\cdots=k_c=1\) 时你们就回到一般的范德蒙德矩阵
请我们自行思考, 这个定义对应了什么样的"求值"形式 ?
关于它的行列式同样有良好的封闭形式 \(\prod\limits_{i\lt j}(x_j-x_i)^{k_ik_j}\)
proof
考虑类似范德蒙德行列式的思路, 施以初等列变换, (从后往前)将每一列减去前一列的 \(x_0\) 倍
你们分两部分处理, \(\bm{\overline{M}}_{k_0,n}(x_0)\) 和 \(\bm{\overline{M}}_{k_i,n}(x_i)\)
第一部分 : 你们得到
由加法恒等式 \(\binom{n}{k}=\binom{n-1}{k-1}+\binom{n-1}{k}\)
\(\bm{\overline{M}}_{k_0,n}(x_0)\overset{-x_0C_i+C_{i+1}}{\longrightarrow}\left[ \begin{array}{ccc} 1 & 0 & 0 & \cdots & 0 \\ 0 & 1 & x_0 & \cdots & x_0^{n-2} \\ 0 & 0 & 1 & \cdots & \binom{n-2}{1}x_0^{n-3} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 &\cdots & \binom{n-2}{k_0-2}t^{n-1-k_0} \\ \end{array} \right]\)
去掉第一行第一列之后, 这就是 \(\bm{\overline{M}}_{k_0-1,n-1}(x_0)\) 你们已经得到了较好的形式.
第二部分 : 你们得到
\(\bm{\overline{M}}_{k_i,n}(x_i)\overset{-x_0C_i+C_{i+1}}{\longrightarrow}\left[ \begin{array}{ccc} 1 & x_i-x_0 & x_i^2-x_ix_0 & \cdots & x_i^{n-1}-x_i^{n-2}x_0 \\ 0 & 1 & \binom{2}{1}x_i-x_0 & \cdots & \binom{n-1}{1}x_i^{n-2}-\binom{n-2}{1}x_i^{n-3}x_0 \\ 0 & 0 & 1 & \cdots & \binom{n-1}{2}x_i^{n-3}-\binom{n-2}{2}x_i^{n-4}x_0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 &\cdots & \binom{n-1}{k_i-1}x_i^{n-k_i}-\binom{n-2}{k_i-1}x_i^{n-k_i-1}x_0 \\ \end{array} \right]\)
到这你们似乎不太有好的效果, 接下来你们再施以行变换, (从上到下)将每一行减去上一行的 \(\frac{1}{x_i-x_0}\) 倍
你们得到
\(\overset{\frac{-1}{x_i-x_0}R_k+R_{k+1}}{\longrightarrow}\left[ \begin{array}{ccc} 1 & x_i-x_0 & x_i(x_i-x_0) & \cdots & x_i^{n-2}(x_i-x_0) \\ 0 & 0 & x_i-x_0 & \cdots & \binom{n-2}{1}x_i^{n-3}(x_i-x_0) \\ 0 & 0 & 0 & \cdots & \binom{n-2}{2}x_i^{n-4}(x_i-x_0) \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 &\cdots & \binom{n-2}{k_i-1}x_i^{n-k_i-1}(x_i-x_0) \\ \end{array} \right]\)
其去掉第一列后, 即为 \((x_i-x_0)\bm{\overline{M}}_{k_i,n-1}(x_i)\) 你们已经得到了较好的形式.
对于你们得到的这个新的矩阵, 其行列式显然不变, 你们对第一行作按行展开.
由于第一行只有第一个元素不为 \(0\) ,因此其行列式就等于去掉第一行第一列的结果.
也就是说 \(\det\bm{\overline{V}}_n(x_0,k_0,x_1,k_1,x_2,k_2,\dots,x_{c},k_c)=\det\left[ \begin{array}{ccc} \bm{\overline{M}}_{k_0-1,n-1}(x_0) \\ (x_1-x_0)\bm{\overline{M}}_{k_1,n-1}(x_1) \\ (x_2-x_0)\bm{\overline{M}}_{k_2,n-1}(x_2) \\ \vdots \\ (x_c-x_0)\bm{\overline{M}}_{k_c,n-1}(x_c) \end{array} \right]=\prod\limits_{i=1}^c(x_i-x_0)^{k_i}\det\bm{\overline{V}}_{n-1}(x_0,k_0-1,x_1,k_1,x_2,k_2,\dots,x_{c},k_c)\)
对于 \(k_0\) 施以数学归纳法得到
\(\det\bm{\overline{V}}_n(x_0,k_0,x_1,k_1,x_2,k_2,\dots,x_{c},k_c)=\prod\limits_{i=1}^c(x_i-x_0)^{k_0k_i}\det\bm{\overline{V}}_{n-k_0}(x_1,k_1,x_2,k_2,\dots,x_{c},k_c)\)
再进一步对变量施以数学归纳法, 你们就得到了封闭形式 \(\prod\limits_{i\lt j}(x_j-x_i)^{k_ik_j}\)
请我们自行思考, 这个东西的逆矩阵应该是什么样的 ?
dft 与 fft
如果不了解离散傅里叶变换可以先学习一下.
范德蒙德矩阵可以表示离散傅里叶变换
对一个长为 \(n\) 的列向量作离散傅里叶变换可以看作左乘 \(\bm{D}=\bm{V}(1,\omega_n^1,\omega_n^2\cdots \omega_n^{n-1})\)
从这里出发,你们会得到一些有趣的性质.
你们知道, 离散傅里叶变换的逆变换等价于对它作变换的时候使用所有原本使用的单位根的转置然后再乘以归一化系数
同时也等价于对它再作一次正变换然后 \(reverse [1,n)\) 再乘以归一化系数 \(\frac{1}{n}\).
(注:值得注意的是,单位根的转置就是单位根的逆, \(\bar{\omega_{n}^{k}}=\frac{1}{\omega_n^k}=\omega_{n}^{-k}\))
从矩阵变换的角度, 这是非常直观的.
这无非是说
\(\bm{D}^{-1}=\frac{1}{n}\bm{V}(1,\omega_n^{-1},\omega_n^{-2}\cdots \omega_n^{-(n-1)})=\frac{1}{n}\bm{R}\bm{D}\)
其中 \(\bm{R}\) 是翻转矩阵, \(\bm{R}=\left[ \begin{array}{ccc} 1 & 0 &\cdots & 0 & 0 \\ 0 & 0 &\cdots & 0 & 1 \\ 0 & 0 &\cdots & 1 & 0 \\ \vdots &\vdots &\ddots &\vdots &\vdots\\ 0 & 1 & \cdots & 0 & 0\\ \end{array} \right]\)
你们可以使用上述的范德蒙德逆矩阵的公式来验证这一点.
proof
第一个等式
\({D^{-1}}_{i,j}=\frac{1}{\prod\limits_{k=0,k\neq j}^{n-1}(\omega_n^j-\omega_n^k)}[z^i]\prod\limits_{k=0,k\neq j}^{n-1}(z-\omega_n^k)\)
注意到由于代数基本定理你们有 \(\prod\limits_{k=0}^{n-1}(z-\omega^k_n)=z^n-1\)
所以 \(f(z)=\prod\limits_{k=0,k\neq j}^{n-1}(z-\omega_n^k)=\sum\limits_{k=0}^{n-1}z^k(\omega^j_n)^{-k-1}\)
\({D^{-1}}_{i,j}=\frac{1}{f(\omega_n^j)}(\omega^j_n)^{-i-1}=\frac{1}{n}\omega_n^{-j}\)
第二个等式
注意到 \(\omega^{k}_n=\omega^{n-k}_n\), 同时左乘翻转矩阵的效果就是调换行的位置.
仔细思考上述矩阵, 你们会发现一些有趣的结论, 比如 \(\bm{D}^4=n^2\bm{I},\bm{D}=\bm{D}^T,\bar{\bm{D}}=\bm{RD}=\bm{DR}\)
上述代表什么含义请我们自行思考
还有一个有趣的问题, \(\det \bm{D}\) 是多少 ?
answer
由于 \(\bm{D}^2=n\bm{R}\), 你们显然知道其模长为 \(\sqrt{n^n}\), 且幅角一定是 \(\frac{\pi}{2}\) 的倍数.
具体怎么求呢, 考虑范德蒙德行列式, \(\prod\limits_{i\lt j}(x_j-x_i)\)
你们只考虑其幅角, \((\omega_n^j-\omega_n^i)\) 的幅角为 \(\frac{n+i+j}{2n}\pi\)
所求即为 \(\sum\limits_{j=1}^{n-1}\sum\limits_{i=0}^{j-1}\frac{n+i+j}{2n}\pi\)
固定 \(j\) , \(\sum\limits_{i=0}^{j-1}\frac{n+i+j}{2n}\pi=\frac{nj+j^2+\binom{j}{2}}{2n}\pi\)
再对 \(j\) 求和得, \(n\binom{n}{2}\frac{\pi}{2}\) .
因此其封闭形式可以写成 \(n^{\frac{n}{2}}i^{n\binom{n}{2}}\)
对于快速傅里叶变换, 这里有几个代数角度的有趣事实是你们可以导出的
radix-2 的 \(fft\) 实际上给出了一种把 \(\bm{D}_{2^n}\) 拆解成 \(O(n2^n)\) 个初等矩阵乘积的方式.
同理其逆变换也可以等价于(逆序)施以初等变换矩阵的逆矩阵.
对于按时域抽取(dit)和按频域抽取(dif),
\(dif\) 是对于序列长度更自然的一扩展, 也就是说其对应的变换矩阵 \(\bm{\overset{\sim}{D}}\) 满足 \(\forall i,j\lt 2^n, \bm{\overset{\sim}{D}}_{2^n,i,j}=\bm{\overset{\sim}{D}}_{2^{n+1},i,j}\)
假设有位逆序变换矩阵 \(\bm{B}\) , 我们有 \(\bm{B}^T=\bm{B},\bm{B}^2=\bm{I}\) 且 \(\bm{\overset{\sim}{D}}=\bm{BD}\)
自然, \(dit\) 对应的变换矩阵就是 \(\bm{\overset{\sim}{D'}}=DB\) , 最后再处理归一系数的问题.
你们就有 \(\bm{\overset{\sim}{D^T}}=\bm{\overset{\sim}{D'}}\)
那么, 常见的蝴蝶变换无非就是说 \(\bm{D}=\bm{\overset{\sim}{D'}B}\)
也就对应了先位逆序翻转再合并处理的过程 .
给我们一个思考题, 把 \(\bm{D}_{2^n}\) 看成 \(n\) 层变换的叠加, 那么把 \(\bm{\overset{\sim}{D}}_{2^n}\) 也看成 \(n\) 层变换的叠加, 我是否理解了 \(\bm{\overset{\sim}{D}}\) 的好处?