2015年12月6日日曜日

三角関数のテイラー展開をmatplotlibで見てみる[Python]

久々の投稿。matplotlibの勉強にやってみた。マクローリン展開と言ったほうが良いかもしれないけれど。

1.描いたグラフ

グラフだけ見たいという人向けにこちらをどうぞ。-5 <= x <= 5の範囲でやってみました。

当然といえば当然だけれども,一度は自分で描いてみるとすうがくのちからってすげーってなる。近似する次数が大きくなれば大きくなるほど目的の関数に近づいてくるのは不思議な感覚。

2.プログラムの予備知識

とりあえず数式はこいつら。ちゃんとした奴はWikipediaさんとか見てください。
まぁこれをPythonで書くとこんな感じ。sin関数の近似のところはコメント多めにしといた。そこのコメントを見ればnumpyの関数の意味もある程度わかると思う。
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

pi = np.pi

# サイン
# -5から5までの数字を100個の数字でプロットする
x = np.linspace(-5,5,num=100)
plt.plot(x,np.sin(x),label="sin(x)")
# 1次の項
y = x
plt.plot(x,y,label="n=1")
# 3次の項
y = y - x**3 / 6 
plt.plot(x,y,label="n=3")
# 5次の項
y = y + x**5 / 120
plt.plot(x,y,label="n=5")
# 7次の項
y = y - x**7 / 5040
plt.plot(x,y,label="n=7")
# スケールを指定
plt.xlim(-5,5)
plt.ylim(-5,5)
# タイトルを指定
plt.title("sine approximation formula")
# x=0,y=0の線を書く
plt.axhline(0, color='black')
plt.axvline(0, color='black')
# ラベルを指定
plt.xlabel("x")
plt.ylabel("y")
# 判例を表示
plt.legend()
plt.show()

# コサイン
x = np.linspace(-5,5,num=100)
plt.plot(x,np.cos(x),label="cos(x)")
y = x**0
plt.plot(x,y,label="n=0")
y = y - x**2/2
plt.plot(x,y,label="n=2")
y = y + x**4/24
plt.plot(x,y,label="n=4")
y = y - x**6/720
plt.plot(x,y,label="n=6")
plt.xlim(-5,5)
plt.ylim(-5,5)
plt.title("cosine approximation formula")
plt.axhline(0, color='black')
plt.axvline(0, color='black')
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()

# タンジェント
x = np.linspace(-5,5,num=100)
plt.plot(x,np.tan(x),label="tan(x)")
y = x
plt.plot(x,y,label="n=0")
y = y + x**3 / 3
plt.plot(x,y,label="n=3")
y = y + x**5 * 2.0/15
plt.plot(x,y,label="n=5")
y = y + x**7 * 17.0/315
plt.plot(x,y,label="n=7")
plt.xlim(-5,5)
plt.ylim(-5,5)
plt.title("tangent approximation formula")
plt.axhline(0, color='black')
plt.axvline(0, color='black')
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()
matplotlibありがたし。

3.おまけ

記事のタイトルをマクローリン展開とすべきかテイラー展開とすべきかGoogleトレンドで調べてみた。

7月は期末テストかな。大学生も大変だー。