数学のブログ

フーリエ級数展開 三角関数、正弦、実数倍角

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

an=22π-ππsinatcosntdt
=1π-ππsin(a+n)t+sin(a-n)t2dt
=0
bn=1π-ππsinatsinntdt
=1π-ππcos(a-n)t-cos(a+n)t2dt
=22π0π(cos(a-n)t-cos(a+n)t)dt
=1π[sin(a-n)ta-n-sin(a+n)ta+n]0π
=1π(sin(a-n)πa-n-sin(a+n)πa+n)
=1π(sinaπcosnπ-cosaπsinnπa-n-sinaπcosnπ-cosaπsinnπa+n)
=1π((-1)nsinaπa-n-(-1)nsinaπa+n)
=1π2n(-1)nsinaπa2-n2
=2πn(-1)nsinaπa2-n2

よって求めるフーリエ展開は、

asinat2πk=1n(-1)nsinaπa2-n2sinnt

コード(Python)

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

print('2-17.')


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


vectorized = np.vectorize(partialsum)
t = np.linspace(-np.pi, np.pi, 10000)
n = 5
for i in range(5):
    a = random.random() * 5
    print(a)
    fig = plt.figure()
    for m in range(1, n + 1):
        ax = fig.add_subplot(n, 1, m)
        ax.plot(t, np.sin(a * t))
        ax.set_ylim(-2, 2)
        ax.plot(t, vectorized(t, m, a))
    plt.savefig(f'sample7_{i}.png')
    plt.show()

入出力結果

% ./sample7.py
2-17.
4.11686011187972
1.264113176239896
4.464191894422588
0.6797740784195017
4.794822074091237
%