【入門】MATLAB,Python,Scilab,Julia使い方比較【数値計算プログラム】

【入門】MATLAB,Python,Scilab,Julia使い方比較【数値計算】 MATLAB/Simulink
【入門】MATLAB,Python,Scilab,Julia使い方比較【数値計算】

フーリエ解析学(導入編)

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

フーリエ級数

  • フーリエ解析学は「フーリエ級数、係数」と「フーリエ変換、逆フーリエ変換」に分けられる。
  • 「フーリエ級数、係数」も実数フーリエと複素フーリエに分けらえる。
  • 無限級数について説明。
  • 波の合成について説明。
    • 単なる関数の足し算になる。
  • フーリエ級数について説明。
  • sin関数だけでなく、cos関数も使用する。
  • a0/2はバイアスを想定した係数。
  • プログラム化は、フーリエ係数の話の後に、フーリエ級数含めてプログラム化予定。

偶関数と奇関数

  • フーリエ係数の話に突入。
  • フーリエ係数へ至る道を説明。
  • 偶関数について説明。
  • 単純にy軸に対して線対称な関数。
  • 奇関数について説明。
  • 単純に原点に対して展対称な関数。
  • 偶関数と奇関数の積の重要な特性について説明。
    • 結論としては以下になるだけ。
      • 偶関数×偶関数=偶関数
      • 奇関数×偶関数=奇関数
      • 奇関数×奇関数=偶関数

複雑な定積分

  • 偶関数、奇関数を駆使する数学パズルを実施。
  • 細かいことは置いておいて、雰囲気のみでざっくり解説。
  • 奇関数が確定すれば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にするだけ。

重要な極限値

  • 重要な極限値について説明。
  • まずは円に接する三角形と扇形に着目する。
  • はさみうちの原理により1が求められる。
  • sinc関数について説明&MATLABでプロットしてみた。(Pythonコードも)

三角関数の直交性

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

MATLAB

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

Python

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

Scilab

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

Julia

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

フーリエ係数

  • 前回までに求めた三角関数の直交性を示す公式を再確認。
  • ベクトルの内積によるベクトル成分抽出のイメージを説明。
  • 三角関数の直交性を利用した三角関数成分の抽出について説明。
  • イメージしずらい概念だが、関数の成分を抽出できるという事実に着目すると良い。
  • フーリエ係数anを求める式の一般化。
  • 流れとしては前回のa1を求める式と同じ。
  • フーリエ係数を求める雰囲気を感じ取るため、係数a1のみに着目。
  • 三角関数の直交性を利用すると、フーリエ級数の各項のほとんどが0となる。
  • それを使用して係数a1を求める式を導出できる。
  • フーリエ係数を求める一般化された式のまとめ。
  • a0が1/2されている理由を説明。
  • フーリエ係数のbnを求める式の一般化。
  • ついでにa0を求める式も一般化。
  • 常に1のような定数関数は畳み込み積分に於いては矩形波をイメージすると認識しやすい。
  • フーリエ係数を求めるプログラムを作成予定。
  • フーリエ係数で係数を求め、その係数を利用してフーリエ級数で波形を再現する方式。
  • 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のような任意の周期に適応可能。

マクローリン展開

  • いままでやってきたのは実数フーリエ。
  • 複素フーリエに至る道を記載。
  • テイラー級数について説明。
  • テイラー級数とマクローリン級数を比較。
  • マクローリン展開について説明。
  • 指数関数をマクローリン展開してみた。
  • さらにマクローリン展開したものをグラフ化。
    • nが増えれば近似度合いも上がる。
  • cos関数をマクローリン展開。
    • cos関数をマクローリン展開したプロットも出してみた。
  • sin関数をマクローリン展開。
    • 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関数を複素指数関数で表現する。
  • オイラーの公式とそれの変形の式を元にcos関数、sin関数を複素指数関数で表現するため、連立方程式を解いた。
  • 前回のcos,sinを複素指数関数で表現する式をMATLABの逆行列で検算。
    • なぜか異なるような結果になった。
  • 「虚数で割ることと負の虚数を掛けることが同一」である。
  • これは、複素フーリエ級数を導出するときにも使用するから覚えておいた方が良い。
  • 実数フーリエ級数にsin,cosを福祉指数関数で表現する公式を代入。
  • ここでも「虚数で割ることが負の虚数を掛けることが同一」って理屈を使う。
  • 変数の極性を入れ替えた上で、Σの極性を入れかえれば同じものとなる。
  • フーリエ係数であることを前提とした場合、極性の特性を定められる。
  • 複素フーリエ級数を導出した。
    • 最終的にはシンブルな式に。
  • 実際に利用しようと思うと、複素フーリエ係数とセットなので、しばらく待ち。

複素フーリエ係数

  • 複素フーリエ係数の話に突入。
  • 複素フーリエ係数に至る道を提示。
  • 複素指数関数の積を確認。
  • 複素指数関数同士の積の積分の式を提示。
  • 複素指数関数でn=mの時は直交しない。
  • 結論としてはn≠mの時に直交する。
  • これらはオイラーの公式と三角関数の性格から特定ができる。
  • 複素指数関数の直交性を評価できる式を確認。
  • 直交性をアニメーションgifで見てみた。
  • この直交性を各ツール、各言語で確認してみる。

MATLAB

  • 複素指数関数の直交性をMATLABで確認した。
  • おおよそ狙い通りの挙動ではあるが、三角関数由来の誤差は入る。

Python

  • 複素指数関数の直交性をPythonで確認した。
  • おおよそ狙い通りの挙動ではあるが、三角関数由来の誤差は入る。

Scilab

  • 複素指数関数の直交性をScilabで確認した。
  • おおよそ狙い通りの挙動ではあるが、三角関数由来の誤差は入る。
  • 虚数単位が%iになることに注意。

Julia

  • 複素指数関数の直交性をJuliaで確認した。
  • おおよそ狙い通りの挙動ではあるが、三角関数由来の誤差は入る。
  • 虚数単位がimになることに注意。

複素フーリエ係数

  • 複素フーリエ級数の数式を導出。
    • 「複素フーリエ係数」を解析したい数式と見なし、「複素指数関数の直交性」を利用して、直交している部分を0に、直交していない部分だけを抽出する。
  • フーリエ係数のC0について言及。
  • 結果としてC0は関数f(x)の平均値を示す。
  • 離散関数の平均と連続関数の平均の関係性。
  • 結局C0は三角関数では表現できない関数のオフセット成分となる。

MATLAB

  • 任意波形から複素フーリエ係数抽出し、それを元に元波形を複素フーリエ級数で再現をMATLABで実施。
  • 実数フーリエと同じ結果が得られた。
    • 係数は複素数であり、偏角から位相を求めることも可能。

Python

  • 任意波形から複素フーリエ係数抽出し、それを元に元波形を複素フーリエ級数で再現をPythonで実施。
  • 実数フーリエと同じ結果が得られた。
    • 係数は複素数であり、偏角から位相を求めることも可能。

Scilab

  • 任意波形から複素フーリエ係数抽出し、それを元に元波形を複素フーリエ級数で再現をScilabで実施。
  • 実数フーリエと同じ結果が得られた。
    • 係数は複素数であり、偏角から位相を求めることも可能。

Julia

  • 任意波形から複素フーリエ係数抽出し、それを元に元波形を複素フーリエ級数で再現をJuliaで実施。
  • 実数フーリエと同じ結果が得られた。
    • 係数は複素数であり、偏角から位相を求めることも可能。

まとめ

MATLAB,Python,Scilab,Juliaどれもとても優秀な電卓であり、シミュレータであり、データビューアとなる。

Pythonをガッツリ学習したい場合はオンライン学習サービスなどもあります。

オンラインPython学習サービス「PyQ(パイキュー)」公式ページ

ポイント

  • 環境構築不要
    • ブラウザだけで学習を始められる。
  • 申し込みから4ステップで登録を完了
    • 申し込み完了待ちとかない。すぐ始められる。
  • 1,000問以上の実践的な課題がある。

Pythonで動かして学ぶ!あたらしい線形代数の教科書

Amazon.co.jp: Pythonで動かして学ぶ!あたらしい線形代数の教科書 eBook : かくあき: Kindleストア
Amazon.co.jp: Pythonで動かして学ぶ!あたらしい線形代数の教科書 eBook : かくあき: Kindleストア

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 | 斎藤 康毅 |本 | 通販 | Amazon
Amazonで斎藤 康毅のゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装。アマゾンならポイント還元本が多数。斎藤 康毅作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロから作るDeep Lea...

ゼロからはじめるPID制御

ゼロからはじめるPID制御 | 熊谷 英樹 |本 | 通販 | Amazon
Amazonで熊谷 英樹のゼロからはじめるPID制御。アマゾンならポイント還元本が多数。熊谷 英樹作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロからはじめるPID制御もアマゾン配送商品なら通常配送無料。

OpenCVによる画像処理入門

OpenCVによる画像処理入門 改訂第3版 (KS情報科学専門書) | 小枝 正直, 上田 悦子, 中村 恭之 |本 | 通販 | Amazon
Amazonで小枝 正直, 上田 悦子, 中村 恭之のOpenCVによる画像処理入門 改訂第3版 (KS情報科学専門書)。アマゾンならポイント還元本が多数。小枝 正直, 上田 悦子, 中村 恭之作品ほか、お急ぎ便対象商品は当日お届けも可能。...

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門] | 金城俊哉 | 数学 | Kindleストア | Amazon
Amazonで金城俊哉の恋する統計学 恋する統計学。アマゾンならポイント還元本が多数。一度購入いただいた電子書籍は、KindleおよびFire端末、スマートフォンやタブレットなど、様々な端末でもお楽しみいただけます。

Pythonによる制御工学入門

Amazon.co.jp

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

Amazon.co.jp


https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

コメント

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