#!/usr/bin/env python # coding: utf-8 # In[1]: get_ipython().run_line_magic('matplotlib', 'inline') import matplotlib.pyplot as plt import numpy as np from sympy import * from functools import reduce from IPython.display import display, Math init_printing() x = Symbol("x") # $x=\frac{\pi}2$ で $1$ になるよう係数 $a$ を調整する。 # # $\sin\left(\frac{\pi}6\right)=\frac 1 2$ と値を比較する。(緑の縦線) # In[2]: def plot(x1, x2): r = range(x1, x2 + 1) t = reduce(lambda t, i: t + (latex(x) if i == 0 else "(" + latex(x - i * pi) + ")"), r, "") y = reduce(lambda y, i: y * (x - i * pi), r, 1) a = 1 / y.subs([(x, pi / 2)]) ay = a * y def f(c, rx): c.plot(rx, np.sin(rx)) c.plot(rx, [ay.evalf(subs={x: i}) for i in rx]) _, cols = plt.subplots(ncols=3, figsize=(15, 4)) f(cols[0], np.linspace(np.pi * (x1 - 1), np.pi * (x2 + 1), 100)) f(cols[1], np.linspace(0, np.pi, 100)) f(cols[2], np.linspace(np.pi / 8, np.pi / 4, 100)) cols[2].plot([np.pi / 6] * 2, [0.6, 0.4]) display(Math("f(x)=%s%s" % (latex(a), t))) v = ay.evalf(subs={x: pi / 6}) a2 = "\\left(\\frac{\\pi}6\\right)" display(Math("f%s=%f,\\quad f%s-\\sin%s=%f" % (a2, v, a2, a2, v - sin(pi / 6)))) # 奇数の次数だと中心がずれる。 # In[3]: plot(-1, 1) # 偶数の次数でどんどん増やして確認する。 # In[4]: plot(0, 1) # In[5]: plot(-1, 2) # In[6]: plot(-2, 3) # 20次でも誤差はまだかなり残る。 # In[7]: plot(-9, 10) # # 参考 # # * 2018.07.24 [元ネタのツイート](https://twitter.com/7shi/status/1021661417810710528) # * 2014.02.14 [matplotlib入門 - りんごがでている](http://bicycle1885.hatenablog.com/entry/2014/02/14/023734) # * 2017.04.07 [[Python]Matplotlibで複数のグラフを描画する方法](https://qiita.com/supersaiakujin/items/543053ca4610437112df) # * 2018.03.09 [Is it possible to show \`print\` output as LaTeX in jupyter notebook?](https://stackoverflow.com/questions/48422762/is-it-possible-to-show-print-output-as-latex-in-jupyter-notebook) # In[ ]: