【sympy】数式(関数)を扱うライブラリsympy:数値の代入や式の展開・因数分解、解の求め方、微分・積分[Python]

  • URLをコピーしました!
目次

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が使えない問題に直面したことをお話しします。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次