學習筆記 快速傅利葉變換 FFT

2022-02-23 21:03:47 字數 2356 閱讀 3096

學習之前先看懂這個

**範德蒙德(vandermonde)方陣的逆矩陣的求法以及快速傅利葉變換(fft)中idft的原理——gzy

hhh開個玩笑。

講一下\(fft\) 的流程,我也不準備長篇大論地分析\(fft...\)

這樣的流程,最終複雜度是\(o(n \log n)\) 的,現在我們從最簡單的點值表示法講起。

證明:顯然。設\(f(x)=\sigma_i^ a_ix^\),直接通過待定係數法解即可。

那麼假如我們已經有了多項式的點值表示法了,怎麼辦乘起來呢?

for(register int t=0;t< len;++t) a[t]*=b[t];
就是這樣簡單。

樸素的想法是帶入\(o(n^2)​\)求值,還是用了秦六韶的情況下...

為什麼我們不能考慮優化,是因為不同的\(x\)的值是不一樣的(不然呢)

但是考慮一種特殊情況:

\[(-1)^2=1^2

\]是不是就一樣了這為我們優化複雜度創造了條件,引入複數的概念。利用複數中的"單位負根"的性質我們可以直接分治求值。

詳細證明我最後放連線。

還記得開頭提到的範德蒙德(vandermonde)方陣嗎...

如果不知道請轉到《工程數學——線性代數(第六版)》高等教育出版社第\(18​\)面,或者**範德蒙德(vandermonde)方陣的逆矩陣的求法以及快速傅利葉變換(fft)中idft的原理——gzy。

\[\bold v=\begin

&&&\\

}&}&&}\\

^2}&^2}&&^2}\\

&&{}&\\

^}&^}&&^}\\

\end

\]考慮拿個係數右乘這個矩陣

\[\\

\\\\

\\}\\

\end

}^t\begin

&&&\\

}&}&&}\\

^2}&^2}&&^2}\\

&&{}&\\

^}&^}&&^}\\

\end=

\\\\

\\\\

}\end}^t

\]實際上就是把\(x_0->x_\)這麼多變數帶入式子。

範德蒙德這個矩陣是可逆的,於是我們有

\[\\

\\\\

\\}\\

\end}^t=\\

\\\\\\}

\end}^t

\begin

&&&\\

}&}&&}\\

^2}&^2}&&^2}\\

&&{}&\\

^}&^}&&^}\\

\end^

\]假如我們可以快速求出范德蒙德矩陣的逆矩陣,然後順便對於這個特殊的矩陣乘法快速求值,這樣我們就可以得到原來的係數是吧。

同樣利用上面\(idt​\)的方法,可以做到\(n\log n​\),甚至只要在某個地方把\(1->-1​\),數學是不是很神奇?所以最後的**很短,大概是這樣的:

fft(a,1);

fft(b,1);

for(register int t=0;t<=len;++t) a[t]*=b[t];

fft(a,-1);

是不是很神奇?

我在這裡講得很省略,主要是為了給自己梳理思路(方便記憶),\(fft\)有許多有趣的數學推理,大家可以自己去查閱資料,限於篇幅和筆者水平這裡就略去了咕咕咕。

注意!如果你就看了我的解析你絕對看不懂下面的**,除非你是神仙(那你還是看吧,這位神仙)

#includeusing namespace std;   typedef long long ll;

template < class ccf > inline ccf qr(ccf ret)

inline int qr()

const int maxn=1<<21|1;

const double pi=acos(-1.0);

const double eps=1e-5;

int n,m,len(1);

typedef complexis;

is a[maxn];

is b[maxn];

int r[maxn];

inline void fft(is*a,double ty)

參考資料

比較嚴謹而詳細的但不生澀的好總結

假如你不想看那些具體而不夠抽象也不夠嚴謹的講解並且想一次完全明白fft(數學基礎要好)

**範德蒙德(vandermonde)方陣的逆矩陣的求法以及快速傅利葉變換(fft)中idft的原理——gzy

**實現看起來常數很小的總結

快速傅利葉變換(FFT)學習筆記

模板理解 1.背景 完成兩個多項式的卷積 即 兩多項式形如 i 0nai xi sum n a x i 0n ai x i i 0mbi xi sum m b x i 0m bi x i 卷積後為 i 0n m ci j 0 iajb i j xi sum c sum ia b x i 0n m c...

FFT 快速傅利葉變換 學習筆記

具體fft的原理,我就不解釋了 網上大佬講得都比我好 說白了fft直接作用就是計算兩個多項式f x g x 的結果的係數 暴力做法很容易想o n n fft用了一些數學上的方法把它優化成了 o nlogn 把這個式子按照奇偶性拆開 for int i 0 i 1 x i r i 1 x i 1 遞迴...

快速傅利葉變換FFT

fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...