バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、タイトル詐欺にならないよう回転因子の算出をMATLAB、Pythonを使ってやってみた。
それぞれ虚数表現がやや異なり、
MATLABはi。
Pythonはj。
で表現する文化っぽい。
今回はバタフライ演算の前の回転因子による最適化の話になる。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
回転因子の行列表現

前回は回転因子について説明したが、
その回転因子が行列としてどのように表現されるかを見てみよう。
とりあえずは\(N=4\)の場合の表現としよう。
\(
\begin{bmatrix}
F_0 \\
F_1 \\
F_2 \\
F_3 \\
\end{bmatrix}
=
\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & W_4^1 & W_4^2 & W_4^3 \\
1 & W_4^2 & W_4^4 & W_4^6 \\
1 & W_4^3 & W_4^6 & W_4^9 \\
\end{bmatrix}
\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
f_3 \\
\end{bmatrix}
\)

お!
回転因子での表現だとすごくシンプルになる!

あと、1周じゃなくて、\(W_4^9\)まであるってことは2周くらいするのか。

でも特定の円の中を回ってるだけだから同じ値が何回も出現する形になりそうだね。
回転位置による最適化

そうそう。
その同じ値が何回も出現するという事実が結構重要だったりする。
つまり以下に書き直せる。
\(
\begin{bmatrix}
F_0 \\
F_1 \\
F_2 \\
F_3 \\
\end{bmatrix}
=
\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & W_4^1 & W_4^2 & W_4^3 \\
1 & W_4^2 & 1 & W_4^2 \\
1 & W_4^3 & W_4^2 & W_4^1 \\
\end{bmatrix}
\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
f_3 \\
\end{bmatrix}
\)
実数による最適化

さらに、\(n/N=1/2\)が成立する回転因子も\(-1\)が確定するので、
\(
\begin{bmatrix}
F_0 \\
F_1 \\
F_2 \\
F_3 \\
\end{bmatrix}
=
\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & W_4^1 & -1 & W_4^3 \\
1 & -1 & 1 & -1 \\
1 & W_4^3 & -1 & W_4^1 \\
\end{bmatrix}
\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
f_3 \\
\end{bmatrix}
\)
対角線による最適化

さらに、回転因子の対角線にあるものもまとめることが可能。
今回の場合だと\(W_4^1=-W_4^3\)になるな。
\(
\begin{bmatrix}
F_0 \\
F_1 \\
F_2 \\
F_3 \\
\end{bmatrix}
=
\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & W_4^1 & -1 & -W_4^1 \\
1 & -1 & 1 & -1 \\
1 & -W_4^1 & -1 & W_4^1 \\
\end{bmatrix}
\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
f_3 \\
\end{bmatrix}
\)

ここまでシンプルになるのか・・・。

まぁバタフライ演算をする上ではまた違った最適化をするんだけどね。

じゃーなぜこの説明をしたんだ・・・。

だってこれはこれで便利そうな考え方なんだもん。
あと、一応バタフライ演算が成立する課程の組み合わせで似たような感じで出てくるやら出て来ないやら・・・。

(ハッキリしないなぁ・・・。)
まとめ

まとめだよ。
- 回転因子を元に行列表現してみた。
- 回転位置による最適化が可能。
- 必ず実数になる点が存在することによる最適化が可能。
- 対角線による最適化が可能。
- ここまででもかなり便利ではあるが、さらにバタフライ演算をするための最適化もある。
バックナンバーはこちら。
コメント