Python 微分積分いい気分(^^♪「Sympy」

'21/06/13更新:インタラクティブ環境(例, JupyterLab)で使いやすいように記事の構成を刷新しました。
 本記事では、Sympyで簡単に微分,不定積分,定積分の式や解を出力する雛形コードを記載しました。
ライブラリのインストールは次の通りです。

# pipの場合
pip install sympy

# anaconda環境の場合
conda install -c anaconda sympy

使用時のインポート例は下記です。

import sympy as sp

例1. f(x)関数の微分積分

# 変数名の定義
sp.var('a b c C x')
# 関数
f = a * pow(x, 2) + b*x + c
f

f:id:HK29:20210613155949p:plain

# 微分
sp.diff(f, x)

f:id:HK29:20210613160039p:plain

# 微分後にxに3を代入
sp.diff(f, x).subs(x, 3)

f:id:HK29:20210613160131p:plain

# 不定積分
sp.integrate(f,x) + C

f:id:HK29:20210613160207p:plain

# 定積分。xが1~2の区間
sp.integrate(f, (x, 1, 2)) + C

f:id:HK29:20210613160241p:plain

■例2. 例1の係数に値を代入して微分積分

a = -2
b = 3
c = 5
C = 10

f = a * pow(x, 2) + b*x + c
f

f:id:HK29:20210613160448p:plain

# 微分
sp.diff(f, x)

f:id:HK29:20210613160525p:plain

# 微分後にxに3を代入
sp.diff(f, x).subs(x, 3)

f:id:HK29:20210613160618p:plain

# 不定積分
sp.integrate(f,x) + C

f:id:HK29:20210613160655p:plain

# 定積分。xが1~2の区間
sp.integrate(f, (x, 1, 2)) + C

f:id:HK29:20210613160734p:plain

# 定積分。xが1~2の区間。数値で出力
float(sp.integrate(f, (x, 1, 2)) + C)

f:id:HK29:20210613161047p:plain

■例3. sin関数の微分積分

# 変数名の定義
sp.var('theta')
# 関数の定義
g = sp.sin(theta)
g

f:id:HK29:20210613161225p:plain

# 微分
sp.diff(g, theta)

f:id:HK29:20210613161248p:plain

# 微分後にθにπを代入
sp.diff(g, theta).subs(theta, sp.pi)

f:id:HK29:20210613161316p:plain

# 不定積分
sp.integrate(g, theta) + C

f:id:HK29:20210613161353p:plain

# 定積分。0~πの区間
sp.integrate(g, (theta, 0, sp.pi)) + C

f:id:HK29:20210613161430p:plain

# グラフに図示
p = sp.plot(g, # sin関数
            sp.diff(g, theta), # 微分後の関数(cos)
            (theta, 0, sp.pi), # 図示する横軸区間
            legend = True, # 凡例の表示
            show = False)
p[1].line_color = "red"   # 要素の二つ目(cos)を赤線
p.show()

f:id:HK29:20210613161745p:plain

■例4. logの微分積分

# 変数名の定義
sp.var('x')
# 関数の定義
h = sp.log(x)
h

f:id:HK29:20210613162330p:plain

# 微分
sp.diff(h, x)

f:id:HK29:20210613162355p:plain

# 微分後にxに5を代入
sp.diff(h, x).subs(x, 5)

f:id:HK29:20210613162418p:plain

# 微分後にxに5を代入。数値で出力
float(sp.diff(h, x).subs(x, 5))

f:id:HK29:20210613162539p:plain

# 不定積分
sp.integrate(h,x) + C

f:id:HK29:20210613163411p:plain

# 定積分。logはそのままで出力
sp.integrate(h, (x, 1, 10)) + C

f:id:HK29:20210613163438p:plain

# 定積分。logも計算して数値で出力
float(sp.integrate(h, (x, 1, 10)) + C)

f:id:HK29:20210613163516p:plain

以上

<広告>