バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、収支シミュレーション向けた作業として以下を実施。
- 終値から平均値を引いた値と算出したものをcsvにしていたが、終値をそのままcsv化。
- MATLAB、Pythonで終値を取り込んでから平均値を引く方式に変更。
今回は、IFFTから出力された波形の極大値、極小値の求め方について。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
極値の求め方
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
今回は、極大値と極小値の求め方か・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
以前もいったが、それほど難しい話では無い。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
まぁそこを解説してもらおうか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
端的に言うと、微分して0になれば極値だ。
![極値を求める。微分して0ならば極値。](https://www.simulationroom999.com/blog/wp-content/uploads/2022/05/02_極値を求める-1024x665.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
まぁ、なるほどとは思ったけど、
「極値が分かる」ってのは分かったけど、
これが極小値なのか極大値なのかがわからないような・・・。
極大値と極小値の求め方
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
極大値は、「微分値がプラス→0→マイナス」となるところ。
極小値は、「微分値がマイナス→0→プラス」となるところ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
???
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
絵で書くとこんな感じだよ。
![極大値と極小値の求め方。微分値がプラス→0→マイナス、微分値がマイナス→0→プラス](https://www.simulationroom999.com/blog/wp-content/uploads/2022/05/03_極大値と極小値の求め方-1024x665.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
ほう。
確かに言われてみるとそうだね。
微分して0でも極値じゃない場合も
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ちなみに微分して0になったとしても極値ではないパターンもある。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
そんなパターンあるの?
思いつかないけど?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
こんなパターンだな。
![微分して0でも極値じゃない場合。微分して0だが、極大値とも極小値とも違う。](https://www.simulationroom999.com/blog/wp-content/uploads/2022/05/04_微分して0でも極値じゃない場合.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
確かにこれは極値とは言えないね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ちなみにこのグラフの式は以下になるね。
\(y=x^3+x^2\)
↓微分して\(x=0\)時の傾きを算出
\(y\prime=3x^2+2x\)
\(y\prime=3(0)^2+2(0)=0\)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
ちなみに、以下でもいいんだけど、「変曲点の傾き0」の見やすさ重視で上の式を使った。
\(y=x^3\)
↓微分して\(x=0\)時の傾きを算出
\(y\prime=3x^2\)
\(y\prime=3(0)^2=0\)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
こんなシンプルな関数でも発生し得るのか・・・。
微分するには?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
どっちにしても微分をする必要があると思うのだけど、
プログラム的にはどうするの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
引き算するだけだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
引き算だけだと微分にならなくない?
たしか、dtの兼ね合いも考える必要があったような・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
今回欲しいのは厳密な微分値でも近似な微分値でも無くて、
微分した結果がプラスか、マイナスかだけなので、
引き算でOKなんだよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あ、そっか。
確かに接線傾きの正負を知りたいだけだから、それだけでいいのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
さらに、微分じゃなくて差分であるが故に微分値0を捕まえることはほぼ不可能。
よって、
極大値を探す場合は差分の結果マイナス。
極小値を探す場合は差分の結果プラス。
の点を探すことになる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
確かに離散的なデータなわけだから理想的な微分ができるわけじゃないもんね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
というわけで、次回は今回の話を元に具体的なプログラムにするとどうなるか?
ってところだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
(今回は珍しくわかりやすかった)
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 微分して0になれば極値。
- 極大値は、「微分値がプラス→0→マイナス」となるところ。
- 極小値は、「微分値がマイナス→0→プラス」となるところ。
- 「微分して0」でも極値にならないパターンもある。
- 3次関数とかが代表的。
バックナンバーはこちら。
コメント