バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、FFT、IFFTの数式バリエーションの話かと思いきや、
数式自体はDFT,IDFTと同一のため話としてはほぼ省略。
しかし、FFTがDFTの高速化版ということで、
演算方式であるバタフライ演算についての話がスタート。
まずは回転因子について説明。
今回も引き続きFFT、IFFTの話。
登場人物
博識フクロウのフクさん
イラスト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
ちょっとMATLAB、Python使ってみる。
バタフライ演算の話に入りたいところだが、
その前にちょっと前回の回転因子の中の計算結果があってるのかを
MATLAB、Pythonで確認してみよう。
そうだね。
そういうのあると助かるよね。
このシリーズも「MATLAB、Pythonで株価予測」ってタイトルなのに、
まだ一回もMATLAB、Pythonのコードが出てきてないもん。
(って中の人がビクついている)
まずは、ところどころに出てくる\(\displaystyle \frac{1}{\sqrt{2}}\)だけど、
これはおよそ0.7071になる。
MATLAB、Pythonの計算結果を見る際はこれを踏まえて見ることとなるはずだ。
あ、そうか。
計算結果として\(\displaystyle \frac{1}{\sqrt{2}}\)という出方はしないもんね。
具体的に数値として出るからその点に注意ってことか。
\(N=8\)の各回転因子算出結果
じゃ、MATLAB版とPython版のコードとその結果だ。
MATLAB版
■ コード
for n=0:7
disp(exp(-i*2*pi*n/8));
end
■ 結果
1
0.7071 - 0.7071i
0.0000 - 1.0000i
-0.7071 - 0.7071i
-1.0000 - 0.0000i
-0.7071 + 0.7071i
-0.0000 + 1.0000i
0.7071 + 0.7071i
Python版
■ コード
import numpy as np
for n in range(0,8):
result = np.exp(-1j*2*np.pi*n/8)
print('%.4f %+.4fj' % (result.real, result.imag) )
■ 結果
1.0000 +0.0000j
0.7071 -0.7071j
0.0000 -1.0000j
-0.7071 -0.7071j
-1.0000 -0.0000j
-0.7071 +0.7071j
-0.0000 +1.0000j
0.7071 +0.7071j
当然と言えば当然なんだろうけど、
前回の回転因子のところと同じ結果が得られたね。
ふと思ったんだけど、
MATLABはiで虚数。
Pythonでjで虚数。
になるんだね。
ここら辺はいろいろな文化圏があるからねー。
でも、実際の計算結果でも回転因子と一致することがわかったから
少し頭の中がスッキリしてきたかな。
それは良かった。
まとめ
まとめだよ。
- タイトル詐欺にならないようにMATLAB、Pythonを使って各回転因子を算出して見た。
- 1/√2のような計算結果にはならないので1/√2=0.7071を想定した見方になる。
- 前回の回転因子と同一の結果が得られた。
- 虚数表現はMATLABはi、Pythonはjとなっている。
バックナンバーはこちら。
コメント