つれづれなる備忘録

日々の発見をあるがままに綴る

SymPyの使い方6 ~ 数式の微積分

 今回はSymPyを用いた数式の微積分計算の方法について紹介していきたい。SymPyのようなシンボリック計算ソフトを活用できると(解ける範囲で)複雑な微積分計算が扱えるようになり、応用数学や工学の理解を進めやすくなる。

1. 微分計算

 微分計算を実行するにはdiff(関数,微分変数)コマンドを実行する。例えば、

diff(cos(x),x)
>-sin(x)
diff(exp(x**2),x)
>2*x*exp(x**2)

2回以上の微分を実行するには、diff(関数,微分変数,微分変数)またはdiff(関数,微分変数,微分回数)とする。例えば、

diff(x**4,x,x)
>12*x**2

diff(x**4,x,2)
>12*x**2

多変数関数の場合、微分変数を選択することで偏微分を実行することができる。例えば、

diff(x**3*y**3*z,x,y)
>9*x**2*y**2*z

また複数回偏微分を指定する場合は、各微分変数の後に微分回数を指定する。

diff(x**3*y**3*z,x,2,y,2)
>36*x*y*z

微分を実行せずに微分記号に留めておくにはDerivative(関数,微分変数)とする。

expr=Derivative(cos(x),x)
expr
>Derivative(cos(x), x)

後で微分を実行するには.doit()を用いる。

expr.doit()
>-sin(x)

2. 積分計算

 積分計算を実行するにはintegrate(関数,積分変数)を用いる。例えば、

integrate(x**2,x)
>x**3/3

また複雑な積分も解が特殊関数であれば表示される。

integrate(exp(-x**2),x)
>sqrt(pi)*erf(x)/2

微分と異なり積分不可能なものは、入力がそのまま出力される。

integrate(cos(x*exp(-x)),x)
>Integral(cos(x*exp(-x)), x)

多重積分の場合は、積分変数を順番に記述する。

integrate(x*y**2,x,y)
>x**2*y**3/6

積分の場合は、integrate(関数,(積分変数,下限,上限))を用いる。

integrate(x**2,(x,0,10))
>1000/3

無限大の場合はoを2つ連ねてooとして、マイナス無限大は-ooとする。

integrate(exp(-x),(x,0,oo))
>1

多重積分の定積分不定積分と同様に積分変数ごとに下限と上限を記述する。

integrate(exp(-x**2 - y**2), (x, -oo, oo), (y, -oo, oo))
>pi

積分を実行しない場合はIntegrate(関数名,積分変数)を使用する。

expr=Integral(x**2, x)
expr
>Integral(x**2, x)

積分を実行する場合は微分のときと同様に.doit()を用いる。

expr.doit()
>x**3/3

3. まとめ

 今回はSymPyを用いた微分積分計算の方法について紹介した。