"機械学習","信号解析","ディープラーニング"の勉強

HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学などをテーマに扱っていきます

フーリエ級数の分かりやすい解説

 

 

信号処理や制御工学、あるいは物理学や微分方程式論でも多用されるフーリエ級数。

フーリエ級数は本来、熱伝導の方程式を解くために、解を三角関数の和で表現することで微分を容易に行えるようにしたところから始まりました。しかし、このフーリエ級数は直交性などを含む面白い性質を持っており、最終的には線形代数でベクトルのみならず関数も扱えるようにした関数解析学への足がかりとなりました。

今回はそんなフーリエ級数の諸公式達の旨味を覗いてみたいと思います。

 

 

 

単純な導入

連立方程式

連立方程式をベクトル表記で考えてみます。

 

{\bf{F}}=a{\bf{f}}+b{\bf{g}}+c{\bf{h}}

 

という連立方程式を見てみましょう。具体例として以下のような連立方程式を考えます。

 

(7,5,1)=a(1,1,1)+b(1,-1,-1)+c(1,1,-1)

 

図示すると以下のような感じになるでしょう。

 

f:id:s0sem0y:20160426171013p:plain

 

\bf{f},\bf{g},\bf{h}を上手く足しあわせて、\bf{F}を作りたいとします。そのときに、それぞれ\bf{f},\bf{g},\bf{h}をいくつ用意すればいいかというのが、a,b,cに該当しますね。これは、中学校からやっているように、普通に連立方程式を解けば分かりますし、きっとそれ以外に方法はないはずです。

 

一般化した連立方程式の問題

普通\bf{F},\bf{f},\bf{g},\bf{h}は与えられておりa,b,cを求めるというのが連立方程式の問題設定です。しかし、今回はこれをもう少し捻ってみて、\bf{F}だけが与えられているとしましょう。

つまりもっと一般的に

 

(7,5,1)=a{\bf{f}}+b{\bf{g}}+c{\bf{h}}

 

を成り立たせるように\bf{f},\bf{g},\bf{h},a,b,cを決めるという問題です。

当然、\bf{f},\bf{g},\bf{h}を先に決めてしまえば、あとは普通の連立方程式の解法を使って解くことができますから、こいつらを勝手に決めてしまいましょう。1つは、前述の例のとおりに

 

 (7,5,1)=a(1,1,1)+b(1,-1,-1)+c(1,1,-1)

 

という問題に変えてしまえば、とりあえず問題は解けます。しかしコレをもう少し考えなおしてみれば、もっと簡単な方法が見つかるはずです。具体的には

 

{\bf{f}}=(1,0,0)

{\bf{g}}=(0,1,0)

{\bf{h}}=(0,0,1)

 

 (7,5,1)=a(1,0,0)+b(0,1,0)+c(0,0,1)

 

としてしまうことです。これはもう答えは明らかですね。

これは3次元ベクトル\bf{F}を表すために、3次元正規直交基底\bf{f},\bf{g},\bf{h}を準備したことになります。そしてその成分がそのまま連立方程式の解になります。つまり基底を上手く取ることで、対象を表現する成分が容易に求まるのです。

 

基底の取り方

問題を解くために、どのような基底を取るかには、ある一定のルールがあります。このルールを無視してしまうと問題は解けなくなってしまいます。はたしてどのようなルールがあるのかを見て行きたいと思います。

例えば

 

{\bf{f}}=(1,1,0)

{\bf{g}}=(2,2,0)

{\bf{h}}=(0,0,1)

 

と設定した場合、2{\bf{f}}={\bf{g}}となっており、一次従属です。これはベクトルが完全に同じ方向を向いており、事実上同じもののように振る舞ってしまいます。いくら係数を調整した所で、解は得られないのです。

 

{\bf{f}}=(1,1,0)

{\bf{g}}=(1,0,1)

{\bf{h}}=(2,1,1)

 

もダメです。{\bf{f}}+{\bf{g}}={\bf{h}}⇔{\bf{f}}+{\bf{g}}-{\bf{h}}=0であり、{\bf{h}}というベクトルは、{\bf{f}}{\bf{g}}で表現できる空間に含まれてしまうのです。

 

一般に

 

{α\bf{f}}+β{\bf{g}}+γ{\bf{h}}=0α=β=γ=0以外で成り立たないようにしなければいけません。このような性質を線形独立と言いますが、任意の3次元ベクトルを表現したければ、3つと線形独立な基底ベクトルを準備する必要があります。

前述の正規直交基底は、線形独立ですから、しっかりと求めたい\bf{F}を表現することができました。

 

直交基底再訪

ともかく線形独立の基底ベクトルを選びさえすれば

 

(7,5,1)=a{\bf{f}}+b{\bf{g}}+c{\bf{h}}

 

は解けるようです。その中でも直交基底

{\bf{f}}=(1,0,0)

{\bf{g}}=(0,1,0)

{\bf{h}}=(0,0,1)

は非常に扱いやすいものであることを見ました。では、直交基底とはこれが唯一なのでしょうか?直交というのは、内積\bf{f}・{g}=0の場合のことを言います。つまり、これらを満たすような\bf{f},\bf{g},\bf{h}であれば、もしかしたら同じような旨味を得られるかもしれません。

 

今回は更に問題を複雑にして、4次元の問題を考えてみましょう。

 

{\bf{F}}=a{\bf{f_1}}+b{\bf{f_2}}+c{\bf{f_3}}+d{\bf{f_4}}

 

という問題を考えます。{\bf{F}}は具体的に決めなくとも何でもいいです。なぜなら一次独立な基底を4つ選びさえすれば、どのような問題でも解けるはずだからです。今回は更に直交基底を選ぶということに関して深堀します。

 

具体的には以下のような直交基底を選んでみます。

 

{\bf{f_1}}=(1,1,1,1)

{\bf{f_2}}=(1,1,-1,-1)

{\bf{f_3}}=(1,-1,-1,1)

{\bf{f_4}}=(1,-1,1,-1)

 

図にすると以下のような感じです。

 

f:id:s0sem0y:20160426175815p:plain

 

さて、直交基底を選ぶ旨味を見て行きましょう。直交であるというのは繰り返しになりますが、内積\bf{f}・{g}=0ということです。ではこの性質を上手く使って、連立方程式を解いてみましょう。

 

{\bf{F}}=a{\bf{f_1}}+b{\bf{f_2}}+c{\bf{f_3}}+d{\bf{f_4}}

 

を解くために、両辺に\bf{f_1}との内積を施してみます。

 

{\bf{f_1・F}}=a{\bf{f_1・f_1}}+b{\bf{f_1・f_2}}+c{\bf{f_1・f_3}}+d{\bf{f_1・f_4}}

 

すると直交の定義から、右辺第一項以外の内積は全て0になり、

 

{\bf{f_1・F}}=a{\bf{f_1・f_1}}

⇔\frac{\bf{f_1・F}}{\bf{f_1・f_1}}=a

 

他の係数もこれと同じように求まりますから、非常に問題が簡単に解けます。直交基底を選んでおけば、連立方程式を解くという作業は、ただ単に内積を取るということで終わってしまうのです。\bf{F}が何だったとしても、基底を決めてしまえば内積の計算は非常に簡単です。これが直交基底を選ぶ旨味です。もしも正規直交基底(大きさが1の直交基底)を選んでおけば、⇔\frac{\bf{f_1・F}}{\bf{f_1・f_1}}=aの分母は1ですから、事実上与えられた\bf{F}と知りたい係数の基底との内積を取るだけで問題が解けてしまいます。

 

フーリエ級数へ

関数を無限次元のベクトルとして扱う

関数なるものを、以下のように非常に細かい値の集まりのように考えてしまえば、上記のような考えが扱えそうです。もちろんこれを数学的に厳密に扱うには大変な苦労を伴いますが、発想の根幹は前述のとおりです。

f:id:s0sem0y:20160426181009p:plain

 つまり、関数に対しても直交なる概念を考え、直交関数で任意の関数を表せないか?と思えてくるわけです。これがまさにフーリエ級数展開です。

ベクトルの内積は各成分ごとの積の和でした。

 

例:(1,2,3)・(3,1,4)=1*3+2*1+3*4

 

ですから、これを無限に細かくしたベクトルに関しても自然に計算できるようにしなければなりません。成分事の計算の積を取ってから、その総和を取る計算は

 

f(x)・g(x)=\sum_k{f(x_k)・g(x_k)}

 

となります。数値のとり方を無限に細かくして、やがて完全に連続とみなせるようになれば

 

f(x)・g(x)={\int}f(x)g(x)dx

 

となります。ということは、任意の関数(無限個の数値の集まり)を表現したい時には、上記の内積が0となるような無限個の成分を持つベクトル(関数)を用意すれば良さそうです。

 

フーリエ級数展開と係数

そして、よく知られているように、三角関数は直交基底を構築します。

sin(x)cos(x)は直交しますし、sin(2x)sin(x)も直交します。

一般にsin(nx)・sin(mx)n=mを除いて0になります。cos(nx)cos(mx)も同様で、sin(nx)cos(mx)はどのようなn,mでも直交します。

よって、任意の関数は

 

a+{\sum_n}{a_n}sin(nx)+{\sum_m}{b_m}cos(mx)

 

で表現できそうだというわけです。(aは上下への平行移動に対応、関数の平均値を表します)

そして一度、任意の関数を上記で展開できるともなれば、a_kを知りたければ両辺sin(kx)との内積を計算すれば良いというわけです。

 

応用では

応用上は、周期関数をフーリエ級数展開することが多いです。周期関数が対象であれば、ある1周期のみを解析すれば全てわかったことになりますね。ですから通常フーリエ級数を扱う際の公式は以下のように与えられているはずです。

 

f:id:s0sem0y:20160426183850p:plain

(Wikipedia参照)

 

係数を求める際に積分範囲が1周期になっています。

係数などの細かい話はさておいて(コレは周期を角周波数で扱おうとしたときに出てきてしまうだけ、だから定義によって係数はマチマチでsqrt{π}などの場合もある。とにかく元の関数と級数展開をするときの表現の兼ね合いで出てきてしまうもの)、ここまで読むと、この公式が何を言っているのかというのは明白になっているかと思います。元の関数と知りたい係数の基底である三角関数との内積をとっているのです。

 

複素フーリエ級数

またフーリエ級数は、元々微分に対する良い性質を持っている三角関数で表現しようというモチベーションで生まれました。ですから、もうひとつexp(・)で展開しようということも考えられます。幸いにもオイラーの公式より

 

exp(inx)=cos(nx)+isin(nx)

 

という関係があり、これを使って、三角関数で展開されたものをexpに直すことも容易で、実際オイラーの公式を使うことで複素フーリエ級数展開は導出されます。

 

スペクトル

スペクトルとはフーリエ級数展開のそれぞれの係数の二乗の値を見たものです。簡単に言えば、対象の関数に、とある三角関数がどれだけ多く含まれているかを視ることができるというわけです。

すると化学実験でスペクトル線を視るというのは、ある特定の周期の三角関数が非常に多く含まれているということであり、大抵それは光を検出していますから、ある物質がその光をよく放出する(あるいは透過する、あるいは吸収する。※実験方法による)ということを言っていることになります。

 

 

フーリエ級数にまつわる話は、あらゆる科学技術の基礎になっているので、是非全体像を抑えておきたいところです。