sympy
前回、Pythonのdatetimeモジュールで曜日を扱う方法を解説しました。
今回は数式を扱うライブラリであるsympyを紹介します。
sympyでは数式に値を代入して計算させたり、式の展開・因数分解、解の求める、微分・積分するなんてことができます。
数式を扱う人にとっては結構有用なライブラリかなと思い、いじってみました。
それでは始めていきましょう。
sympyのインストールとインポート
sympyをインストールするには、ターミナルやコマンドプロンプト上でこちらのコマンドを実行します。
pip install sympy
インポートは「import sympy」でもいいですが、略称を使う方が後々楽です。
import sympy as sym
変数の定義
まず数式で用いる変数を定義します。
変数とは例えば「y= 3x + 2」でいう「x」とか「y」のことです。
変数を定義するには「sym.Symbol(“変数”)」で定義します。
import sympy as sym
x = sym.Symbol("x")
print(type(x))
実行結果
<class 'sympy.core.symbol.Symbol'>
また複数の変数を一括で定義する場合は「sym.symbols(“一つ目の変数 二つ目の変数”)」といった形で定義します。
import sympy as sym
a,b = sym.symbols("a b")
print(type(a))
print(type(b))
実行結果
<class 'sympy.core.symbol.Symbol'>
<class 'sympy.core.symbol.Symbol'>
ここで注意すべきことは一つだけ変数を定義する「sym.Symbol」ではSymbolの「Sが大文字」なのに対し、複数の変数を定義する「sym.symbols」ではsymbolsの「sは小文字」であることです。
また「sym.symbols」で複数の変数を定義する場合、全体を文字列とする(”a” “b”ではなく、”a b”)こと、またカンマ区切りではなく、スペース区切りであることを注意してください。
値の代入
次に値の代入の仕方を見ていきましょう。
まず例として「y = x +2」という数式を作成してみました。
import sympy as sym
x = sym.Symbol("x")
y = x + 2
print(y)
実行結果
x + 2
この「x」に値を代入するには、「式.sub(変数, 値)」とします。
import sympy as sym
x = sym.Symbol("x")
y = x + 2
print(y.subs(x, 5))
実行結果
7
複数の変数に対して、値を代入する場合、「式.sub([(変数1, 値1), (変数2, 値2), (変数3, 値3)])」というようにします。
import sympy as sym
x, z = sym.symbols("x z")
y = x * z
print(y.subs([(x, 3), (z, 5)]))
実行結果
15
式の展開・因数分解
式の展開をする場合は、「sym.expand(式)」とします。
import sympy as sym
x = sym.Symbol("x")
y = (x + 3)**2
print(y)
print(sym.expand(y))
実行結果
(x + 3)**2
x**2 + 6*x + 9
逆に因数分解する場合は「sym.factor(式)」とします。
import sympy as sym
x = sym.Symbol("x")
y = x**2 + 6*x + 9
print(sym.factor(y))
実行結果
(x + 3)**2
解の求め方
解を求めるには「sym.solve(式)」とします。
import sympy as sym
x = sym.Symbol("x")
y = (x + 2)*(x - 3)
print(sym.solve(y))
実行結果
[-2, 3]
答えにルートが含まれる場合は「sqrt(数値)」といった形で表現されます。
import sympy as sym
x = sym.Symbol("x")
y = (x + 2)**2 -5
print(sym.solve(y))
実行結果
[-2 + sqrt(5), -sqrt(5) - 2]
連立方程式を解く場合は「sym.solve([式1, 式2])」とします。
import sympy as sym
x, y = sym.symbols("x y")
z1 = x + y + 2
z2 = 3 * x + y
print(sym.solve([z1, z2]))
実行結果
{x: 1, y: -3}
微分・積分
数式を微分するには「sym.diff(式, 微分する変数)」で行います。
import sympy as sym
x = sym.Symbol("x")
y = x**3 + 5 * x**2 + 3 * x + 7
print(sym.diff(y, x))
実行結果
3*x**2 + 10*x + 3
数式を積分するには「sym.integrate(式)」とします。
import sympy as sym
x = sym.Symbol("x")
y = x**2 + 5 * x + 3
print(sym.integrate(y))
実行結果
x**3/3 + 5*x**2/2 + 3*x
sympyが使えるようになると色々な数式をいじれるようになるので、数式をよく使う人は学んでおくといいかなと思います。
次回はJQueryのAjaxでmatplotlibが使えない問題に直面したことをお話しします。
ではでは今回はこんな感じで。
コメント