あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

Pythonで数式を扱いたい(sympyを使う)

Pythonを勉強していると、
数学が必要な場面が多々あるので、
数学を勉強しています。

しかし、数学の勉強をしているときに、
数式をそのまま扱えるといいな、と思うことがあります。

そういう時に便利なモジュールとしてsympyがあります。
これを使うとIPythonNotebookなどで、
Texを使わずに数式を表示したり、
数式操作が可能になります。

導入

pip install sympy

基本的な使い方

symbolsやvarを使用することで、
数式用の変数を定義できます。

from sympy import *

# sympy.symbols
x = symbols('x')

f = x**2 + 2 * x + 1
print f
# x**2 + 2 * x + 1
print type(f)
#sympy.core.add.Add
print type(x)
# sympy.core.symbol.Symbol

# sympy.var
sp,ti = var('speed time')
distance = sp * ti

print distance
# speed * time

# f = 0
Eq(f,0)

# その他
x = symbols('x')
s = sin(x)
c = cos(x)
t = tan(x)
log = ln(x)
e = exp(x)

数式処理

因数分解、展開、代入、微分積分テイラー展開など、基本的な式の操作が可能です。

x = symbols('x')

# 因数分解
f = x**2 + x*2 + 1
f.factor()
# (x+1)**2

# 代入
f.subs([(x,-1)])
# 0

# 解を求める
f.solve(Eq(f,0),x)
# [-1]

# 微分
diff(f,x)
# 2*x + 2

# 傾き
grad = diff(f,x)
grad.subs([(x,0)])
# 2

# 積分
integrate(f,x)#不定積分
integrate(f,(x,0,1))#0~1の定積分

# 式の展開
f = (x+1)*(x-1)
expand(f)
# x**2-1

# テイラー展開
f.series(x)

# 極限
limit(f,x,0)#x=>0
limit(f,x,oo)#x=>無限大

その他機能

sympy.Matrixで行列を扱ったり、
sympy.plotting.plotで数式からグラフを作成することができます。

グラフはAAのような状態ですが、
matplotlibをimportすると、
matplotlibを活用します。

import matplotlib.pyplot as plt
from sympy import *

x = symbols('x')
y = (x+1)**3

plotting.plot(y,(x,-10,10))

f:id:esu-ko:20160314000211p:plain

これで数学の問題を解くと、
いい練習になりそうです。

▼さらに数式を文字列から扱いたい場合はこちら

esu-ko.hatenablog.com