【連続系】MATLAB、Pythonで株価予測 その68【フーリエ変換⑤】

【連続系】MATLAB、Pythonで株価予測 その68【フーリエ変換⑤】 株価予測
【連続系】MATLAB、Pythonで株価予測 その68【フーリエ変換⑤】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/

はじめに

前回は、フーリエ変換をプラグラム化するにあたって、
数式のどの部分がベクトルとするのかを明確にした。
ベクトル要素数はNで表現することでなんとか辻褄を合わせる予定。

今回は、それらの情報を元にプログラム化する数式を起こす。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

フーリエ変換のプログラム化は可能?

太郎くん
太郎くん

で、フーリエ変換のプログラム化はできた?

フクさん
フクさん

まだできん!
予想以上に頭がこんがらがって今なんとか整理が付いたところだ。

太郎くん
太郎くん

ということは、できそうな目途が立ったって感じか。

フクさん
フクさん

まぁそうかな。
とりあえず簡単に説明しよう。

プログラム化に向けての数式変換

フクさん
フクさん

まずは元のフーリエ変換と逆フーリエ変換を再掲

■ フーリエ変換
\(\displaystyle \color{red}{F(\omega)}=\int^{\pi}_{-\pi} \color{red}{f(t)}e^{-i\color{red}{\omega} t}dt\)

■ 逆フーリエ変換
\(\displaystyle \color{red}{f(x)}=\frac{1}{2\pi}\int^{\infty}_{-\infty}\color{red}{F(\omega)}e^{i\omega \color{red}{x}}d\omega\)

フクさん
フクさん

そしてプログラム向けに解釈を変えた版

\(N\)は各ベクトルの要素数。(任意で設定可)

\(\displaystyle \Delta t=\frac{2\pi}{N}\)

\(\displaystyle \Delta \omega=\frac{\omega_{max}}{\frac{N}{2}} \)

\(\omega_{max}\)は最大周波数(任意で設定可)
\(x=t\)とする。

\(
\displaystyle
\left[\begin{array}{c}
F\left(x_{-N/2}\right) \\
\vdots \\
F\left(x_{N/2}\right)
\end{array}\right]^{T}=\left[\begin{array}{c}
f\left(x_{-N/2}\right) \\
\vdots \\
f\left(x_{N/2}\right)
\end{array}\right]^{T}\left[\begin{array}{ccc}
e^{-i \omega_{-N/2} t_{-N / 2} \pi} & \cdots & e^{-i \omega_{-N / 2} t_{N / 2} \pi} \\
\vdots & \ddots & \vdots \\
e^{-i \omega_{N / 2} t_{-N / 2} \pi} & \cdots & e^{-i \omega_{N / 2} t_{N / 2} \pi}
\end{array}\right] \Delta t
\)

\(
\displaystyle
\left[\begin{array}{c}
f\left(x_{-N/2}\right) \\
\vdots \\
f\left(x_{N/2}\right)
\end{array}\right]^{T}=\frac{1}{2 \pi}\left(\left[\begin{array}{c}
F\left(\omega_{-N/2}\right) \\
\vdots \\
F\left(\omega_{N/2}\right)
\end{array}\right]^{T}\left[\begin{array}{ccc}
e^{i \omega_{-N/2} t_{-N / 2} \pi} & \cdots & e^{i \omega_{-N / 2} t_{N / 2} \pi} \\
\vdots & \ddots & \vdots \\
e^{i \omega_{N / 2} t_{-N / 2} \pi} & \cdots & e^{i \omega_{N / 2} t_{N / 2} \pi}
\end{array}\right]\right) \Delta \omega
\)

数式を見て・・・。

太郎くん
太郎くん

ぎゃーーーーーー!!!
なんじゃこりゃーーーー!!!

フクさん
フクさん

プログラム化するにあたって、以下が必要なんだよね。

  • 積分をΣで解決する。(リーマン積分)
  • 関数をベクトルと解釈する。
  • 畳み込み積分は内積で解決。
フクさん
フクさん

これらの結果が上の数式やつ。

太郎くん
太郎くん

これがプログラムになるのか?!

フクさん
フクさん

まぁ関数はベクトルと解釈するし、
それぞれの要素数も\(N\)で切りそろえてるから、十分可能だとは思うよ。

太郎くん
太郎くん

じゃー、頑張って!

フクさん
フクさん

(うーん。まぁいいんだけど・・・。)

まとめ

フクさん
フクさん

まとめだよ。

  • フーリエ変換のプログラム化の前に数式レベルでいろいろ解決。
    • 積分をΣで解決する。(リーマン積分)
    • 関数をベクトルと解釈する。
    • 畳み込み積分は内積で解決。
  • ベクトルのそれぞれの要素数をNで切りそろえているのでそれほど複雑にはならないはず。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました