您的位置:首页 > 其它

利用FFT和逆FFT求多项式乘法 的原理:

2013-11-25 21:01 295 查看
利用FFT和逆FFT求多项式乘法 的原理:

假设是N次和M次多项式的乘法,

首先明白为什么要用FFT方法,因为一个字,快。N越大,快得越离谱。

然后是过程,三步走:

1.由系数来求点值(求值) 2.代入点值计算总体Y. 3.由点值计算系数(插值)

其实步骤1的点值可以任意取,只要取够了n+m次,就可以表示了,不过,任意取的代价就是步骤3基本没法求(除非你用什么matlab工具或者什么拟合算法)。步骤3会非常慢以至于失去意义。

于是,FFT成功上位。一堆又一堆的数学公式出现了,首先登场的是单位复根这个家伙。

点值选取了它,就可以大大简化运算了(由于它的种种变态属性)。

我们用分治法将N次多项式搞成两个多项式,A(x) = A1(x*x) + xA2(x*x)

选取n个n次单位复根的平方作为点值,由于定理:

若n>0且n是偶数,n个n次单位复根的平方等于n/2个n/2次单位复根。(折半定理)证明不难,主要是从w本身的值的特性入手。

于是问题规模从n转换为n/2。递归一下,解法最后会变成加法或者减法如此easy的东西。

通过以上便完成了步骤1和2,3怎么办?逆FFT登场。

矩阵积 y = V a,V是关于x的范德蒙德矩阵。为什么这个会很巧妙地成立,我也不知道。

现在,考虑 a = V^-1*y,得到了 a = 1/n sum(0-n-1){y*w^-kj}. 然后,世界就很简单地去运行了。

那它不过就是求一个逆矩阵而已吗?和逆FFT有神马关系?

这个式子的形式很不好意思,名字就是逆FFT。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: