MATLAB,Python,Scilab,Julia比較 第5章【バックナンバー】

MATLAB,Python,Scilab,Julia比較 第5章【バックナンバー】 数値計算
MATLAB,Python,Scilab,Julia比較 第5章【バックナンバー】

はじめに

MATLAB,Python,Scilab,Julia比較するシリーズの第4章。

第4章では分類問題で最終的にはニューラルネットワークや最適化アルゴリズムの話だった。

第5章はフーリエ解析学から高速フーリエの話がメインとなる。
基本的には以下の流れとなる。

  • フーリエ解析学
    • 実数フーリエ級数
    • 実数フーリエ係数
    • 複素フーリエ級数
    • 複素フーリエ係数
    • フーリエ変換
    • 逆フーリエ変換
  • 離散フーリエ
    • 離散フーリエ変換
    • 逆離散フーリエ変換
    • 高速フーリエ変換
    • 逆高速フーリエ変換

細かいところとしては、オイラーの公式、三角関数の直交性、バラフライ演算などの話も出てくる。

ちなみに、問答方式じゃない方も記事もある。
問答方式に合わせて内容を強化していく予定。

書籍とか

マンガでわかるフーリエ解析

Amazon.co.jp

手を動かしてまなぶ フーリエ解析・ラプラス変換

Amazon.co.jp

物理数学 量子力学のためのフーリエ解析・特殊関数

物理数学 量子力学のためのフーリエ解析・特殊関数 | 柴田 尚和, 是常 隆 | 数学 | Kindleストア | Amazon
Amazonで柴田 尚和, 是常 隆の物理数学 量子力学のためのフーリエ解析・特殊関数。アマゾンならポイント還元本が多数。一度購入いただいた電子書籍は、KindleおよびFire端末、スマートフォンやタブレットなど、様々な端末でもお楽しみい...

単位が取れるフーリエ解析ノート

https://amzn.to/3V83fIl

今日から使えるフーリエ変換 普及版 式の意味を理解し、使いこなす

https://amzn.to/3ysbfvf

その他の章

導入編

  • 業務でフーリエ解析学に絡むところがやってるのでこれを第5章はフーリエ解析学をテーマとする
  • 途中、フーリエと関係ない部分でもプログラム化して確認するなどをして理解しやすい状態で進める予定。

フーリエ級数

  • フーリエ解析学は「フーリエ級数、係数」と「フーリエ変換、逆フーリエ変換」に分けられる。
  • 「フーリエ級数、係数」も実数フーリエと複素フーリエに分けらえる。
  • まずはフーリエ級数に至る道を提示。
  • 無限級数について説明。
    • 無限級数自体は無限に足していくだけの概念。
  • 無限級数の代表格にテイラー級数がある。
  • 波の合成について説明。
  • 単なる関数の足し算になる。
  • フーリエ級数に話を繋げるならば、三角関数の足し算と思えばOK。
  • フーリエ級数について説明。
  • sin関数だけでなく、cos関数も使用する。
  • a0/2はバイアスを想定した係数。
    • 2分の1は係数算出時にキレイになるため。
      • 理由は後日。
  • フーリエ級数までの説明は完了。
  • いつもなら、ここでプログラム化の話になるの段が、フーリエ級数だけでは波の合成以上の話ができない。
  • よって、フーリエ係数の話の後に、フーリエ級数含めてプログラム化予定。

偶関数と奇関数

  • フーリエ係数の話に突入。
  • フーリエ係数へ至る道を説明。
    • 大半が「三角関数の直交性」に必要な知識。
  • 偶関数、奇関数を利用した数学パズルっぽいのもやる予定。
  • 偶関数について説明。
  • 単純にy軸に対して線対称な関数。
    • この特性から-L~Lの範囲の定積分は、0~Lの範囲の定積分の2倍となる。
  • 奇関数について説明。
  • 単純に原点に対して展対称な関数。
    • この特性から-L~Lの範囲の定積分は、必ず0になる。
  • 偶関数と奇関数の積の重要な特性について説明。
    • 結論としては以下になるだけ。
      • 偶関数×偶関数=偶関数
      • 奇関数×偶関数=奇関数
      • 奇関数×奇関数=偶関数

複雑な定積分

  • 偶関数、奇関数を駆使する数学パズルを実施。
  • 細かいことは置いておいて、雰囲気のみでざっくり解説。
  • 奇関数が確定すれば0にできる。
  • 偶関数が確定すれば線対称を利用して積分範囲を半分にした上で2倍にすればOK。
  • 前回の数学パズルを真面目に解いてみる。
  • まずは平方根の関数の正体を探る。
    • 結果としては半円の方程式と言うことになる。
  • これで構成される関数が偶関数か奇関数か特定できたことになる。
  • 偶関数、奇関数の特性を利用しまくって定積分を最適化しまくる。
  • ほとんどが0に消えて、半円の方程式だけが残る。
  • さらに偶関数の特性を利用して四分円にする。
  • 半径2の円を四等分すれば答えが出る。
  • 複雑な関数も無限次元ベクトルと見なすと力業で解くことが可能。
  • 複雑な定積分を無限次元ベクトルとして表現。
  • これをプログラムとして解いていく。

MATLAB

  • 複雑な定積分をMATLABで求めた。
  • 同様に円周率が答えとして算出。
    • 小数点第6位まで一緒。
    • Nを増やせばもっと精度は上がる。

Python

  • 複雑な定積分をPythonで求めた。
  • 同様に円周率が答えとして算出。
    • 小数点第6位まで一緒。
    • Nを増やせばもっと精度は上がる。

Scilab

  • 複雑な定積分をScilabで求めた。
  • 同様に円周率が答えとして算出。
    • 小数点第6位まで一緒。
    • Nを増やせばもっと精度は上がる。

Julia

  • 複雑な定積分をJuliaで求めた。
  • 同様に円周率が答えとして算出。
    • 小数点第6位まで一緒。
    • Nを増やせばもっと精度は上がる。

関数の内積

  • 前回までの数式パズルの力業的解法と関数の内積はほぼ同一の考え方。
  • 関数を無限次元ベクトルを解釈すると、関数の内積は関数の積の定積分として表現される。

三角関数加法定理

  • 三角関数の加法定理を確認。
  • 偶関数、奇関数を利用すると、βにマイナス符号が付いた加法定理の式も導出できる。

三角関数積和公式

  • 三角関数の加法定理の組み合わせで積和公式が導出できる。
  • sin,cosの積和公式とcos,cosの積和公式を導出してみた。
  • sin,sinの積和公式を導出。
  • 積和公式をフーリエ係数に向けて変形。
    • α,βをαx,βxにするだけ。

重要な極限値

  • 重要な極限値について説明。
    • sin(x)/xのxを0に近づける極限値。
  • まずは円に接する三角形と扇形に着目する。
    • これが先ほどの極限値にどうつながるかは次回。
  • 円に接する三角形と扇形の面積の不等式を最適化。
  • いろいろ弄っていくと、はさみうちの原理により1が求められる。
  • はさみうちの原理について説明。
  • sinc関数について説明&MATLABでプロットしてみた。(Pythonコードも)

三角関数の直交性

  • 直交性とは2つのベクトルが垂直に交わることを指す。
  • 直交しているベクトルの内積は必ず0になる。
    • cos関数の影響。
    • 成分表記の内積でも0になることを確認。
  • sinとcosの内積と畳み込み積分を考える。
  • 奇関数、偶関数の特性より、sin、cosの畳み込み積分は0となる。
  • 畳み込み積分が0ということは内積も0になる。
  • 内積が0ということは直交しているということになる。
  • sin関数同士の直交性を確認。
  • sin同士の積和公式の定積分を元に解いていく。
  • 最終的にはsinが0になるので、内積の結果も0となる。
  • 結果としてsin関数同士は直交していることになる。
  • m=nの時のsin関数の内積を求める。
  • 分母が0になるため、極限値を利用する。
  • 結果としてはπになる。
  • つまり、同じ角周波数のsin同士の内積は必ずπになる。
  • cos関数同士の直交性を確認。
  • cos同士の積和公式の定積分を元に解いていく。
  • 最終的にはsinが0になるので、内積の結果も0となる。
  • 結果としてcos関数同士は直交していることになる。
  • m=nの時のcos関数の内積を求める。
  • 分母が0になるため、極限値を利用する。
  • 結果としてはπになる。
  • つまり、同じ角周波数のcos同士の内積は必ずπになる。
  • 三角関数の直交性のまとめ。
    • 各種式を確認。
  • 直交性具合をアニメーションで確認。
  • 三角関数の畳み込みをプログラムでやっている予定。

MATLAB

  • 三角関数の直交性をMATLABで確認してみた。
  • 同一の関数及び角周波数の場合はπになり、それ以外は0になる。

Python

  • 三角関数の直交性をPythonのNumPyで確認してみた。
  • 同一の関数及び角周波数の場合はπになり、それ以外は0になる。

Scilab

  • 三角関数の直交性をScilabで確認してみた。
  • 同一の関数及び角周波数の場合はπになり、それ以外は0になる。

Julia

  • 三角関数の直交性をJuliaで確認してみた。
  • 同一の関数及び角周波数の場合はπになり、それ以外は0になる。

フーリエ係数

  • 前回までに求めた三角関数の直交性を示す公式を再確認。
  • ベクトルの内積によるベクトル成分抽出のイメージを説明。
  • 三角関数の直交性を利用した三角関数成分の抽出について説明。
  • イメージしずらい概念だが、関数の成分を抽出できるという事実に着目すると良い。
  • フーリエ係数を求める雰囲気を感じ取るため、係数a1のみに着目。
  • 三角関数の直交性を利用すると、フーリエ級数の各項のほとんどが0となる。
  • それを使用して係数a1を求める式を導出できる。
  • フーリエ係数anを求める式の一般化。
  • 流れとしては前回のa1を求める式と同じ。
  • フーリエ係数のbnを求める式の一般化。
  • ついでにa0を求める式も一般化。
  • 常に1のような定数関数は畳み込み積分に於いては矩形波をイメージすると認識しやすい。
  • フーリエ係数を求める一般化された式のまとめ。
  • a0が1/2されている理由を説明。
    • 見栄えが悪いとか、平均値として扱いたいからなど理由はある。
  • フーリエ係数を求めるプログラムを作成予定。
  • フーリエ係数で係数を求め、その係数を利用してフーリエ級数で波形を再現する方式。
  • nを大きくすることで、波形がどう変化するかがポイント。

MATLAB

  • フーリエ係数を求めるプログラムをMATLABで実現。
  • おおよそ元の波形を再現できる係数が算出できている。
  • 不連続点では流石に振動している。

Python

  • フーリエ係数を求めるプログラムをPythonで実現。
  • おおよそ元の波形を再現できる係数が算出できている。
  • 不連続点では流石に振動している。

Scilab

  • フーリエ係数を求めるプログラムをScilabで実現。
  • おおよそ元の波形を再現できる係数が算出できている。
  • 不連続点では流石に振動している。

Julia

  • フーリエ係数を求めるプログラムをJuliaで実現。
  • おおよそ元の波形を再現できる係数が算出できている。
  • 不連続点では流石に振動している。

フーリエ級数(周期2L)

  • 前回までのフーリエ級数、フーリエ係数には周期2πという制約がある。
    • 三角関数の直交性を得るための制約。
  • 周期を変えるには、周期の伸縮を考えると解決できるかも?
  • フーリエ級数を伸縮するための検討。
    • xがπと認識するように係数を掛けてあげればOK。
  • フーリエ係数も、πがLになるように式を変更すればOK。
  • 任意周期のフーリエ級数、フーリエ係数のプログラム化検討。
  • 基本的には以前の使い回し。
    • 波形データの解釈や、数式が変わるのみ。の予定。

MATLAB

  • フーリエ級数、フーリエ係数の任意周期版のプログラムをMATLABで作成。
  • -π~πだけでなく、-10~10のような任意の周期に適応可能。

