2019年1月7日月曜日

開発環境

はじめての解析学 微分、積分から量子力学まで (ブルーバックス) (原岡 喜重(著)、講談社)を読み終えてから、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 コメント:

コメントを投稿