SymPy は数式処理のための Python ライブラリです。もしまだインストールされていないようでしたら,pip install sympy
などと打ち込んでインストールしてください。あるいは,こちらでオンラインで使うこともできます(ただし Python 2.7 です。グラフは描画されません)。Google Colaboratory でも使えます(後で書くように数式表示に制約があります)。
ここでは SymPy の中身を全部インポートしてしまいましょう:
from sympy import *
簡単な数式を入力してみましょう。sqrt
は平方根(square root)です:
sqrt(8)
2.828… でなく,2*sqrt(2)
(または $2\sqrt{2}$)のように出力されたと思います。
表示方法を 2*sqrt(2)
から $2\sqrt{2}$ に変えるには,init_printing()
と打ち込んで,もう一度やってみてください。
Google Colaboratory では init_printing(use_latex='matplotlib')
と打ち込めば図として出力されます。あまりきれいではありません。あるいは無理矢理 MathJax(数式表示用の JavaScript ライブラリ)を読み込ませる方法がここに書いてあります。
文字式も扱えます。以下では $x$ と $y$ を「文字」(symbol)だとします:
x, y = symbols("x y")
文字式を表示してみます:
(x + y)**10
この式を展開してみましょう:
expand((x + y)**10)
$x^{10} + 10 x^{9} y + 45 x^{8} y^{2} + 120 x^{7} y^{3} + 210 x^{6} y^{4} + 252 x^{5} y^{5} + 210 x^{4} y^{6} + 120 x^{3} y^{7} + 45 x^{2} y^{8} + 10 x y^{9} + y^{10}$ のように展開できましたでしょうか。
上の式は latex(expand((x + y)**10))
と打ち込んで出力されたものを LaTeX (MathJax) で数式化しています。
展開結果を変数に代入しておきましょう:
a = expand((x + y)**10)
ここで単に a
とだけ打てば,展開式が表示されます。
展開 expand()
の逆は因数分解 factor()
です。さきほどの長い式を因数分解してみましょう:
factor(a)
元の $(x + y)^{10}$ に戻りました。
積分もできます:
Integral(exp(-x**2/2))
定積分は次のようにします:
Integral(exp(-x**2/2), (x, -oo, oo))
定積分を実行してみましょう:
integrate(exp(-x**2/2), (x, -oo, oo))
$\sqrt{2}\sqrt{\pi}$ になってしまいました。本当は $\sqrt{2\pi}$ としてほしいところですが。
ほかの例として,積分 integrate(sin(x))
や微分 diff(sin(x))
もやってみましょう。
グラフのプロットも簡単です:
plot(exp(-x**2/2))
もしうまくいかなかったら %matplotlib inline
と打ち込んでから再度試してみてください。
複数の式を指定したり,$x$ の範囲を指定したりすることもできます:
plot(sin(x), cos(x), (x, 0, 2*pi))
Last modified: