FFT学习笔记
学习笔记
因为已经有比我写的好的了,所以这里就不会重头讲,只讲一些自己需要用的而已。
解决什么呢?解决两个多项式快速相乘的问题。
我们设第一个多项式为,第二个多项式为.
多项式的项数为 ,多项式的项数为.
乘出来的多项式为.项数为.
入门基本:初中一年级学历
DFT
过程:把系数表达转换为点值表达
相信大家都学过了待定系数法啦
把一个多项式转换为点值表达应该不难
显而易见,把一个次多项式转换为点值表达,需要个坐标。
我们把这些坐标记为:
我们把这些坐标记为:
那么坐标就为:
那么我们的问题就在于如何将和转换为点值表达。
求出和的点值表达,就可以快速算出的点值表达了。
复数
在学习DFT之前,还要先学学这个——复数
虚数
定义:
实数和虚数的组合就是复数,记为
PS:要化简为
复数的 模长 指它的长度(到原点的距离),辐角 指它与原点的连线,与 轴(逆时针)的夹角。如图,复数 的模长和辐角都已标出(引用longlongzhu123的博客)
代码定义复数
结构体存储:一个存实数部,一个存虚数部
struct Complex{
double r,i;
Complex():r(0),i(0){} //初始化
Complex(double R,double I) : r(R),i(I){} //同r=R,i=I,给一个虚数赋值
Complex(const Complex& c) : r(c.r),i(c.i){} //等同r=c.r,i=c.i
};
复数运算
我们设两个复数, , . 一个实数 .
加法
减法
乘法
运算的几何意义(非重要)
(引用longlongzhu123的博客)
加法
例子:
意义:发现什么了吗?没有?看看那条虚线跟 有什么关系?没错。虚线与 平行。 和 相加的结果可以看成在 的端点处向上数格,向右数 格得到的点。或者说是两个复数所组成平行四边形的一条对角线。(理解一下这句话)
乘法
复数乘法也有几何意义。一句话:模长相乘,辐角相加。
代码实现运算
重载看不到不要紧,直接看就ok了。(记住返回的也是复数,用结构体存)
inline Complex operator+(const Complex&a,const Complex&b){return Complex(a.r+b.r,a.i+b.i);} //复数+
inline Complex operator-(const Complex&a,const Complex&b){return Complex(a.r-b.r,a.i-b.i);} //复数-
inline Complex operator*(const Complex&a,const Complex&b){ //复数*
return Complex(a.r*b.r - a.i*b.i , a.r*b.i + b.r*a.i );
}
单位根
单位圆:在复平面上一个模长为的圆 ,长下面这个样子。
n次单位根:把单位圆平分成份,取其中第一份(从x轴的正半轴开始逆时针平分)
例子:次单位根,长下面那样,点即为次单位根。
我们把n次单位根记为:或
那剩下的个点(指上面的和点)怎么表示呢?
我们发现,点是从轴正半轴开始逆时针数的第一个点(点是第个,记作),所以它记作,那么点是第二个点,它记作。同理,第个点就叫,另外。
单位根的性质
(引用至command_block的blog)
单位根的世界,就是一个单位圆。
-1. $ \forall x:\omega_n0=1\omega_n0=1$)
0.
1.
2.
3.当为偶数时,
4.
5. (注:左边为实数部,右边为虚数部)
6.
本文作者:Hastieyua
本文链接:https://www.cnblogs.com/hyfhaha/p/10887243.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步