파이썬으로 작성하는 푸리에 급수 검산 코드

이공계의 학부생에게 있어서 귀찮은 것은 푸리에 급수의 손 계산이다.
대충 계산한 것은 좋지만, 결과가 너무 더럽고 자신이 없다는 것은 자주 있다.
그래서 파이썬으로 검산할 수 있는 코드를 썼기 때문에 비망록도 겸해 게재한다.

예를 들면
f(x)=x \ \ \ \ (-\pi \le x \le \pi)

푸리에 급수를 확장하면
f(x)=-\Sigma_{n=1}^{\infty}\frac{(-1)^n}{n}\sin(nx)

된다. 이것을 검산해 보자.
import numpy as np
import matplotlib.pyplot as plt

#x軸を定義する
x = np.arange(-np.pi,np.pi,0.01)

#シグマの中身の関数
def func(k):
    return -1*(((-1)**k)/k)*np.sin(k*x)

#シグマ演算の関数. 引数で和の範囲を指定.
def sigma(func,frm,to):
    ret = np.zeros_like(x)
    for i in range(frm,to):
        ret += func(i)
    return ret

#フーリエ級数展開の関数
f = sigma(func,1,100)

#結果の表示
fig, ax = plt.subplots(1,1)
ax.set_aspect('equal')
ax.plot(x,f)
plt.show()

#こっちは足されていく過程をみるためのグラフ
#この設定では高々9回まで
"""
fig, axes = plt.subplots(3,3,figsize=(7,7))
for i,ax in enumerate(axes.ravel()):
    ax.set_aspect('equal')
    ax.set_title('n={}'.format(i))
    f = sigma(func,1,i)
    ax.plot(x,f)
plt.show()
"""

결과는 이렇게 된다.

100개의 항을 더한 것이지만, 적당히 재현할 수 있다.

다음에 코드중에서 코멘트 아웃하고 있는 부분을 실행하면 결과는 다음과 같이 된다.

n=0,1에 대해서는 for문의 관계로 표시되지 않지만, 여기는 각각 변경해 주었으면 한다.

참고문헌

좋은 웹페이지 즐겨찾기