1.14. SymPy

 数値計算ではないが、数式の変形や簡略化をpythonにさせたい場合は、SymPyというモジュールを使うと便利である。商用の数式処理ソフトにMathematicaというものがあるが、これと似たことをpythonにやらせることができる。SymPyを使うときは、symbols(複数形のsがついていることに注意)というfunctionを使って、変数を明示的に宣言しないといけいない。なお、SymPyでは複素数はI(大文字のi)で表し、jではない。

In [2]:
from sympy import *
x, y = symbols('x y')
Rational(3, 2)*pi + exp(I*x) / (x**2 + y)
Out[2]:
$\displaystyle \frac{3 \pi}{2} + \frac{e^{i x}}{x^{2} + y}$
 

 3行目のRational(3,2)は、3/2の意味であるが、3/2にすると1.5になってしまうので、分数を計算させないために用いている。普通に3/2とすると、

In [3]:
3/2*pi + exp(I*x) / (x**2 + y)
Out[3]:
$\displaystyle 1.5 \pi + \frac{e^{i x}}{x^{2} + y}$
In [9]:
g = (x+y)**2
g
Out[9]:
$\displaystyle \left(x + y\right)^{2}$
 

これを展開したいときは、expandで、

In [10]:
expand(g)
Out[10]:
$\displaystyle x^{2} + 2 x y + y^{2}$
In [18]:
factor(g)
Out[18]:
$\displaystyle \left(x + y\right)^{2}$
 

あるいはsmplify

In [24]:
simplify(g)
Out[24]:
$\displaystyle \left(x + y\right)^{2}$
 

 素因数分解したいときは、factorを使う。

In [20]:
f = x*y**2 + x + y**2 + 1
f
Out[20]:
$\displaystyle x y^{2} + x + y^{2} + 1$
In [21]:
factor(f)
Out[21]:
$\displaystyle \left(x + 1\right) \left(y^{2} + 1\right)$
 

微分はdiffを使って、

In [25]:
diff(f,x,1)
Out[25]:
$\displaystyle y^{2} + 1$
 

その他の詳細は、http://docs.sympy.org/1.3/ を参照。

 

 

練習問題

(1.14.1.) $\cos x \sin x$を簡略化せよ。


(1.14.2.) $\log x$を$x$で微分せよ。

 

 

 

解答例

(1.14.1.)

In [27]:
from sympy import *
x, y = symbols('x y')
simplify(cos(x)*sin(x))
Out[27]:
$\displaystyle \frac{\sin{\left(2 x \right)}}{2}$
 

 

(1.14.2.)

In [28]:
diff(log(x),x)
Out[28]:
$\displaystyle \frac{1}{x}$
 


当サイトのテキスト・画像の無断転載・複製を固く禁じます。
Unauthorized copying and replication of the contents of this site, text and images are strictly prohibited.
© 2019 Go Yusa