]> mj.ucw.cz Git - ads2.git/blob - 7-fft/7-fft.tex
Prechod na nova makra
[ads2.git] / 7-fft / 7-fft.tex
1 \def\scharfs{\char"19}
2 \input lecnotes.tex
3 \prednaska{9}{Fourierova transformace}{}
4
5 \h{Násobení polynomù}
6
7 V~této kapitole se budeme zabývat násobením polynomù. Tento na první pohled
8 triviální algebraický problém má pøekvapivì efektivní øe¹ení, které nás
9 dovede a¾ k~Fourierovì transformaci.
10
11 \s{Znaèení:} {\I Polynomy} jsou výrazy typu
12 $$
13 P(x)=\sum_{i=0}^{n-1} p_i\cdot x^i,
14 $$
15 kde $x$ je~promìnná a $p_0$ a¾ $p_{n-1}$ jsou èísla, kterým øíkáme {\I koeficienty} polynomu.
16 Obecnì budeme znaèit polynomy velkými písmeny a jejich koeficienty pøíslu¹nými
17 malými písmeny s~indexy.
18
19 V~algoritmech polynomy obvykle reprezentujeme pomocí {\I vektoru koeficientù}
20 $(p_0,\ldots,p_{n-1})$; oproti zvyklostem lineární algebry budeme slo¾ky vektorù v~celé
21 této kapitole indexovat od~0. Poètu koeficientù~$n$ budeme øíkat {\I velikost
22 polynomu} $\vert P\vert$. Èasovou slo¾itost algoritmu budeme vyjadøovat vzhledem k~velikostem
23 polynomù na jeho vstupu.
24
25 Pokud pøidáme nový koeficient $p_n=0$, hodnota polynomu se pro ¾ádné~$x$
26 nezmìní. Stejnì tak je-li nejvy¹¹í koeficient~$p_{n-1}$ nulový, mù¾eme ho
27 vynechat. Takto mù¾eme ka¾dý polynom zmen¹it na {\I normální tvar,}
28 v~nìm¾ má buïto nenulový nejvy¹¹í koeficient, nebo nemá vùbec ¾ádné
29 koeficienty -- to je takzvaný {\I nulový polynom,} který pro ka¾dé~$x$ roven nule.
30 Nejvy¹¹í mocninì s~nenulovým koeficientem se øíká {\I stupeò polynomu} $\deg R$,
31 nulovému polynomu pøiøazujeme stupeò~$-1$.
32
33 \s{Násobení polynomù:}
34 Polynomy násobíme jako výrazy:
35 $$
36 P(x)\cdot Q(x) = \Biggl( \sum_{i=0}^{n-1} p_i\cdot x^i \Biggr) \cdot \Biggl( \sum_{j=0}^{m-1} q_j\cdot x^j \Biggr).
37 $$
38 Po~roznásobení mù¾eme tento souèin zapsat jako polynom~$R(x)$, jeho¾
39 koeficient u~$x^k$ je roven $r_k = p_0q_k + p_1q_{k-1} + \ldots + p_kq_0$.
40
41 Snadno nahlédneme, ¾e polynom~$R$ má stupeò $\deg P + \deg Q$ a velikost
42 $\vert P\vert + \vert Q\vert - 1$.
43
44 Algoritmus, který poèítá souèin dvou polynomù velikosti~$n$ pøímo podle definice,
45 proto spotøebuje èas $\Theta(n)$ na výpoèet ka¾dého koeficientu, celkem
46 tedy $\Theta(n^2)$. Pokusíme se nalézt efektivnìj¹í zpùsob.
47
48 \s{Rovnost polynomù:}
49 Odboème na chvíli a uva¾ujme, kdy dva polynomy pova¾ujeme za stejné.
50 Na to se dá nahlí¾et více zpùsoby. Buïto se na polynomy mù¾eme dívat
51 jako na výrazy a porovnávat jejich symbolické zápisy. Pak jsou si dva
52 polynomy rovny právì tehdy, mají-li po~normalizaci stejné vektory koeficientù.
53 Tomu se øíká {\I identická rovnost} polynomù a obvykle se znaèí $P\equiv Q$.
54
55 Druhá mo¾nost je porovnávat polynomy jako reálné funkce. Polynomy $P$ a~$Q$
56 si tedy budou rovny ($P=Q$) právì tehdy, je-li $P(x)=Q(x)$ pro v¹echna $x\in{\bb R}$.
57 Identicky rovné polynomy si jsou rovny i jako funkce, ale musí to platit i naopak?
58 Následující vìta uká¾e, ¾e ano a ¾e dokonce staèí rovnost pro koneèný poèet~$x$.
59
60 \s{Vìta:} Buïte $P$ a~$Q$ polynomy stupnì nejvý¹e~$d$. Pokud platí $P(x_i) = Q(x_i)$
61 pro navzájem rùzná èísla $x_0,\ldots,x_d$, pak jsou $P$ a~$Q$ identické.
62
63 \proof
64 Pøipomeòme nejprve následující standardní lemma o~koøenech polynomù:
65
66 {\narrower\s{Lemma:}
67 Polynom~$R$ stupnì~$t\ge 0$ má nejvý¹e $t$ koøenù (èísel~$\alpha$, pro nì¾ je $P(\alpha)=0$).
68
69 \proof
70 Z~algebry víme, ¾e je-li èíslo $\alpha$ koøenem polynomu~$R(x)$, mù¾eme $R(x)$ beze zbytku vydìlit
71 výrazem $x-\alpha$. To znamená, ¾e $R(x)\equiv (x-\alpha)\cdot R'(x)$ pro nìjaký polynom $R'(x)$
72 stupnì $t-1$. Dosazením ovìøíme, ¾e koøeny polynomu~$R'$ jsou pøesnì tyté¾ jako koøeny polynomu~$R$,
73 s~mo¾nou výjimkou koøene~$\alpha$.
74
75 Budeme-li tento postup opakovat $t$-krát, buïto nám v~prùbìhu dojdou koøeny
76 (a~pak lemma jistì platí), nebo dostaneme rovnost $R(x) \equiv (x-\alpha_1)\cdot\ldots\cdot(x-\alpha_t)\cdot R''(x)$,
77 kde $R''$ je polynom nulového stupnì. Takové polynomy ov¹em nemohou mít ¾ádný
78 koøen, a~tím pádem nemù¾e mít ¾ádné dal¹í koøeny ani~$R$.
79 \qed
80
81 }
82
83 \smallskip
84
85 \>Abychom dokázali vìtu, staèí uvá¾it polynom $R(x)\equiv P(x)-Q(x)$.
86 Tento polynom má stupeò nejvý¹e~$d$, ov¹em ka¾dé z~èísel $x_0,\ldots,x_d$
87 je jeho koøenem. Podle lemmatu musí tedy být identicky nulový, a~proto
88 $P\equiv Q$.
89 \qed
90
91 \s{Zpìt k~násobení:}
92 Vìta, ji¾ jsme právì dokázali, vlastnì øíká, ¾e polynomy mù¾eme reprezentovat
93 nejen vektorem koeficientù, ale také {\I vektorem funkèních hodnot} v~nìjakých smluvených
94 bodech -- tomuto vektoru budeme øíkat {\I graf polynomu.} Pokud zvolíme dostateènì
95 mnoho bodù, je polynom svým grafem jednoznaènì urèen.
96
97 V~této reprezentaci je pøitom násobení polynomù triviální: Souèin polynomù
98 $P$ a~$Q$ má v~bodì~$x$ hodnotu $P(x)\cdot Q(x)$. Staèí tedy grafy vynásobit
99 po~slo¾kách, co¾ zvládneme v~lineárním èase. Jen je potøeba dát pozor na to,
100 ¾e souèin má vy¹¹í stupeò ne¾ jednotliví èinitelé, tak¾e si potøebujeme poøídit
101 dostateèný poèet bodù.
102
103 \algo{NásobeníPolynomù}
104 \:Jsou dány polynomy $P$ a~$Q$ velikosti~$n$, urèené svými koeficienty.
105   Bez újmy na obecnosti pøedpokládejme, ¾e horních $n/2$ koeficientù je
106   u~obou polynomù nulových, tak¾e souèin $R=P\cdot Q$ bude také polynom
107   velikosti~$n$.
108 \:Zvolíme navzájem rùzná èísla $x_0,\ldots,x_{n-1}$.
109 \:Spoèítáme grafy polynomù~$P$ a~$Q$, tedy vektory $(P(x_0),\ldots,P(x_{n-1}))$
110   a $(Q(x_0),\ldots,Q(x_t))$.
111 \:Z~toho vypoèteme graf souèinu~$R$ vynásobením po~slo¾kách: $R(x_i)=P(x_i)\cdot Q(x_i)$.
112 \:Nalezneme koeficienty polynomu~$R$ tak, aby odpovídaly grafu.
113 \endalgo
114
115 \>Krok~4 trvá $\Theta(n)$, tak¾e rychlost celého algoritmu stojí a padá s~efektivitou
116 pøevodù mezi koeficientovou a hodnotovou reprezentací polynomù. To obecnì neumíme
117 v~lep¹ím ne¾ kvadratickém èase, ale zde máme mo¾nost volby bodù $x_0,\ldots,x_{n-1}$,
118 tak¾e si je zvolíme tak ¹ikovnì, aby pøevod ¹el provést rychle.
119
120 \h{Pokus o~vyhodnocení polynomu metodou Rozdìl a panuj}
121
122 Uva¾ujme polynom $P$ velikosti~$n$, který chceme vyhodnotit v~$n$~bodech.
123 Body si zvolíme tak, aby byly {\I spárované,} tedy aby tvoøily dvojice li¹ící
124 se pouze znaménkem: $\pm x_{0}, \pm x_{1}, \ldots, \pm x_{n/2-1}$.
125
126 Polynom $P$ mù¾eme rozlo¾it na~èleny se sudými exponenty a ty s~lichými:
127 $$P(x) = (p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n-2}x^{n-2}) + (p_{1}x^{1} +
128         p_{3}x^{3} + \ldots + p_{n-1}x^{n-1}).$$
129 Navíc mù¾eme z~druhé závorky vytknout~$x$:
130 $$P(x) = (p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{n-2}x^{n-2}) + x\cdot (p_{1}x^{0} +
131         p_{3}x^{2} + \ldots + p_{n-1}x^{n-2}).$$
132 V~obou závorkách se nyní vyskytují pouze sudé mocniny~$x$. Proto mù¾eme
133 ka¾dou závorku pova¾ovat za~vyhodnocení nìjakého polynomu velikosti~$n/2$
134 v~bodì~$x^2$, tedy:
135 $$P(x) = P_s(x^2) + x\cdot P_\ell(x^2),$$
136 kde:
137 $$\eqalign{
138 P_s(t) &= p_0t^0 + p_{2}t^{1} + \ldots + p_{n - 2}t^{n - 2\over 2}, \cr
139 P_\ell(t) &= p_1t^0 + p_3t^1 + \ldots + p_{n - 1}t^{n - 2\over 2}. \cr
140 }$$
141 Navíc pokud podobným zpùsobem dosadíme do~$P$ hodnotu~$-x$, dostaneme:
142 $$P(-x) = P_s(x^2) - x\cdot P_\ell(x^2).$$
143
144 Vyhodnocení polynomu~$P$ v~bodech $\pm x_0,\ldots,\pm x_{n-1}$ tedy
145 mù¾eme pøevést na vyhodnocení polynomù $P_s$ a~$P_\ell$ polovièní velikosti
146 v~bodech $x_0^2,\ldots,x_{n-1}^2$.
147
148 To naznaèuje algoritmus s~èasovou slo¾itostí $T(n) = 2T(n/2) + \Theta(n)$
149 a z~Kuchaøkové vìty víme, ¾e tato rekurence má øe¹ení $T(n) = \Theta(n\log n)$.
150 Jediný problém je, ¾e tento algoritmus nefunguje: druhé mocniny, které pøedáme
151 rekurzivnímu volání, jsou v¾dy nezáporné, tak¾e u¾ nemohou být správnì spárované.
152 Ouvej.
153
154 Tedy \dots{} alespoò dokud poèítáme s~reálnými èísly. Uká¾eme, ¾e v~oboru
155 komplexních èísel u¾ mù¾eme zvolit body, které budou správnì spárované
156 i po~nìkolikerém umocnìní na druhou.
157
158 \h{Intermezzo: Pøipomenutí komplexních èísel}
159 \def\ii{\mkern 0.5mu{\bf i}}
160 \def\im{{\bf i}}
161 \def\e{{\rm e}}
162 \def\\{\hfil\break}
163
164 \s{Základní operace}
165
166 \itemize\ibull
167 \:Definice: ${\bb C} = \{a + b\ii \mid a,b \in {\bb R}\}$, $\im^2=1$.
168
169 \:Sèítání: $(a+b\ii)\pm(p+q\ii) = (a\pm p) + (b\pm q)\ii$.
170
171 \:Násobení: $(a+b\ii)(p+q\ii) = ap + aq\ii + bp\ii + bq\ii^2 = (ap-bq) + (aq+bp)\ii$.
172 Pro $\alpha\in{\bb R}$ je $\alpha(a+b\ii) = \alpha a + \alpha b\ii$.
173
174 \:Komplexní sdru¾ení: $\overline{a+b\ii} = a-b\ii$. \\
175 $\overline{\overline x} = x$, $\overline{x\pm y} = \overline{x} \pm
176 \overline{y}$, $\overline{x\cdot y} = \overline x \cdot \overline y$, $x
177 \cdot \overline x  = (a+b\ii)(a-b\ii) = a^2+b^2 \in {\bb R}$.
178
179 \:Absolutní hodnota: $\vert x \vert = \sqrt{x\cdot\overline{x}}$, tak¾e $\vert
180 a+b\ii \vert = \sqrt{a^2+b^2}$. \\
181 Také $\vert \alpha x \vert = \vert \alpha\vert \cdot \vert x \vert$.
182
183 \:Dìlení: $x/y = (x\cdot \overline{y}) / (y \cdot \overline{y})$.
184 \endlist
185
186 \s{Gau{\scharfs}ova rovina a goniometrický tvar}
187
188 \itemize\ibull
189 \:Komplexním èíslùm pøiøadíme body v~${\bb R}^2$: $a+b\ii \leftrightarrow (a,b)$.
190
191 \:$\vert x\vert$ je vzdálenost od~bodu $(0,0)$.
192
193 \:$\vert x\vert = 1$ pro èísla le¾ící na~jednotkové kru¾nici ({\I komplexní jednotky}). \\
194 Pak platí $x=\cos\varphi + \im\sin\varphi$ pro nìjaké $\varphi\in\left[
195 0,2\pi \right)$.
196
197 \:Pro libovolné $x\in{\bb C}$: $x=\vert x \vert \cdot (\cos\varphi(x) +
198 \im\sin\varphi(x))$. \\
199 Èíslu $\varphi(x)\in\left[ 0,2\pi \right)$ øíkáme {\I argument}
200 èísla~$x$, nìkdy znaèíme $\mathop{\rm arg} x$.
201
202 \:Navíc $\varphi({\overline{x}}) = -\varphi(x)$.
203 \endlist
204
205 \s{Exponenciální tvar}
206
207 \itemize\ibull
208 \:Eulerova formule: $\e^{\im\varphi} = \cos\varphi + \im\sin\varphi$.
209
210 \:Ka¾dé $x\in{\bb C}$ lze tedy zapsat jako $\vert x\vert \cdot \e^{\ii \varphi(x)}$.
211
212 \:Násobení: $xy = \left(\vert x\vert\cdot \e^{\ii\varphi(x)}\right) \cdot
213         \left(\vert y\vert\cdot \e^{\ii\varphi(y)}\right) = \vert x\vert
214         \cdot \vert y\vert \cdot \e^{\ii(\varphi(x) + \varphi(y))}$ \\
215 (absolutní hodnoty se násobí, argumenty sèítají).
216
217 \:Umocòování: $x^\alpha = \left(\vert x\vert\cdot \e^{\ii\varphi(x)}\right)^
218         \alpha = {\vert x\vert}^\alpha\cdot \e^{\ii \alpha \varphi(x)}$.
219 \endlist
220
221 \s{Odmocniny z~jednièky}
222
223 \smallskip
224
225 Odmocòování v~komplexních èíslech obecnì není jednoznaèné: jestli¾e tøeba
226 budeme hledat ètvrtou odmocninu z~jednièky, toti¾ øe¹it rovnici $x^4=1$, nalezneme
227 hned ètyøi øe¹ení: 1, $-1$, $\im$ a $-\im$.
228
229 Prozkoumejme nyní obecnìji, jak se chovají $n$-té odmocniny z~jednièky, tedy
230 komplexní koøeny rovnice $x^n=1$:
231
232 \itemize\ibull
233 \:Jeliko¾ $\vert x^n \vert = \vert x \vert ^n$, musí být $\vert x \vert = 1$.
234   Proto $x=\e^{\ii\varphi}$ pro nìjaké~$\varphi$.
235 \:Má platit $1 = x^n = \e^{\ii\varphi n} = \cos{\varphi n} + \im\sin\varphi n$.
236   To nastane, kdykoliv $\varphi n = 2k\pi$ pro nìjaké $k\in{\bb Z}$.
237 \endlist
238
239 \>Dostáváme tedy $n$ rùzných $n$-tých odmocnin z~1, toti¾
240 $\e^{2k\pi\im/n}$ pro $k=0,\ldots,n-1$.
241 Nìkteré z~tìchto odmocnin jsou ov¹em speciální:
242
243 \s{Definice:} Komplexní èíslo~$x$ je {\I primitivní} $n$-tá odmocnina z~1, pokud $x^n=1$
244 a ¾ádné z~èísel $x^1,x^2,\ldots,x^{n-1}$ není rovno~1.
245
246 \s{Pøíklad:} Ze~ètyø zmínìných ètvrtých odmocnin z~1 jsou $\im$ a $-\im$ primitivní
247 a druhé dvì nikoliv (ovìøte sami dosazením). Pro obecné~$n>2$ v¾dy existují alespoò
248 dvì primitivní odmocniny, toti¾ èísla $\omega = \e^{2\pi \ii / n}$ a $\overline\omega = \e^{-2\pi\ii/n}$.
249 Platí toti¾, ¾e $\omega^j = \e^{2\pi\ii j/n}$, a~to je rovno~1 právì tehdy,
250 je-li $j$ násobkem~$n$ (jednotlivé mocniny èísla~$\omega$ postupnì obíhají
251 jednotkovou kru¾nici). Analogicky pro~$\overline\omega$.
252
253 \s{Pozorování:} Pro sudé~$n$ a libovolné èíslo~$\omega$, které je primitivní
254 $n$-tou odmocninou z~jednièky, platí:
255
256 \itemize\ibull
257 \:$\omega^j \neq \omega^k$, kdykoliv $0\le j<k<n$. Staèí se podívat na podíl
258   $\omega^k / \omega^j = \omega^{k-j}$. Ten nemù¾e být roven jedné,
259   proto¾e $0 < k-j < n$ a $\omega$ je primitivní.
260 \:Pro sudé~$n$ je $\omega^{n/2} = -1$. Platí toti¾ $(\omega^{n/2})^2 = \omega^n = 1$,
261   tak¾e $\omega^{n/2}$ je druhá odmocnina z~1. Takové odmocniny jsou jenom dvì:
262   1 a $-1$, ov¹em 1 to být nemù¾e, proto¾e $\omega$ je primitivní.
263 \endlist
264
265 \h{Vyhodnocení polynomù podruhé -- algoritmus FFT}
266
267 Uká¾eme, ¾e primitivních odmocnin lze vyu¾ít k~záchranì na¹eho párovacího
268 algoritmu na vyhodnocování polynomù.
269
270 Nejprve polynomy doplníme nulami tak, aby jejich velikost~$n$ byla mocninou dvojky.
271 Poté zvolíme nìjakou primitivní $n$-tou odmocninu z~jednièky~$\omega$ a budeme
272 polynom vyhodnocovat v~bodech $\omega^0,\omega^1,\ldots,\omega^{n-1}$. To jsou
273 navzájem rùzná komplexní èísla, která jsou správnì spárovaná -- hodnoty $\omega^{n/2},
274 \ldots,\omega^{n-1}$ se od $\omega^0,\ldots,\omega^{n/2-1}$ li¹í pouze znaménkem.
275 To snadno ovìøíme: pro $0\le j<n/2$ je $\omega^{n/2+j} = \omega^{n/2} \omega^j = -\omega^j$.
276 Navíc $\omega^2$ je primitivní $(n/2)$-tá odmocnina z~jednièky, tak¾e se rekurzivnì opìt
277 voláme na problém tého¾ druhu, a~ten je opìt správnì spárovaný.
278
279 Ná¹ plán pou¾ít metodu Rozdìl a panuj tedy vy¹el, opravdu máme algoritmus o~slo¾itosti
280 $\Theta(n\log n)$ pro vyhodnocení polynomu. Je¹tì ho upravíme tak, aby místo s~polynomy pracoval
281 s~vektory jejich koeficientù èi hodnot. Tomuto algoritmu se øíká FFT, vzápìtí
282 prozradíme, proè.
283
284 \algo{FFT}
285 \algin Èíslo~$n=2^k$, primitivní $n$-tá odmocnina z~jednièky~$\omega$
286   a vektor $(p_0,\ldots,p_{n-1})$ koeficientù polynomu~$P$.
287 \:Pokud $n=1$, polo¾íme $y_0\leftarrow p_0$ a skonèíme.
288 \:Jinak se rekurzivnì zavoláme na sudou a lichou èást koeficientù:
289 \::$(s_0,\ldots,s_{n/2-1}) \leftarrow {\rm FFT}(n/2,\omega^2,(p_0,p_2,p_4,\ldots,p_{n-2}))$.
290 \::$(\ell_0,\ldots,\ell_{n/2-1}) \leftarrow {\rm FFT}(n/2,\omega^2,(p_1,p_3,p_5,\ldots,p_{n-1}))$.
291 \:Z~grafù obou èástí poskládáme graf celého polynomu:
292 \::Pro $j=0,\ldots,n/2-1$:
293 \:::$y_j \leftarrow s_j + \omega^j\cdot \ell_j$.
294 \:::$y_{j+n/2} \leftarrow s_j - \omega^j\cdot \ell_j$.
295 \algout Graf polynomu~$P$, tedy vektor $(y_0,\ldots,y_{n-1})$, kde $y_j = P(\omega^j)$.
296 \endalgo
297
298 \h{Diskrétní Fourierova transformace}
299
300 Vyhodnotit polynom v~mocninách èísla~$\omega$ umíme, ale je¹tì nejsme v~cíli.
301 Potøebujeme umìt provést dostateènì rychle i opaèný pøevod -- z~hodnot na~koeficienty. K~tomu nám pomù¾e
302 podívat se na vyhodnocování polynomu trochu abstraktnìji jako na nìjaké zobrazení,
303 které jednomu vektoru komplexních èísel pøiøadí jiný vektor. Toto zobrazení
304 matematici v~mnoha rùzných kontextech potkávají u¾ nìkolik staletí a nazývají
305 ho Fourierovou transformací.
306
307 \s{Definice:}
308 {\I Diskrétní Fourierova transformace (DFT)} je zobrazení ${\cal F}: { {\bb C} ^n} \rightarrow { {\bb C} ^n}$,
309 které vektoru ${\bf x}$ pøiøadí vektor ${\bf y}$, jeho¾ slo¾ky jsou dány
310 pøedpisem $$y_j = \sum_{k=0}^{n-1} x_k \cdot \omega^{jk},$$
311 kde $\omega$ je nìjaká pevnì zvolená primitivní $n$-tá odmocnina z~jedné.
312
313 \s{Pozorování:}
314 Pokud oznaèíme ${\bf p}$ vektor koeficientù nìjakého polynomu~$P$, pak jeho
315 Fourierova transformace ${\cal F}({\bf p})$ není nic jiného ne¾ graf tohoto polynomu
316 v~bodech $\omega^0,\ldots,\omega^{n-1}$. To snadno ovìøíme dosazením do definice.
317
318 Ná¹ algoritmus tedy poèítá diskrétní Fourierovu transformaci v~èase $\Theta(n\log n)$.
319 Odtud pramení jeho název FFT -- Fast Fourier Transform.
320
321 \def\OO{{\bf\Omega}}
322
323 Také si v¹imnìme, ¾e DFT je lineární zobrazení. Mù¾eme ho proto zapsat
324 jako násobení nìjakou maticí~$\OO$, kde $\OO_{jk} = \omega^{jk}$.
325 Pro pøevod grafu na~koeficienty tedy potøebujeme najít inverzní zobrazení
326 urèené inverzní maticí $\OO^{-1}$.
327
328 Jeliko¾ $\omega^{-1} = \overline{\omega}$, pojïme zkusit, zda $\overline{\OO}$
329 není hledanou inverzní maticí.
330
331 \s{Lemma:} $\OO \cdot \overline{\OO} = n\cdot{\bf E}$, kde ${\bf E}$ je jednotková matice.
332
333 \proof
334 Dosazením do definice a elementárními úpravami:
335 $$\eqalign{
336 (\OO\cdot \overline{\OO})_{jk}
337 &= \sum_{\ell=0}^{n-1} \OO_{j\ell}\cdot\overline{\OO}_{\ell k}
338 = \sum_{\ell=0}^{n-1} \omega^{j\ell} \cdot \overline{\omega^{\ell k}}
339 = \sum_{\ell=0}^{n-1} \omega^{j\ell} \cdot \overline{\omega}^{\ell k}\cr
340 &= \sum_{\ell=0}^{n-1} \omega^{j\ell} \cdot (\omega^{-1})^{\ell k}
341 = \sum_{\ell=0}^{n-1} \omega^{j\ell} \cdot \omega^{-\ell k}
342 = \sum_{\ell=0}^{n-1} \omega^{(j-k)\ell}.\cr
343 }$$
344 To je ov¹em geometrická øada. Pokud je $j=k$, jsou v¹echny èleny øady
345 jednièky, tak¾e se seètou na~$n$. Pro $j\ne k$ pou¾ijeme známý vztah
346 pro souèet geometrické øady s~kvocientem $q=\omega^{j-k}$:
347 $$
348 \sum_{\ell=0}^{n-1} q^\ell
349 = {q^n - 1 \over q-1}
350 = {\omega^{(j-k)n} - 1 \over \omega^{j-k} - 1}
351 = 0.
352 $$
353 Poslední rovnost platí díky tomu, ¾e
354 $\omega^{(j-k)n} = (\omega^n)^{j-k} = 1^{j-k} = 1$, tak¾e
355 èitatel zlomku je nulový; naopak jmenovatel urèitì nulový není, jeliko¾
356 $\omega$ je primitivní a $0<\vert j-k\vert <n$.
357 \qed
358
359 \s{Dùsledek:} $\OO^{-1} = (1/n)\cdot\overline{\OO}$.
360
361 Matice~$\OO$ tedy je regulární a její inverze se kromì vydìlení~$n$
362 li¹í pouze komplexním sdru¾ením. Navíc $\overline{\omega} = \omega^{-1}$
363 je také primitivní $n$-tou odmocninou z~jednièky, tak¾e a¾ na faktor $1/n$
364 se jedná opìt o~Fourierovu transformaci, kterou mù¾eme spoèítat stejným
365 algoritmem FFT. Shròme, co jsme zjistili, do následující vìty:
366
367 \s{Vìta:} Je-li $n$ mocnina dvojky, lze v~èase $\Theta(n\log n)$ spoèítat
368 diskrétní Fourierovu transformaci v~${\bb C}^n$ i její inverzi.
369
370 Tím jsme také doplnili poslední èást algoritmu na násobení polynomù:
371
372 \s{Vìta:} Polynomy velikosti~$n$ nad tìlesem ${\bb C}$ lze násobit v~èase
373 $\Theta(n\log n)$.
374
375 V~obou vìtách pøitom èiníme pøedpoklad, ¾e základní operace s~komplexními
376 èísly umíme provést v~konstantním èase. Pokud tomu tak není, staèí slo¾itost
377 vynásobit slo¾itostí jedné operace.
378
379 \s{Dal¹í pou¾ití FFT:}
380 Dodejme je¹tì, ¾e Fourierova transformace se hodí i k~jiným vìcem ne¾
381 k~násobení polynomù. Své uplatnìní nachází i v~dal¹ích algebraických algoritmech,
382 tøeba v~násobení velkých èísel (lze se dostat a¾ ke~slo¾itosti $\Theta(n)$).
383 Mimo to skýtá i lecjaké fyzikální aplikace -- odpovídá toti¾ spektrálnímu
384 rozkladu signálu na siny a cosiny o~rùzných frekvencích. Na tom jsou zalo¾eny
385 napøíklad algoritmy pro filtrování zvuku, také pro kompresi zvuku a obrazu (MP3, JPEG)
386 nebo rozpoznávání øeèi.
387
388 \h{Paralelní implementace FFT}
389
390 Zkusme si je¹tì prùbìh algoritmu FFT znázornit graficky
391 Na~levé stranì následujícího obrázku se nachází vstupní vektor $x_0,\ldots,x_{n-1}$
392 (v~nìjakém poøadí), na~pravé stranì pak výstupní vektor $y_0,\ldots,y_{n-1}$.
393 Sledujme chod algoritmu pozpátku: Výstup spoèítáme z~výsledkù \uv{polovièních}
394 transformací vektorù $x_0,x_2,\ldots,x_{n-2}$ a $x_1,x_3,\ldots,x_{n-1}$.
395 Èerné krou¾ky pøitom odpovídají výpoètu lineární kombinace $a+\omega^kb$,
396 kde $a,b$ jsou vstupy krou¾ku a $k$~nìjaké pøirozené èíslo závislé na poloze
397 krou¾ku. Ka¾dá z~polovièních transformací se poèítá analogicky z~výsledkù
398 transformace velikosti $n/4$ atd. Celkovì výpoèet probíhá v~$\log_2 n$ vrstvách
399 po~$\Theta(n)$ operacích.
400
401 \figure{img.eps}{Pøíklad prùbìhu algoritmu pro~vstup velikosti 8}{3in}
402
403 Na obrázek se také mù¾eme dívat jako na schéma hradlové sítì pro výpoèet DFT.
404 Krou¾ky jsou pøitom \uv{hradla} pracující s~komplexními èísly. V¹echny operace
405 v~jedné vrstvì jsou na sobì nezávislé, tak¾e je sí» poèítá paralelnì. Sí» proto
406 pracuje v~èase $\Theta(\log n)$ a prostoru $\Theta(n)$, opìt pøípadnì násobeno
407 slo¾itostí jedné operace s~komplexními èísly
408
409 \s{Cvièení:} Doka¾te, ¾e permutace vektoru $x_0,\ldots,x_{n-1}$ na levé stranì
410 hradlové sítì odpovídá bitovému zrcadlení, tedy ¾e na pozici~$b$ shora se vyskytuje
411 prvek $x_d$, kde~$d$ je èíslo~$b$ zapsané ve~dvojkové soustavì pozpátku.
412
413 \h{Nerekurzivní FFT}
414
415 Obvod z~pøedchozího obrázku také mù¾eme vyhodnocovat po~hladinách zleva doprava,
416 èím¾ získáme elegantní nerekurzivní algoritmus pro výpoèet FFT v~èase $\Theta(n\log n)$
417 a prostoru $\Theta(n)$:
418
419 \algo{FFT2}
420 \algin $x_0,\ldots,x_{n-1}$
421 \:Pro $k=0,\ldots,n-1$ polo¾íme $y_k\= x_{r(k)}$, kde $r$ je funkce bitového zrcadlení.
422 \:Pøedpoèítáme tabulku hodnot $\omega^0,\omega^1,\ldots,\omega^{n-1}$.
423 \:$b\= 1$ \cmt{velikost bloku}
424 \:Dokud $b<n$, opakujeme:
425 \::Pro $j=0,\ldots,n-1$ s~krokem~$2b$ opakujeme: \cmt{zaèátek bloku}
426 \:::Pro $k=0,\ldots,b-1$ opakujeme: \cmt{pozice v~bloku}
427 \::::$\alpha\=\omega^{nk/2b}$
428 \::::$(y_{j+k},y_{j+k+b}) \= (y_{j+k}+\alpha\cdot y_{j+k+b}, y_{j+k}-\alpha\cdot y_{j+k+b})$.
429 \::$b\= 2b$
430 \algout $y_0,\ldots,y_{n-1}$
431 \endalgo
432
433 \h{FFT v~koneèných tìlesech}
434
435 Nakonec dodejme, ¾e Fourierovu transformaci lze zavést nejen nad tìlesem
436 komplexních èísel, ale i v~nìkterých koneèných tìlesech, pokud zaruèíme
437 existenci primitivní $n$-té odmocniny z~jednièky. Napøíklad v~tìlese ${\bb
438 Z}_p$ pro prvoèíslo $p=2^k+1$ platí $2^k=-1$, tak¾e $2^{2k}=1$
439 a $2^0,2^1,\ldots,2^{2k-1}$ jsou navzájem rùzná. Èíslo~2 je tedy primitivní
440 $2k$-tá odmocnina z~jedné. To se nám ov¹em nehodí pro algoritmus FFT, nebo»
441 $2k$ bude málokdy mocnina dvojky.
442
443 Zachrání nás ov¹em algebraická vìta, která øíká, ¾e multiplikativní grupa\foot{To je
444 mno¾ina v¹ech nenulových prvkù tìlesa s~operací násobení.}
445 libovolného koneèného tìlesa je cyklická, tedy ¾e v¹echny nenulové prvky tìlesa lze
446 zapsat jako mocniny nìjakého èísla~$g$ (generátoru grupy). Napøíklad pro $p=2^{16}+1=65\,537$
447 je jedním takovým generátorem èíslo~$3$. Jeliko¾ mezi èísly $g^1,g^2,\ldots,g^{p-1}$
448 se musí ka¾dý nenulový prvek tìlesa vyskytnout právì jednou, je~$g$ primitivní
449 $2^k$-tou odmocninou z~jednièky, tak¾e mù¾eme poèítat FFT pro libovolný vektor,
450 jeho¾ velikost je mocnina dvojky men¹í nebo rovná $2^k$.
451
452 Bli¾¹í prùzkum
453 na¹ich úvah o~FFT dokonce odhalí, ¾e není ani potøeba tìleso. Postaèí libovolný
454 komutativní okruh, ve~kterém existuje pøíslu¹ná primitivní odmocnina
455 z~jednièky, její multiplikativní inverze (ta ov¹em existuje v¾dy, proto¾e
456 $\omega^{-1} = \omega^{n-1}$) a multiplikativní inverze èísla~$n$. To nám
457 poskytuje je¹tì daleko více volnosti ne¾ tìlesa, ale není snadné takové okruhy
458 hledat.
459
460 Výhodou tìchto podob Fourierovy transformace je, ¾e na rozdíl od~té klasické komplexní
461 nejsou zatí¾eny zaokrouhlovacími chybami (komplexní odmocniny z~jednièky mají obì slo¾ky
462 iracionální). To se hodí napøíklad ve~zmiòovaných algoritmech na násobení velkých èísel.
463
464 \exercises
465
466 \ex{O~jakých vlastnostech vektoru vypovídá nultý a $(n/2)$-tý koeficient jeho
467 Fourierova obrazu (výsledku Fourierovy transformace)?
468 }
469
470 \ex{Spoèítejte Fourierovy obrazy následujících vektorù z~${\bb C}^n$:
471     \itemize\ibull
472     \:$(x,\ldots,x)$
473     \:$(1,-1,1,-1,\ldots,1,-1)$
474     \:$(\omega^0,\omega^1,\omega^2,\ldots,\omega^{n-1})$
475     \:$(\omega^0,\omega^2,\omega^4,\ldots,\omega^{2n-2})$
476     \endlist
477 }
478
479 \ex{Roz¹íøením výsledkù z~pøedchozího cvièení najdìte pro ka¾dé~$j$ vektor, jeho¾
480 Fourierova transformace má na $j$-tém místì jednièku a v¹ude jinde nuly. Z~toho lze pøímo
481 sestrojit inverzní transformaci.
482 }
483
484 \ex{Uka¾te, ¾e je-li $\bf x$ reálný vektor z~${\bb R}^n$, je jeho Fourierova transformace ${\bf y}={\cal F}({\bf x})$
485 {\I antisymetrická:} ${\bf y}_j = \overline{{\bf y}_{n-j}}$ pro v¹echna~$j$.
486 }
487
488 \ex{Podobnì uka¾te, ¾e Fourierova transformace ka¾dého antisymetrického vektoru je reálná.
489 }
490
491 \exx{Uva¾ujme reálnou funkci~$f$ definovanou na intervalu $[0,2\pi)$. Pokud její
492   hodnoty {\I navzorkujeme} v~$n$ pravidelnì rozmístìných bodech, získáme vektor
493   ${\bf f}\in {\bb R}^n$ o~slo¾kách ${\bf f}_j = f(2\pi j/n)$. Jak vypadá Fourierova
494   transformace tohoto vektoru pro následující funkce?
495     \itemize\ibull
496     \:$\e^{\im kx}$ pro $k\in{\bb N}$
497     \:$\cos kx$
498     \:$\sin kx$
499     \endlist
500 }
501
502 \hint{Sinus a cosinus mù¾ete zapsat jako lineární kombinaci dvou komplexních exponenciál.}
503
504 \exx{Pomocí pøedchozího cvièení doka¾te, ¾e libovolnou reálnou funkci na $[0,2\pi)$
505 existuje lineární kombinace funkcí $\sin kx$ a $\cos kx$, která pøi vzorkování
506 v~$n$ bodech není od zadané funkce rozli¹itelná.
507
508 Pøesnìji øeèeno, pro ka¾dý vektor~${\bf f}\in {\bb R}^n$ existují vektory ${\bf a},{\bf b}\in {\bb R}^n$
509 takové, ¾e platí:
510   $$
511   {\bf f}_j = \sum_{k=0}^{n-1} {\bf a}_k \sin {2jk\pi \over n} + {\bf b}_k \cos {2jk\pi \over n}.
512   $$
513 Koeficienty $a_k$ a $b_k$ lze pøítom snadno získat z~Fourierova obrazu vektoru~${\bf f}$.
514 }
515
516 \endexercises
517
518 \bye