Pythonで書くフーリエ級数の検算用コード
理工系の学部生にとって厄介なのはフーリエ級数の手計算である。
一通り計算したはいいものの、結果が汚すぎて自信がないということはよくある。
そこでPythonで検算できるコードを書いたので備忘録も兼ねて掲載する。
例えば
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文の関係で表示されないが、ここは各々変更して欲しい。
参考文献
Author And Source
この問題について(Pythonで書くフーリエ級数の検算用コード), 我々は、より多くの情報をここで見つけました https://qiita.com/Suzumushi724/items/0b2b2eb2d72f793dda1d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .