のこぎり波のフーリエ級数

$-\pi<x<\pi$で$f(x)=x$と定め、それを$2\pi$周期で拡張した 関数を考えます。そのフーリエ級数は

$$ f(x)\sim \frac{a_0}{2} +\sum_{k=1}^{\infty}a_k\cos(kx) +\sum_{k=1}^{\infty}b_k\sin(kx). $$

Egisonで係数を与える積分を記号的に計算し、級数の最初の数項を 組み立てます。

原始関数の記号計算

係数は次の積分で与えられます。

$$ a_k=\frac1\pi\int_{-\pi}^{\pi}x\cos(kx)\,dx, \qquad b_k=\frac1\pi\int_{-\pi}^{\pi}x\sin(kx)\,dx. $$

部分積分により、$x\cos(kx)$と$x\sin(kx)$の原始関数を明示的に 求められます。ここではその公式を直接定義し、このNotebookが 追加の積分ライブラリに依存しないようにします。

declare symbol x, n : MathValue

def f (x : MathValue) : MathValue := x

def cosinePrimitive (k : MathValue) : MathValue :=
  x * sin (k * x) / k + cos (k * x) / k^2

def sinePrimitive (k : MathValue) : MathValue :=
  (- x) * cos (k * x) / k + sin (k * x) / k^2
sinePrimitive n
$-\cos(n x) n^{-1} x + \sin(n x) n^{-2}$

フーリエ係数

のこぎり波は奇関数なので、余弦係数はすべて0です。正弦係数は $b_k=2(-1)^{k+1}/k$となります。

def cosineCoefficients : [MathValue] :=
  map
    (\k ->
      let primitive := cosinePrimitive k
       in (substitute [(x, π)] primitive - substitute [(x, - π)] primitive) / π)
    nats

def sineCoefficients : [MathValue] :=
  map
    (\k ->
      let primitive := sinePrimitive k
       in (substitute [(x, π)] primitive - substitute [(x, - π)] primitive) / π)
    nats
take 10 cosineCoefficients
$\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\}$
take 10 sineCoefficients
$\{2, -1, \frac{2}{3}, \frac{-1}{2}, \frac{2}{5}, \frac{-1}{3}, \frac{2}{7}, \frac{-1}{4}, \frac{2}{9}, \frac{-1}{5}\}$

フーリエ級数の再構成

各$b_k$に$\sin(kx)$を掛けると、フーリエ級数の各項が順に得られます。

def fourierTerms : [MathValue] :=
  map (\(k, b) -> b * sin (k * x)) (zip nats sineCoefficients)
take 10 fourierTerms
$\{2 \sin(x), -\sin(2 x), \frac{2}{3} \sin(3 x), \frac{-1}{2} \sin(4 x), \frac{2}{5} \sin(5 x), \frac{-1}{3} \sin(6 x), \frac{2}{7} \sin(7 x), \frac{-1}{4} \sin(8 x), \frac{2}{9} \sin(9 x), \frac{-1}{5} \sin(10 x)\}$

したがって、

$$ x=2\sum_{k=1}^{\infty}\frac{(-1)^{k+1}}{k}\sin(kx) \qquad(-\pi<x<\pi). $$

関数の偶奇性と係数の計算を別々のセルにすることで、余弦項が 一つも残らない理由が明確になります。

リンク

Egison 数学ノート目次に戻る