テイラー展開ってなんやねん。
ってことでsympy
で描いてみた話。
legendがやたら長くて収まりが悪いのはご愛嬌。
matplotlib
を sympy.plotting
経由で描かないとならないのでちょっとめんどくさい。
from sympy import sin, exp, plotting
from sympy.abc import x, y
from functools import reduce
import operator
import itertools
import seaborn as sns
sns.set_palette(sns.color_palette("Set1", 16))
sns.set_style('whitegrid')
col = sns.color_palette()
f = sin(x)
# もしくは
#f = exp(x)
x0 = 0
def series(fx, x0=0, n=6):
y = fx.series(x0=x0, n=None) # x0周りのテイラー展開
# n=None だと generator を返すので
return reduce(operator.add, itertools.islice(y, n)) # 第n項まで抜き出す
def explot(fx, x0, i):
if x0 == 0:
title = "%s / Maclaurin series " % (fx)
else:
title = "%s / Taylor series(x=%f)" % (fx, x0)
return plotting.plot(fx, (x, -10, 10), line_color=col[i], ylim=(-10, 10), title=title, show=False, legend=True, axis=True)
# 元の関数
p0 = explot(f, x0, 0)
# テイラー展開
for i in range(1, 8):
p = explot(series(f, x0=x0, n=i), x0, i)
p0.extend(p)
p0.show()