目次 | Experiment |
Simulations非線形力学 |
---|
この章では微分積分について考えていきます.
高校数学で習うなかでも, 一番意味が分からない分野ですね.
ですが,残念ながら三角関数なんかとは違い信号処理も統計も何もかも,およそ我々の関わるような数学には絶対について回る単元です.また,学んでみれば(少なくとも基礎の部分では)そこまで難しくもありません.
ここさえ終われば,ひとまず信号処理に関する基礎数学は終わりです.頑張りましょう.
まず, 微分や積分について学ぶ前に必ず学ぶ必要があるのが,極限についてです.そこから確認していきます.
微分や積分は超極小の範囲について深く考える数学です. この超極小というのがなんなのかから考えます.
超極小...と言ってもだいぶ曖昧な響きです.
人間の身長の話をしている際にmmの差を持ってきたら極小と言えそうですが, 蟻の体長の話をしている時には大きすぎますね.
このように, どんなスケールでの話をしていても十分に小さいといえるようなスケールでの話が微分積分です.
実用では「0に限りなく近づく」などといった表現で表され, 数式だとこうなります.
この意味するところは, 関数のを限りなくに近付けた時に関数が返す値という事になります. つまり が とかであれば
になります. の時には,の時には...と少しずつ小さくなるからです.しかしここでは限りなくに近い値なので実質的にはこの式が返す値もと見做せるので, 等号は成り立ち, 点々は外れます.
ただ,これでもまだ「限りなく0に近い」って曖昧な表現ですよね. さっきも言ったようにmmなのかμmなのか, どこからが限りないと言っていいのかわかりません. なので,正しい定義を確認しておきます.
極限
は
のように定義されます. 有名な論法というやつです.
突然ものすごい呪文が出てきました.意味が分からないと思いますが,それは記号の意味を知らないからです.実際,見た目に反して,この式の意味は割と単純です.
「任意の正の数に対し, ある適当な正の数が存在し, を満たす全ての実数xに対し, が成り立つ.」
との間の距離が任意の正の数εより狭い範囲において, 必ずその範囲に対応するの値が存在しているといった具合です. これが連続値の定義になるわけですね.
文字だと分かりにくいでしょうが,上の画像をしばらく眺めると意味が分かってくるかと思います.
この定義に従うと,「限りなく近い」の意味がどことなく分かる気がします.「限りなくってのはこれくらいですか?」と具体的な数字を出されたとしても,それよりもっと近いです,と言うのが言える状態,のことを極限というわけですね.
ちなみにこの式はついでに関数の連続性についても定義していて, どんなに小さい範囲で見てもそれより小さい値が存在するということは,関数が切れ目なくしっかりとつながっている=連続であるという定義にもなります.
上で確認できたように,極限を取る目的はある一点に限りなく小さい範囲について考える事でした.
ここで, 関数でも同じ事を考えます.
関数とは,ある変数の値によって定まる数,その式(e.g. )の事でした.微分とは言ってしまえば変数の変化を極限まで小さくした時,関数の値はどの程度動くか,という割合を求める操作の事です.
微分の式を見てみましょう.
をdxだけ動かしたときのの変化率,傾きになっているのが分かるでしょうか.思い出してほしいのは中学数学で二点間の傾きを求める式です.一次関数の学習でやった操作で,
というものです.
これを,の変化量を限りなく小さくした()版が微分ということですね.
つまり微分とは,その一点での傾き,(二次元だと)接戦を求める式になっているわけですね.高校の時に微分とは接戦を求める操作であるなんて習いました.ちょっとその説明は良くない気がして,あくまで接戦を求める操作にもなるってだけで本質は「関数の局所的な微小変化率を求める事」です.
また,関数の微分は本やサイトによって様々な記法があります.以下はすべて同じです.
面倒ですね...分野によったりしても好まれるのが違うので,適宜使い分けていく事になります.このシリーズでもいくつかの記法を使っていると思います.
次に,これから特に関係してくる代表的な関数達に対する微分がどういった振る舞いをするのかを確認しておきます.
はじめに三角関数です.これらに対する微分も,高校時代は暗記で片づけていた人が多いのではないでしょうか.しかし上記の性質が分かっていれば, 実は簡単です. 図を見ながら考えてみてください.
syms x
diff(cos(x))
diff(cos(x)*(sin(x)))
diff(exp(x))
簡単ですね. , 関数それぞれがどういった挙動をしているのか, その傾きをすべての点で取ってつなげていったらどうなるかを考えれば, 自ずと分かるはずです.
たとえばは,の時に0,に進んだ時には1という値を取ります.つまりの局所的な変化は,この範囲ないでは増える方向,プラスの値を取ります.増え方はスタートが最も大きく,そこから少しずつ小さくなりますね.といった具合に,変化率を追っていくと,ちょうどと同じ振る舞いになるわけです.
「微分とは, 局所的な微小変化率を求めること」の実感がわいたでしょうか.
三角関数の次は指数関数について学びます.微分といったらみたいな面白い性質をもった関数です.ただ,この関数は定義が一般のものと狭義のものがあるせいで最初少し戸惑うので,確認しておきます.
一般の定義
1でない定数 に関して,変数をへ送る関数を
と言う.
狭義の定義
ネイピア数を底とし,変数をへ送る関数を指数関数,あるいは自然指数関数と言う.とも表記する.
ちなみにはネイピア数,別名オイラー数です. ネイピア数を使った狭義の定義に従っても,一般のを底にした指数関数を表現することは可能なため,大学数学以降だと単に指数関数というと狭義の方をさすことが多い気がします.ここでも,そっちについて話します.
わざわざネイピア数に限って関数を定義するような面白さがどこにあるのかというと, つまり, 微分しても値が変わらないという性質をもつところです.
微分しても値が変わらないって, わけがわからないですよね. ただ聞くだけだと意味が分からないと思います.なので,数学的な証明とかよりも,視覚的な理解を試みてみます.
まず一般に正の1以上の数を底とする指数関数は, 第一象限で二次関数的な上がり方をし, (0,1)を通って, 第二象限ではx軸に漸近しつつ徐々に横ばいな形をとりますね?
こいつを, x軸方向に様々な点で接線ぽいのを引き, 傾きを推測してみてください.
面白い事に, こうやって求めた傾きの値をy成分として新しくグラフを書いた f(x)' も指数関数の形をしています.色々変えて振る舞いを見てみましょう.
指数関数の微分は,この三つの特徴を持っているわけです.そして,傾きの変化を関数とする操作が微分なのだから,良い感じに底になる数を調整してあげれば,元の関数と全く同じ形になる値があっても不思議じゃない気がします.
% シンボリック変数の定義
syms x
% 各関数の定義
exp_func = exp(x);
sisuu1 = 1.5.^x;
sisuu2 = 2.^x;
sisuu3 = 4.^x;
% 図の表示
figure;
subplot(1,4,1)
hold on
fplot(sisuu1, [-2 10], linewidth=2)
fplot(diff(exp_func), '--', [-2 10], linewidth=2)
ylim([0 60])
title('1.5^x', FontName='Arial', FontSize=15)
legend({'f(x)','f(x)\prime'},'Location','northwest', FontSize=10)
hold off
subplot(1,4,2)
hold on
fplot(sisuu2, [-2 10], linewidth=2)
fplot(diff(exp_func), '--', [-2 10], linewidth=2)
ylim([0 1200])
title('2^x', FontName='Arial', FontSize=15)
legend({'f(x)','f(x)\prime'},'Location','northwest', FontSize=10)
hold off
subplot(1,4,3)
hold on
fplot(exp_func, [-2 10], linewidth=2)
fplot(diff(exp_func), '--', [-2 10], linewidth=2)
ylim([0 2500])
title('e^x', FontName='Arial', FontSize=15)
legend({'f(x)','f(x)\prime'},'Location','northwest', FontSize=10)
hold off
subplot(1,4,4)
hold on
fplot(sisuu3, [-2 10], linewidth=2)
fplot(diff(exp_func), '--', [-2 10], linewidth=2)
ylim([0 2500])
title('4^x', FontName='Arial', FontSize=15)
legend({'f(x)','f(x)\prime'},'Location','northwest', FontSize=10)
hold off
そして実際ネイピア数とは, 丁度この形が綺麗に一致する場所に対応する底の値というわけです.図では2と4の間になっていますが,正確には
あたりの数だそうです.
と,ネイピア数の正体がようやく分かりました.これが実際どんなところで使われているのかというと,様々な数学に利用されています.
たとえば
オイラーの公式
ガウス関数
などが代表的なものでしょうか.そもそもこの復習プログラムの目的も,オイラーの公式に出てくる指数関数について理解することにありました.
もう一つのガウス関数は,統計とか信号処理をやるときによくでてきます. こちらも今後の学習で使うので,いずれ確認します.
微分というと,大学以降に常微分だとか偏微分だとかといった言葉を聞いたことがある人もいるかと思います.
ただでさえ微分とかよく分からないとか思っていた人は,その中にも色々あるとか言われても普通に困りますよね.ここでは,そんな微分の仲間たちについて紹介します.学習してみると,実は全然難しくないです.
はじめに,常微分とその他2つの違いについて説明します.その違いは簡単で,変数の数です.先程まで説明に使っていた微分はどれも,変数が1つ,だけについての微分でした.
変数が一つのみの関数の微分を常微分と言います.つまり,今までやっていたのは常微分でした.
常微分については特に触れません.
では,本題である偏微分と全微分は何かというと,変数が2つ以上の関数に対する微分操作です.
微分の定義は局所的な微小変化率を求める事でした.では変数が2つ以上の場合生じる問題が,どの変数についての微小変化率を見るのかという話です.
ということで,全ての変数について微分しましょうとするのが全微分,どれか一つを選んで微分するのが偏微分です.それぞれ見ていきましょう.
偏微分は,いくつかある変数のうち特定の変数を選んで微分する操作です.
常微分では関数がであったのに対して,2変数関数であるを考えます.その分,もも微小変化によって動いた点はとなります.
しかし偏微分はそのうち片方,ここではについてのみ変化量を見たいというものです.よって,のみが足され,つまり移動し,は固定されたままになっています.これを の変化に対するの変化,についての偏微分 と言います.yについては勿論以下の通り
3変数以上でもやり方は変わりません.
計算上は,結局のところ偏微分する変数(を使って表す)以外は定数扱いするだけです.なのでたとえば
という2変数関数に対し,xについて偏微分すると,
となります.について偏微分するとですね.
偏微分が分かれば全微分も簡単です.早速定義していきます.
という2変数関数に対する全微分は
となります.
解釈しましょう.まずへの変化なのだから,関数そのものの変化率を見たいわけですね.関数そのものの変化量になるので,なんかは使わずシンプルにとなります.で,その計算が全ての変数についての偏微分にをかけたものを足し合わせで表せるよって事ですね.何故でしょう?
直観的に,それぞれの変数に対する偏微分を足すというところまでは良いでしょうか.それぞれの方向に対する変化量を足せば両方を移動させた時の変化量になるよね,という話です.
では何故,偏微分の形にをかけるのかですが,これは偏微分が何をするものだったかを考えれば分かります.
偏微分は,関数のその変数方向での変化率,傾きを出すんでしたね.
傾きの直線で移動したところの点,と考えれば分かるでしょうか.この場合は単純に移動するんでしたね.
たとえば傾きがの一次関数
でがから移動した時の移動量は
ですよね.全微分の場合,ずらすのはそれぞれなので,傾き(偏微分)に移動距離をかける事で移動量を出せるというわけです.
こうして得られた,各変数方向での移動量を足し合わせれば,正味の移動量が分かるよね,というのが全微分でした.
ということで,色々な微分のパターンを見てきたので,ここでまとめておきます.微積分はエッセンスとしてはこの程度で収まるもので,この単元の勉強が難しいのは色々な関数に対する微積を解くために必要なテクニックを覚えるところにあります.
今回は背景を理解するのが目標であって問題を解くのが目標ではないため,このくらいにしておきます.
さて, 微分がわかったとこで次は積分のについて考えていきます. 積分はわりと,微分に比べても直観的な理解がしやすいような気がします.
まず, 計算の上でいえる事としては, 微分の逆の操作をするという事です.
こんな具合でしたね.
syms x
int(2*x)
微分とは微小な増分であるとを用いて,瞬時の変化率を求めるものでしたが, 積分の場合はとを用いて面積を求める操作になります.
関数は の時, という値を取り, の時, という値を取ります. この時の増分 は, 軸での距離を表すので横の長さととらえる事ができ, あるいはは縦の長さと考える事ができます.
こうして定義される横と縦を用いて作られる長方形を, といった範囲で同じように作っていき, それぞれの面積をたすと, 関数と軸の間の,における面積っぽいものがだせます.
しかしこのとき, 横の長さは単純にといった,1本のブロックごとに決めれば良いとしても,問題になるのは縦の長さです. ブロックの左端に合わせるのか右端に合わせるのか, あるいはその中点にするのか.これによって求められる面積は微妙に異なっていきます.
そもそも,ブロックの幅が広くなるほど,だいぶ荒い削りだし方をすることになるので実際の面積との誤差も大きくなってしまいます.
この問題を解決するため,軸上でのブロックの幅を限りなく小さく,つまり にしてやります.
横幅が限りなくに近づいた時, ブロックの左端と右端のとる高さは同じ値となるため, 微小ブロックの形も関数にそったものになるはずです.
そして最後に,それらのブロックの面積を全て足し合わせれば, デコボコではなく滑らかな, 関数の凹凸にあった面積を導出する事が可能になります.この操作が積分であり,式では
のように表します.がからの範囲において, それぞれの と 微小なをかけたもの = 面積を足し合わせる,ということですね.
syms x %シンボリック変数
fx = 任意の関数
int(fx, [a b]) % a->bの積分
積分とは微小面積の足し合わせと言いましたが, 足し算は数学記号ではで表されたはずです. 何故を使うのでしょうか?
その答えは,,つまり総和は離散値の計算にしか使えないからです.
% 数列の定義
K = [k1 k2 k3 ... kn]
sum(K) % 総和
この式と, コードでは, kに入る数字は1からnまでの整数になります. 無限小の幅による微小面積を考えるときにこの方法は使えません.無限小の幅で分けたブロックの面積は,当然無限個存在するからです.
そこで,離散値ではなく連続値に対する足し算的操作の記号として,を使っているということです.
足し算として積分を使うことは, ここからの数学では, 頻繁に出てくるので是非感覚として理解してください.
たとえばこいつらは複素フーリエ変換とその逆変換の式ですが, これらもx(t)と指数関数の掛け算のからでの総和とかのように解釈する事ができます.
とは言っても,実際PCに計算させる時には計算を楽にさせるためだったり,そもそも計測されたデータが離散だったりするために積分でなく足し算だったりしますが...
足し算の拡張として積分が扱えるようになったところで, その応用法について考えます.
ベクトルの内積の説明の際には, 関数の内積を定義する際にΣの代わりに∫を使いました. その理由は, 上記の通り積分を使う事で, Σでは表現できなかった非整数も演算に組み込む事が出来るからです.
これが関数の内積の定義です.
日本語では, 同じ点についての関数それぞれの値の積を計算し, それをすべて足し合わせるという意味です. 当然, 直交していれば0の値を取るのは変わりません.
最後はいよいよ, ウェーブレット変換やヒルベルト変換を勉強する上でも必須になる, 畳み込み積分について学びます.
先に定義式を置いておきます.
二つの,同一変数をもつ関数
に対し,両者の畳み込み,あるいは合成積は
と定義される.
式から読み取れる事ですが, まず同じ変数(ここでは時間t)に対する関数である, が定義されています. 関数の式は任意ですが, 同じ変数に対応している事は重要です.
次に, 計算結果として求められるのも,同様にを変数にもつ関数ですね.つまり畳み込みは,二つの関数から一つの関数を得る操作のようです.
そして最後に, 右辺では関数の引数はとなっていて, の引数もとなっていますね. ここが内積と異なる点です.内積ならどちらもでしたね.
また, それぞれの関数の引数を足し合わせる事で常に一定の値を取る事も分かります .
を時間とした場合でこの式を説明すると, は定義域の中のある瞬間の時間を指します. よっては「ある時間におけるの値」ですね.
という事はは, 時刻(つまり現在)から, ある時刻(関数による作用が起きた時)までの時間差を指します. それらの積を で積分するというのがこの式の意味ですね.
例を取ります.
大学院生の皆さんは, いつも悲しく辛い事ばかり経験している事と思います. 本書に載ってるレベルの数学も理解できない辛さ, 実験に誤りがあってデータが取り直しになる悲しみ, 論文のリジェクト...
しかし大抵の場合は,どんな心の痛みも時間が解決してくれます.
さて, 人生という長い時間軸上では,僕らは絶え間なく心に傷を負う「イベント」が起きるはずです. このイベントで受ける心の傷の大きさは場合によりけりなので, 時間依存の変数, つまり時間関数と捉えられます.
この悲しみの関数をとします.
しかし先程も言ったように, 普通は心の傷は時間経過で減少していきます. ということで, その減少の仕方を関数とします. 同じく時間関数です.
勿論, 中には1年くらいしてから心の傷がぶり返すようなトラウマもありますので, 関数の形はなんでもいいです.
ここで, とある瞬間に研究室内の発表で上司に詰められた時に受けた心の傷をとおきます.
今日は時間の時点です. つまりアカハラ会議から日が経過しています. 先程の設定では,傷が癒えるのは時間依存の関数によりますから, 今日感じている, あの日のアカハラによる心のダメージ は
で表せます.
改めて, 畳み込みの式を確認してみます.
アカハラ会議のダメージの式を,からの範囲で, 時間について積分したものがになっていますね.
積分が何をする操作だったのかを考えれば, この式の残酷さが分かるはずです.関数 について, 範囲からまでをで積分というのはつまり...
「がからの範囲の全ての数を取った時のの値を足し算する」事でした.
上記のの例で考えるなら, 畳み込みは「時刻の時に感じている
苦痛(からの間に受けた心の傷の足し算)」です.
その全てによってAさんが今この瞬間に受けているストレスを足し算したものがなわけです. ここでtは現在の時刻です.
によってダメージは小さくなってるので, 実際はのダメージは計り知れず, のダメージはそれほどではないかもしれませんが, とりあえずそういう事です.
には大学院生の辛く惨めで凄惨な日々が詰まっているわけですね.
さて, 皆の心を犠牲にして流れを理解できたところで, 最後に数学的な言葉で畳み込みの確認をします.
この式は, 「全ての瞬間()に入力(関数)されたそれぞれの信号が,処理システム(関数)によって変換されていて, その総和が現在出力されている信号である」と捉えられます. これを各時間について計算したものが関数なので...
畳み込みとは, 「関数が関数によって変化させられた関数を求める処理」というわけですね!!!
脳波の話をするなら, band-pass-filterとかを考えてみて下さい. 生データが, フィルターをかける事で特定周波数帯域のみの信号に変換されますね. 信号処理の話を理解するためには, 畳み込みはかかせない概念です.
余談ですが, 畳み込みは可換なので, 以下は同じことを指す式です.
ここまでで,解析数学を学ぶための基礎数学編は終了です.
と,学習してきましたが,ここまでの内容が理解できればオイラーの公式が理解できるはずで,オイラーが分かればフーリエ変換が分かります.フーリエ変換は脳波解析そのものといっても過言ではない程のものです.長い復習お疲れ様でした.
次は,解析数学とは離れますが統計数学をやるための基礎の確認を挟みます.飛ばしても解析の理解には事足りるので,任意で確認してください.