【SymPy】LaTeX による数式表示

【SymPy】LaTeX による数式表示

sympy.init_printing()

 Jupyter Notebook には MathJax という Javascriptライブラリが組込まれていて、sympy.init_printing() を使うと、LaTeX 形式で数式を出力させることができます。

display()関数

 Jupyter Notebook でコードセルを実行すると、最後に記述した命令文が Out[] に出力されます。たとえば次のコードを実行すると、最後に記述した sympy.sin(x) という命令文の実行結果が出力されることになります。

# JUPYTER_LATEX

# In[1]

import sympy

# LaTeXで数式を表示するように設定
sympy.init_printing()

# 記号xを定義
sympy.var("x")

sympy.log(x)
sympy.sin(x)
\[\sin(x)\]

 途中にある数式を LaTeX形式で表示させたい場合は display() 関数を使います。

# In[2]

f = sympy.log(x)
g = sympy.sin(x)

display(f)
display(g)
\[\begin{align*}\log(x)\\[6pt]\sin(x)\end{align*}\]

 display() は IPython.core.display モジュールの関数ですが、Jupyter Notebook を起動すると自動的にインポートされるので、display() と記述するだけて使えるようになっています。
 

sympy.latex()関数

 sympy.latex() を使うと数式を LaTeXコマンドで表示させることができます。LaTeX コマンドを手入力するのは相当な手間がかかるので、この機能は論文の執筆などに有用です。

# SYMPY_LATEX

# In[1]

import sympy

# LaTeXで数式を表示するように設定
sympy.init_printing()

# 記号xを定義
sympy.var("a b x y")

# f(x)=exp(x)*cos(x)
f = sympy.exp(x) * sympy.cos(x)

# f(x)をaからbまでxで積分する
i = sympy.integrate(f, (x, a, b))

# 数式をまとめる(整理する)
i = sympy.simplify(i)

# 数式をLaTeXで表示
display(i)

# 数式のLaTeXコマンドを表示
print(sympy.latex(i))
\[\frac{\sqrt{2}}{2} \left(- e^{a} \sin{\left (a + \frac{\pi}{4} \right )} + e^{b} \sin{\left (b + \frac{\pi}{4} \right )}\right)\]
\frac{\sqrt{2}}{2} \left(- e^{a} \sin{\left (a + \frac{\pi}{4} \right )} + e^{b} \sin{\left (b + \frac{\pi}{4} \right )}\right)

 SymPy で積分などを計算させると、式がきれいにまとまっていないことがあるので、sympy.simplify() で数式を整理しておきます。三角関数の合成なども勝手にやってくれます。