1 Mathematica で用意されている Fourier 級数関係の関数

Mathematica には、積分を計算する Integrate[] があるので、 Fourier係数の計算に利用できる。

Simplify[Integrate[f[x]Cos[n x],{x,-Pi,Pi}]/Pi,Assumptions->Element[n,Integers]]
Simplify[Integrate[f[x],{x,-Pi,Pi}]/Pi]
Simplify[Integrate[f[x]Sin[n x],{x,-Pi,Pi}]/Pi,Assumptions->Element[n,Integers]]
のようにすれば良い。 Assumptions->Element[n,Integers] という仮定 ($n$ は整数) をして簡単化すること、 $n=0$ の場合は別扱いで計算すること (正直に言うと、 私は Mathematica の仕様が理解できないわけではないけれど納得できない)、 以上2つが小さなノウハウである。

ところで、Mathrematica には Fourier変換専用の関数が色々用意されている。 特にFourier級数を求めるためには

という関数がある。

$c_n$ は、FourierCoefficient[] ですぐに求められる。

関数 $f$ が偶関数あるいは奇関数である場合は、$a_n$, $b_n$ もすぐ求められる。

$f$ が偶関数でも奇関数でもない場合に、 $a_n$$b_n$ をどうやって求めるかが問題となる。

方法1
    $a_n$$f$ の偶関数部分 $\dfrac{f(x)+f(-x)}{2}$ のFourier余弦係数, $b_n$$f$ の奇関数部分 $\dfrac{f(x)-f(-x)}{2}$ のFourier正弦係数であるので、
FourierCosCoefficient[(f[x]+f[-x])/2,x,n]
FourierCosCoefficient[(f[x]+f[-x])/2,x,0]
FourierSinCoefficient[(f[x]-f[-x])/2,x,n]
とすれば求められる (順に $n\in\mathbb{N}$ に対する $a_n$, $a_0$, $b_n$)。
方法2
    公式

$\displaystyle a_n=c_n+c_{-n}$   ( $n\in\mathbb{N}$)$\displaystyle ,\quad
a_0=2c_0$   ($n=0$)$\displaystyle ,\quad
b_n=i(c_n-c_{-n})
$

を用いる ( $\frac{1}{\pi}\cos nx
=\frac{1}{2\pi}\left(e^{-inx}+e^{inx}\right)$, $\frac{1}{\pi}\sin nx=i\cdot\frac{1}{2\pi}\left(e^{-inx}-e^{inx}\right)$)。 例えば
c[n_] := FourierCoefficient[f[x], x, n]
Simplify[c[n] + c[-n], Assumptions -> n > 0]
2c[0]
Simplify[I(c[n]-c[-n]), Assumptions -> n > 0]
とすれば求められる。

Mathematica が、 一般の場合の $a_n$, $b_n$ を計算する関数を用意してくれれば良いのに、 と思うが、なぜこのような仕様になっているのだろう。 偶関数でも奇関数でもない場合には実際上使われないと考えているのだろうか? (私には謎だ。)



桂田 祐史