数学のブログ

フーリエ級数展開 三角関数、正弦の絶対値

Pythonで学ぶフーリエ解析と信号処理 (神永 正博)(著)、コロナ社)の第2章(フーリエ級数展開)、章末問題2-16の解答を求めてみる。

a n = 2 2 π - π π | sin t | cos n t dt
= 2 π 0 π sin t cos n t dt
= 2 π 0 π sin ( t + n t ) + sin ( t - n t ) 2 dt
= 1 π 0 π ( sin ( n + 1 ) t - sin ( n - 1 ) t ) dt
n 1

の場合、

a n = 1 π [ - cos ( n + 1 ) t n + 1 + cos ( n - 1 ) t n - 1 ] 0 π
= 1 π ( - cos ( n + 1 ) π n + 1 + cos ( n - 1 ) π n - 1 + 1 n + 1 - 1 n - 1 )
= 1 π ( - ( - 1 ) n + 1 n + 1 + ( - 1 ) n - 1 n - 1 + 1 n + 1 - 1 n - 1 )
= 1 π ( - ( - 1 ) n - 1 n + 1 + ( - 1 ) n - 1 n - 1 + 1 n + 1 - 1 n - 1 )
= 1 π - ( - 1 ) n - 1 n + ( - 1 ) n - 1 + ( - 1 ) n - 1 n + ( - 1 ) n - 1 + n - 1 - n - 1 n 2 - 1
= 1 π · 2 ( - 1 ) n - 1 - 2 n 2 - 1
= 2 π ( - 1 ) n - 1 - 1 n 2 - 1

また、

a 1 = 1 π 0 π sin 2 t dt = 1 2 π [ - cos 2 t ] 0 π = 1 2 π ( - 1 + 1 ) = 0
b n = 2 2 π - π π | sin t | sin n t dt = 0

よって、

x ( t ) = | sin t | a 0 2 + n = 1 ( a n cos n t + b n sin n t )
= 1 2 · 4 π + 2 π n = 2 ( - 1 ) n - 1 - 1 n 2 - 1 cos n t
= 2 π + 2 π n = 2 ( - 1 ) n - 1 - 1 n 2 - 1 cos n t

コード(Python)

#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt

print('2-16.')


def partialsum(t, n):
    return 2 / np.pi + \
        2 / np.pi * sum(((-1)**(k-1) - 1) / (k ** 2 - 1) * np.cos(k * t)
                        for k in range(2, n + 1))


vectorized = np.vectorize(partialsum)
t = np.linspace(-np.pi, np.pi, 10000)
n = 10
fig = plt.figure()
for m in range(1, n + 1):
    ax = fig.add_subplot(n, 1, m)
    ax.plot(t, np.abs(np.sin(t)))
    ax.plot(t, vectorized(t, m))

plt.savefig('sample6.png')
plt.show()

入出力結果

% ./sample6.py
2-16.
%