浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理
浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理
标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值
只要稍微看过一点线性代数的应该都知道范德蒙德行列式。
\[V(x_0,x_1,\cdots ,x_{n-1})=\begin{bmatrix}
{1}&{1}&{\cdots}&{1}\\
{x_{0}}&{x_{1}}&{\cdots}&{x_{n-1}}\\
{x_{0}^2}&{x_{1}^2}&{\cdots}&{x_{n-1}^2}\\
{\vdots}&{\vdots}&{}&{\vdots}\\
{x_{0}^{n-1}}&{x_{1}^{n-1}}&{\cdots}&{x_{n-1}^{n-1}}\\
\end{bmatrix} \]
而范德蒙德行列式由于其本身的特殊性,具有通项公式:
\[V(x_0,x_1,\cdots ,x_{n-1})=\prod _{n > i > j \geq 0}(x _{i}-x _{j})\]
我们同样可以把行列式中的项写到矩阵中来,即范德蒙德方阵
\[V=\begin{pmatrix}
{1}&{1}&{\cdots}&{1}\\
{x_{0}}&{x_{1}}&{\cdots}&{x_{n-1}}\\
{x_{0}^2}&{x_{1}^2}&{\cdots}&{x_{n-1}^2}\\
{\vdots}&{\vdots}&{}&{\vdots}\\
{x_{0}^{n-1}}&{x_{1}^{n-1}}&{\cdots}&{x_{n-1}^{n-1}}\\
\end{pmatrix}\]
考虑范德蒙德方阵的逆矩阵,我们可以借助伴随矩阵来计算。
对于\(V\)的伴随矩阵\(V^*\)
\[(V^*)_{ij}=c_{ij}\]
其中\(c_{ij}\)为\(V\)的代数余子式
有\(V^{-1}={V* \over det(V)}\)
那么对于每一项,有\((V^{-1})_{ij}={c_{ij} \over det(V)}\)
我们只需要知道每一个代数余子式其与行列式的商即可。
而然这种方法比较复杂,尤其对于缺失了一行的范德蒙德行列式难以计算,而本文的重点并不在此,如果想找详细的证明可以去看这篇博客Vandermonde 矩陣的逆矩陣公式
最后可以得到
\[(V^{-1})_{ij}=(-1)^{j+1}{ \sum\limits_{0 \leq p_1<\cdots < p_{n-j} < n;\ p_1,p_2,\cdots p_{n-j} \ne i} x_{p_1} x_{p_2} \cdots x_{p_{n-j}} \over \prod\limits_{0 \leq k < n;\ k\ne i} (x_k-x_i)} \]
上面的方法太过复杂,接下来我们考虑范德蒙德方阵的实际意义进行思考。
重新审视方阵,发现乘上一个范德蒙德方阵相当于带进了\(n\)个点进行求值,即
\[{\begin{pmatrix}
{a_0}\\
{a_1}\\
{a_2}\\
{\vdots}\\
{a_{n-1}}\\
\end{pmatrix}
}^T\begin{pmatrix}
{1}&{1}&{\cdots}&{1}\\
{x_{0}}&{x_{1}}&{\cdots}&{x_{n-1}}\\
{x_{0}^2}&{x_{1}^2}&{\cdots}&{x_{n-1}^2}\\
{\vdots}&{\vdots}&{}&{\vdots}\\
{x_{0}^{n-1}}&{x_{1}^{n-1}}&{\cdots}&{x_{n-1}^{n-1}}\\
\end{pmatrix}={
\begin{pmatrix}
{y_0}\\
{y_1}\\
{y_2}\\
{\vdots}\\
{y_{n-1}}
\end{pmatrix}}^T
\]
相当于有多项式\(f(x)=\sum_{i=0}^{n-1} a_ix^i\),其中\(y_i=f(x_i)\)
乘上范德蒙德方阵相当于带入\(n\)个点求值,反过来,乘上其逆矩阵就应该是用\(n\)个点插值。
即
\[{\begin{pmatrix}
{a_0}\\
{a_1}\\
{a_2}\\
{\vdots}\\
{a_{n-1}}\\
\end{pmatrix}}^T
={\begin{pmatrix}
{y_0}\\
{y_1}\\
{y_2}\\
{\vdots}\\
{y_{n-1}}
\end{pmatrix}}^T
\begin{pmatrix}
{1}&{1}&{\cdots}&{1}\\
{x_{0}}&{x_{1}}&{\cdots}&{x_{n-1}}\\
{x_{0}^2}&{x_{1}^2}&{\cdots}&{x_{n-1}^2}\\
{\vdots}&{\vdots}&{}&{\vdots}\\
{x_{0}^{n-1}}&{x_{1}^{n-1}}&{\cdots}&{x_{n-1}^{n-1}}\\
\end{pmatrix}^{-1} \]
那么我们考虑拉格朗日插值,有
\[f(x)=\sum_{i}y_i\prod_{j\ne i} {x-x_j \over x_i-x_j} \]
显然,\((V^{-1})_{ij}\)为\(\prod\limits_{k\ne i} {x-x_k \over x_i-x_k}\)在\(x^{j-1}\)项的系数。
快速傅立叶变换的核心思想也是将系数向量迅速变换为点值向量,再迅速的将点值向量还原成系数向量,其中还原的操作我们称之为\(IDFT\)。
用\(1\)的\(n\)次复根\(w\),如果没有特别说明,以下本文中的\(w\)都为\(e^{2\pi \over n}\)
在做快速傅立叶变换的时候,我们乘上了一个\(V(w_0,w_1,\cdots,w_{n-1})\)的矩阵。
而在\(IDFT\)时,我们需要乘上\(V(w_0,w_1,\cdots,w_{n-1})^{-1}\),但是在实际应用中,我们会直接乘上$ {1 \over n}V(w_0,w_{-1},\cdots,w_{-n+1}) $。接下来笔者将证明这两个矩阵是相同的。(当然我们默认n为2的次幂)
\[\prod\limits_{j\ne i} {(x-w^j) \over (w^i-w^j)}={\prod\limits_{j\ne i} (x-w^j) \over \prod\limits_{j\ne i} (w^i-w^j)}\]
不妨令\[G(x)=\prod_{0 \leq j < n} (x-w^j)\]
而\(w^{0},w^1,\cdots,w^{n-1}\)都是1的n次复根,根据代数基本定理,显然有\[G(x)=x^n-1\]
那么考虑原式分母\[\prod\limits_{j\ne i} (w^i-w^j) = \lim _{x \to w^i}{G(x) \over {x-w^i}}\]
根据洛必达法则,这个极限的值相当于上下部分求导的商。
\[ \lim _{x \to w^i}{G(x) \over {x-w^i}}=\lim _{x \to w^i} G'(x)=n \times w^{i(n-1)}=n \times w^{-i}\]
原式分子
\[{\prod\limits_{j\ne i} (x-w^j)}={G(x) \over {x-w^i}}={1-x^n \over {w^i-x}}\\
=w^{-i} \times \begin{pmatrix}{1 \over 1- x w^{-i}}-{x^n \over 1-xw^{-i}}\end{pmatrix}\\
=w^{-i} \times \begin{pmatrix}{\sum_{j=0}^{\infty} w^{-ij}x^j -\sum_{j=n}^{\infty} w^{-i(j-n)}x^j} \end{pmatrix}\\
=w^{-i} \times \sum_{j=0}^{n-1} w^{-ij} x^j
\]
分子除以分母,得
\[原式={w^{-i} \times \sum\limits_{j=0}^{n-1} w^{-ij} x^j \over n \times w^{-i}}\\
=\sum_{j=0}^{n-1} {w^{-ij} \over n}x^j\]
对比各项系数,不难得出两矩阵相同,即
\[\begin{pmatrix}
{1}&{1}&{\cdots}&{1}\\
{1}&{w^{1}}&{\cdots}&{w^{n-1}}\\
{1}&{w^{2}}&{\cdots}&{w^{(n-1)2}}\\
{\vdots}&{\vdots}&{}&{\vdots}\\
{1}&{w^{n-1}}&{\cdots}&{w^{(n-1)(n-1)}}\\
\end{pmatrix}^{-1}
={1 \over n}\begin{pmatrix}
{1}&{1}&{\cdots}&{1}\\
{1}&{w^{-1}}&{\cdots}&{w^{-(n-1)}}\\
{1}&{w^{-2}}&{\cdots}&{w^{-(n-1)2}}\\
{\vdots}&{\vdots}&{}&{\vdots}\\
{1}&{w^{-(n-1)}}&{\cdots}&{w^{-(n-1)(n-1)}}\\
\end{pmatrix}
\]
浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理的更多相关文章
- bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]
4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...
- Codeforces 785D - Anton and School - 2 - [范德蒙德恒等式][快速幂+逆元]
题目链接:https://codeforces.com/problemset/problem/785/D 题解: 首先很好想的,如果我们预处理出每个 "(" 的左边还有 $x$ 个 ...
- 【题解】幼儿园篮球题(范德蒙德卷积+斯特林+NTT)
[题解]幼儿园篮球题(NTT+范德蒙德卷积+斯特林数) 题目就是要我们求一个式子(听说叫做超几何分布?好牛逼的名字啊) \[ \sum_{i=1}^{S}\dfrac 1 {N \choose n_i ...
- 【学习笔记】快速傅里叶变换(FFT)
[学习笔记]快速傅里叶变换 学习之前先看懂这个 浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理--gzy hhh开个玩笑. 讲一下\(FFT\) ...
- 浅谈FFT、NTT和MTT
前言 \(\text{FFT}\)(快速傅里叶变换)是 \(O(n\log n)\) 解决多项式乘法的一个算法,\(\text{NTT}\)(快速数论变换)则是在模域下的,而 \(\text{MTT} ...
- Java线上问题排查神器Arthas快速上手与原理浅谈
前言 当你兴冲冲地开始运行自己的Java项目时,你是否遇到过如下问题: 程序在稳定运行了,可是实现的功能点了没反应. 为了修复Bug而上线的新版本,上线后发现Bug依然在,却想不通哪里有问题? 想到可 ...
- [技术]浅谈OI中矩阵快速幂的用法
前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...
- 浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来 ...
- flex布局浅谈
flex布局浅谈和实例 阿基米德曾说给我一个支点我可以撬动地球,而拥有flex基本可以撬动所有的布局. 1.flex布局基本介绍及效果展示 工欲善其事必先利其器,来来来,一起看下基础知识先(呵~,老掉 ...
随机推荐
- C++ 怎么让静态变量只初始化一次
童鞋们在学习C++的时候,往往只是按照书本上的原文去强行记忆各种特性,比方说,静态变量只初始化一次.你心中一定在默念:一定要记住,static只会初始化一次云云,希望自己能够记住.告诉你,你为什么总是 ...
- .net 设置Webbowser 版本
.net 里的Webbowser控件默认情况是用IE7来渲染 可修改注册表试用是最新的版本来渲染: using System; using System.Collections.Generic; us ...
- 20155330 《网络对抗》 Exp2 后门原理与实践
20155330 <网络对抗> 实验二 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 在网站上下载非官方软件,所下载的软件中携带伪装过的后门程序. 例举你 ...
- linux下使用软连接之案例二
在笔者的上一篇文章介绍过怎么通过linux的软连接在不修改上传代码的情况下,将上传到项目路径下的图片改为上传到项目外面,防止重新部署后图片被删除了.同时还可以直接通过类似访问静态资源的方 ...
- 【php增删改查实例】第七节 - 部门管理模块(画一个datagrid表格)
在easyui中,datagrid组件需要用一个table标签去渲染. <table id="grid0" title="部门管理" class=&quo ...
- P4292 [WC2010]重建计划
无脑上二分+淀粉质完事了 每个子树算的时候把儿子按照最长路径从小到大依次做,和前面的单调队列算一波,每个儿子的复杂度不超过这个子树大小 // luogu-judger-enable-o2 #inclu ...
- 软件工程第二次作业(JUnit的使用)
初次使用JUnit 感谢学习资源Junit使用的超简单介绍源 一.开发环境及界面截图: 系统 Windows 10 编辑器 eclipse 语言 ...
- redis安装启动和数据操作
redis安装和启动 1.安装包下载地址 >> redis基本数据类型 string(字符串和数值) .list(列表/队列).hashmap(哈希表[键唯一]). set(集合[值唯一] ...
- Windows10没有修改hosts文件权限的解决方案(亲测有效)
当遇到有hosts文件不会编辑或者,修改了没办法保存”,以及需要权限等问题如图: 或者这样: 我学了一招,现在教给你: 1.win+R 2.进入hosts的文件所在目录: 3.我们开始如何操作才能不出 ...
- Github相册博客搭建
前一段时间我看见一个问答,大概意思就是程序员都是怎么用自己的专业技能逗女朋友或表白的. 看了很多,有写定时关机脚本恶搞的,也有简单写个html展示的,其中最著名的就是几年前有个人写了个网页记录他们在一 ...