開発環境
- 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 コメント:
コメントを投稿