Python

  • フーリエ級数、フーリエ係数の任意周期版のプログラムをPythonで作成。
  • -π~πだけでなく、-10~10のような任意の周期に適応可能。

Scilab

  • フーリエ級数、フーリエ係数の任意周期版のプログラムをScilabで作成。
  • -π~πだけでなく、-10~10のような任意の周期に適応可能。

Julia

  • フーリエ級数、フーリエ係数の任意周期版のプログラムをJuliaで作成。
  • -π~πだけでなく、-10~10のような任意の周期に適応可能。

マクローリン展開

  • いままでやってきたのは実数フーリエ。
    • ということは複素フーリエが・・・。
  • 複素フーリエに至る道を記載。
  • テイラー級数について説明。
  • 数式も書き出し。
  • 過去に何度か扱っているものなので実際の効果については確認しない。
    • 代わりにマクローリン級数の時に実施予定。
  • テイラー級数とマクローリン級数を比較。
    • 任意の点x0が原点になったものがマクローリン級数。
    • よって、テイラー級数の拡張というよりも制限版であり、シンプルになったものと思った方が妥当。
  • マクローリン展開について説明。
  • 指数関数をマクローリン展開してみた。
  • さらにマクローリン展開したものをグラフ化。
    • nが増えれば近似度合いも上がる。
  • cos関数をマクローリン展開。
  • とりあえず微分しまくると4階微分の周期が見える。
  • これを元にマクローリン展開。
  • cos関数をマクローリン展開したプロットも出してみた。
  • sin関数をマクローリン展開。
  • とりあえず微分しまくると4階微分の周期が見える。
  • これを元にマクローリン展開。
  • sin関数をマクローリン展開したプロットも出してみた。
  • sinのマクローリン級数をプログラムで記載してみる予定。
  • プログラムフローを提示。
    • 基本はfor文でぶん回すだけ。

MATLAB

  • sin関数のマクローリン展開の演算とプロットをMATLABで実施。
  • nが増えればsin関数に近似していく。

Python

  • sin関数のマクローリン展開の演算とプロットをPythonで実施。
  • nが増えればsin関数に近似していく。

Scilab

  • sin関数のマクローリン展開の演算とプロットをScilabで実施。
  • nが増えればsin関数に近似していく。

Julia

  • sin関数のマクローリン展開の演算とプロットをJuliaで実施。
  • nが増えればsin関数に近似していく。

オイラーの公式

  • オイラーの公式の話に突入。
  • オイラーの公式の証明に必要な情報はある程度揃ってる。
    • 前回までにやった各種マクローリン展開が必要な情報。
  • 各種マクローリン展開を再掲。
    • 指数関数、cos関数、sin関数。
  • 指数関数のマクローリン展開に複素数を入れてみる。
    • xをixにするだけ。
  • 複素指数関数のマクローリン展開を変形。
    • cos関数とsin関数のマクローリン展開の式が出てくる。
    • 実数部をcos、虚数部をsinとするとオイラーの公式になる。
  • オイラーの公式の変形。
    • 入力に負の符号をつけたもの。
    • 今後いろいろ活躍してくれる公式になる。

複素フーリエ級数

  • 実数フーリエ級数を複素フーリエ級数にするためにオイラーの公式を利用する。
  • 具体的にはcos関数、sin関数を複素指数関数で表現する。
  • 上記を実数フーリエ級数に代入すれば複素フーリエ級数になるというのが大雑把な流れ。
  • オイラーの公式とそれの変形の式を元にcos関数、sin関数を複素指数関数で表現するため、連立方程式を解いた。
  • 連立方程式は行列を使うと一撃。
  • 前回のcos,sinを複素指数関数で表現する式をMATLABの逆行列で検算。
  • なぜか異なるような結果になった。
    • が、実は・・・。
  • 「虚数で割ることと負の虚数を掛けることが同一」である。
  • 上記を証明。
  • これは、複素フーリエ級数を導出するときにも使用するから覚えておいた方が良い。

コメント

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