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} とすればよいことが分かります.これにより,例えば次のような考察が得られます.

要するに,奇 (偶) 関数は奇 (偶) 関数のみを使って展開できるという主張であり,直感にも合うでしょう. 上記の\(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になる理由は以下の通りです:

Fourier級数展開は関数系 \(\{1, \cos(x),\sin(x),\cos(2x),\sin(2x),\dots \}\) による展開になっていますが,これらは直交基底となっていることが分かります. 互いに直交する(自分以外との内積が0)関数で展開していることはFourier級数の大きな特徴の一つです.

では,プログラムを見て課題を行っていきましょう.

課題

以下のうち幾つかに取り組んでみましょう.
  1. 誤差 \(\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)\) に依存します).
  2. \(N\) を大きくしたとき,\(\displaystyle \sup_{x\in(-\pi,\pi)} | f(x) - S_N(x) | \) は 0 に収束するか(すなわち一様収束するか)考えてみましょう.
  3. \(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\) を求める積分の計算で,数値積分を使わざるをえなくなることもあります
サンプルファイルをベースに以上の課題を行い,CLEで提出してください. CLEで提出する際は,「テキスト情報の入力」欄に考察を書き,「ファイルの添付」から「ipynb ファイル」(名前は,Fourier_miyatake.ipynb のように自分の名前を入れてください)を添付してください. また,描いた図のファイルも必要に応じて()添付してください(図のファイルのファイル名にはみなさんの名前を含めなくても構いませんが,図のファイルを参照して考察を書くときは,「図より...」などではなく「fig1.pdfより〜」のようにしてください.).

サンプルファイルはこちら