FFT 學習筆記

2022-05-06 20:03:11 字數 2175 閱讀 3593

\[f(x) = \sum\limits_^ a_i * x^i

\]\((x_0,f(x_0)),(x_1,f(x_1))...(x_, f(x_))\)

首先我們要了解複數 即 $i = \sqrt $

乙個數有實部和虛部 即 \(a = x + y * i ~~ (x, y)\)

原來的實數運算相當於在乙個一維數軸上進行移動,複數則是在二維平面上運動

一句話來說就是摸長相乘,幅角相加

c++中提供了複數模板

#include complex a;
可以像正常數一樣加減乘除

下面預設 \(n\) 是2的整數次冪, 不夠在末尾補0

對於乙個 \(n\) 次多項式我們把乙個單位圓分成 \(n\) 份

\[\omega_n^0, \omega_n^1, \omega_n^2,...,\omega_n^

\]\[\omega_n^k = (cos(\frac k n * 2 * \pi), sin(\frac k n * 2 * \pi))

\]\(\omega_n^k\) 叫做單位根 , \(\omega_n^1\) 就叫做 \(n\) 次單位根 , 根據複數運算 \(\omega_n^k = (\omega_n^1)^k\)

\[\begin \omega_^ = \omega_n^k \\\omega_n^ = - \omega_n ^ k \end

\]都比較顯然把。。。

把 \(\omega_0, \omega_1, \omega_2,...,\omega_\) 帶入多項式,得到 \(f(\omega_0), f(\omega_1), f(\omega_2),...,f(\omega_)\),\(\\) 這種點值表示就是離散傅利葉變換

設 \(y_0, y_1, ... , y_ = f(\omega_n^0), f(\omega_n^1), ... , f(\omega_n^)\)

設函式\[f(x) = \sum\limits_^ y_i * x^i

\]將單位根的倒數 \(\omega_n^, \omega_n^,...\omega_n^\) 帶入 \(f(x)\)

得到\[z_k= f(\omega_n^)= \sum_ ^ y_i * \omega_n^

\]\[= \sum_ ^ \sum_ ^ a^j * (\omega_n^i) ^ j * (\omega_n^) ^ i

\]\[=\sum_ ^ a^j \sum_ ^ (\omega_n^j) ^ i * (\omega_n^)^i

\]\[=\sum_ ^ a^j \sum_ ^ (\omega_n^)^i

\]根據等比數列求和公式

\[z_k = a_k * n

\]\[a_k = \frac n

\]這樣,我們用點值表示推出了係數

已知\[f(x) = \sum a_i * x^i

\]把 \(f(x)\) 分成奇偶兩部分

\[f(x) = (a_0x^0 + a_2x^2 + a_4x ^ 4 + ...) + (a_1 x ^ 1 + a_3 x ^3 + a_5 x ^ 5 + ...)\]設

\[\begin a(x) = a_0x^0 + a_2 x ^ 1 + a_4 x ^2... \\ b(x) = a_1 x ^ 0 + a_3x^1 + a_5x^2...\end

\]\[f(x) = a(x^2) + x * b(x ^ 2)

\]把 \(\omega_n^k (k < \frac n 2)\) 帶入

\[f(\omega_n^k) = a(\omega_n^) + \omega_n^k b(\omega_n^)

\]\[= a(\omega_^k) + \omega_n^k b(\omega_ ^ k)

\]把 \(\omega_n^ ( k < \frac n 2)\) 帶入

\[f(\omega_n^) = a(\omega_n^ * \omega_n^n) -\omega_n^k b(\omega_n^ * \omega_n^n)

\]\[= a(\omega_^) - \omega_n^k b (w_^k)

\]n = 1時直接返回就行了

FFT學習筆記

fft可用於解決一些卷積問題。一般問題形式如下 c a b c i ij 0a i b i j 若把a,b看成兩個次數為n多項式 a x ni 0 a i xi,b x ni 0b i x i 原問題等於兩個多項式相乘,c的次數等於2n 1 乙個次數界為n的多項式a的點值表達為n個點值對所組成的集合...

FFT學習筆記

今天doggu講了,開始覺得這玩意好強啊 後來自己看的時候發現蠻zz wys表示 贊同 所以很多自己覺得遙不可及,一輩子都不可能學會的東西只要慢慢理解,理解好了再把他化為自己的語言,歸到自己的世界裡 就覺得不是很難了,甚至很簡單.當然開始並不是,從 好難啊 到 這麼簡單困大爺我這麼久,之前腦子抽了z...

FFT學習筆記

fft學習筆記 fft,快速傅利葉變換,是一種在 o n log n 的時間內計算兩個多項式乘積的演算法。沒學過的請自行翻閱高中數學選修2 2。給出乙個多項式 f x a 0 a 1x a 2x 2 a nx n 係數表示法 就是用乙個係數序列來表達多項式,顯然係數序列和多項式是一一對應的。f x ...