開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
- SymPy (パッケージ)
はじめての解析学 微分、積分から量子力学まで (ブルーバックス) (原岡 喜重(著)、講談社)を読み終えてから、4(ニュートン以降、フーリエまで)のフーリエが引き起こした議論の例4.1(滑らかではなく尖った例)、4.2(非連続な例)の関数、フーリエの表示(フーリエ展開)の図4.15、4.17をもう少し先まで見てみたくなったので、コードを書いてみた。
コード
Python 3
#!/usr/bin/env python3
from sympy import pprint, symbols, solve, pi, sin, plot
x = symbols('x')
print('例4.1、図4.15の拡張')
def f(k):
return 4 * (-1) ** k / ((2 * k + 1) ** 2 * pi) * sin((2 * k + 1) * x)
def fourier_series(h, m):
return sum([h(k) for k in range(m + 1)])
n = symbols('n, k', integer=True)
p = plot((x, (x, 0, pi / 2)), (pi - x, (x, pi / 2, pi)),
*[(fourier_series(f, m), (x, 0, pi)) for m in range(0, 10)],
legend=False, show=False)
colors = ['red', 'red', 'orange', 'brown', 'pink', 'purple',
'yellow', 'gray', 'skyblue', 'sienna', 'green', 'blue']
for i, color in enumerate(colors):
p[i].line_color = color
p.save('sample1.png')
print('例4.2、図4.16の拡張')
def g(k):
if k == 0:
return 0
return (-1) ** (k - 1) / k * sin(2 * k * x)
p = plot((x, (x, 0, pi / 2)), (x - pi, (x, pi / 2, pi)),
*[(fourier_series(g, m), (x, 0, pi)) for m in range(0, 20, 2)],
legend=False, show=False)
for i, color in enumerate(colors):
p[i].line_color = color
p.save('sample2.png')
入出力結果(Terminal, cmd(コマンドプロンプト), Jupyter(IPython))
$ ./sample1.py 例4.1、図4.15の拡張 例4.2、図4.16の拡張 $
より近似されてることを確認できた。
0 コメント:
コメントを投稿