Fourier級数展開
今回の講義は関数の近似についてです. 一年生のときに習ったTaylor展開は,有限項で打ち切ったとき,(適当な仮定のもと)局所的に関数の近似とみなすことができます.それに対して,今回の講義では「Fourier (フーリエ)級数展開」に基づく近似を考えます.
やりたいことは非常に単純で, 「\((-\pi,\pi)\) で定義された関数 \(f(x)\) を三角関数を使った無限級数」で近似することを考えます(なお,\((-\pi,\pi)\) というのは本質的ではなく,適当に変数変換をすれば別の領域でも同様の議論が可能です). すなわち,ラフに表現するならば \begin{align} f(x) \approx \frac{a_0}{2} + \sum_{k=1}^\infty a_k \cos (kx) + \sum_{k=1}^\infty b_k \sin(kx) \tag{1} \label{eq:fourier} \end{align} のような近似することを考えるわけです. 従って,\( a_k\) (\(k=0,1,\dots\)) と \( b_k\) (\(k=1,2,\dots\)) をどのように定めたらよいかを考える必要があります.
注意
曖昧に「近似」と言っていますが,実際「\(\approx\)」という記号は動機づけのために「近似の気持ち」をあらわす記号に過ぎません.本来は,関数 \(f\) に適切な仮定をおき,どのような意味で「近似」なのかをきちんと考える必要があります(\(\to\) Fourier解析,Lebesgue積分,関数解析といったトピックにつながっていきます.Fourier級数は工学的な応用でも非常に重要ですが,もしみなさんが将来そういった方面に進む事になったときにも,近似の意味などをきちんと考える姿勢は大いに役立ちます).この講義では,「Fourier級数」の基本的な概念を理解することも重要ですが,同時に,視覚的に「近似の意味」を考えるきっかけにしてほしいと思っています.では,どのように \( a_k\) (\(k=0,1,\dots\)) と \( b_k\) (\(k=1,2,\dots\)) を定めればよいでしょうか(もちろんこれらは \(f\) に応じて定めるべきものです).
指針:式 \eqref{eq:fourier} の右辺の部分和を \( S_N(x)\),すなわち \[ S_N(x) = \frac{a_0}{2} + \sum_{k=1}^N a_k \cos (kx) + \sum_{k=1}^N b_k \sin(kx) \] とし, \[ \lim_{N\to\infty} \int_{-\pi}^{\pi} (f(x) - S_N(x))^2 \,\mathrm dx = 0 \] となるように定める.
さきに答えを書いてしまうと(関数 \(f\) に対する適切な仮定の下), \begin{alignat}{2} a_k &= \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \cos(kx)\,\mathrm dx &\quad (k=0,1,\dots), \label{eq:ak}\cr b_k &= \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \sin(kx)\,\mathrm dx &\quad (k=1,2,\dots) \tag{2}\label{eq:bk} \end{alignat} とすればよいことが分かります.これにより,例えば次のような考察が得られます.
- \(f(x)\) が奇関数ならば,\(a_k = 0\) であり,\(\sin\) 関数だけで展開できる.
- \(f(x)\) が偶関数ならば,\(b_k = 0\) であり,\(\cos\) 関数だけで展開できる.
要するに,奇 (偶) 関数は奇 (偶) 関数のみを使って展開できるという主張であり,直感にも合うでしょう. 上記の\(a_k\) および \(b_k\) の証明をしようとすると,「積分とは何か」をきちんと考えないといけないことに気がつきます(実際に,歴史的にも関数解析が発展した一つのきっかけになっています). この講義では,細かいところには立ち入りませんが,以下はイメージを掴むためのラフな説明です(\(b_k\) についてのみ説明しますが,\(a_k\) についても同様に理解できます).
まず,式 \eqref{eq:fourier} の 「\(\approx\)」を「\(=\)」だと思って,両辺に \(\sin (mx)\) を掛けて(\(m\) は自然数),積分してみましょう. すると, \begin{align} &\int_{-\pi}^{\pi} f(x) \sin(mx) \,\mathrm dx \cr &\quad = \frac{a_0}{2} \int_{-\pi}^{\pi} \sin(mx) \,\mathrm dx + \sum_{k=1}^\infty a_k \int_{-\pi}^{\pi} \cos(kx) \sin(mx) \,\mathrm dx + \sum_{k=1,k\neq m}^\infty b_k \int_{-\pi}^{\pi} \sin(kx) \sin(mx) \,\mathrm dx \cr & \quad \phantom{=} \quad + b_m \int_{-\pi}^{\pi} \sin^2 (mx) \,\mathrm dx \cr &\quad = b_m \int_{-\pi}^{\pi} \sin^2 (mx) \,\mathrm dx = \pi b_m \end{align} となり,\eqref{eq:bk} が妥当そうであることが理解できると思います. なお,右辺第1〜3項が0になる理由は以下の通りです:
- 第1項:普通に積分すれば0になる.
- 第2項:偶関数 \(\times\) 奇関数 \( =\) 奇関数 の積分だから自明に0である.
- 第3項:\(\sin\) 関数の直交性(自分以外との積の積分は0)より0である(高校数学の積和の公式を使えば直ちに確認できます).
Fourier級数展開は関数系 \(\{1, \cos(x),\sin(x),\cos(2x),\sin(2x),\dots \}\) による展開になっていますが,これらは直交基底となっていることが分かります. 互いに直交する(自分以外との内積が0)関数で展開していることはFourier級数の大きな特徴の一つです.
では,プログラムを見て課題を行っていきましょう.
課題
以下のうち幾つかに取り組んでみましょう.- 誤差 \(\displaystyle \mathrm{err}(N) = \int_{-\pi}^{\pi} (f(x) - S_N(x))^2\,\mathrm dx \) は \(N\) を大きくすると 0 に収束することが期待されます. そこで,横軸を \(N\) として \(\mathrm{err}(N)\) をプロットしてみましょう. 手計算により \(\mathrm{err}(N)\) を \(a_k\) と \(b_k\) を用いて表しておくと便利です(もちろんこの計算は \(f(x)\) に依存します).
- \(N\) を大きくしたとき,\(\displaystyle \sup_{x\in(-\pi,\pi)} | f(x) - S_N(x) | \) は 0 に収束するか(すなわち一様収束するか)考えてみましょう.
- \(f(x)\) として他の関数も試してみましょう.\(x^2\) や \(x^3\), \(x+ x^2\) のような多項式でもよいですし,不連続な関数(区分的に連続な関数:例えば\( (-\pi,0)\) で \(f(x) = -1\), \( (0,\pi)\) で \(f(x)=1\)(不連続点(この場合 \(x=0\))では \(f(x)\) をどのように設定しても \(a_k\)や \(b_k\) の値には影響しません)で試してみるのもよいでしょう.ただし,(区分的に)多項式でない関数を考える場合は,\(a_k\) や \( b_k\) を求める積分の計算で,数値積分を使わざるをえなくなることもあります
サンプルファイルはこちら