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() で数式を整理しておきます。三角関数の合成なども勝手にやってくれます。
コメント
逆三角関数の表示について質問です.sympy.latex(atan x)とすると, 出力時にatan xと表示されてしまいますが、これをarctan(x)やtan^(-1)(x)と表示を変更することはできるのでしょうか?
sympy.latex() の出力形式そのものを変更する方法はわかりません。モジュールの中身を書き換える必要があると思いますが、おそらくその手順はとても複雑です。根本的な解決にはならないかもしれませんが、新しい関数を定義することができます。以下のコードを試してみてください。ただし、Google Colaboratory で動作確認しただけなので、他の環境でうまくいくかわかりません(現在、Jupyter Notebook を使っていないので … )。
他にも書き換えたい記号があれば、my_dic に追加してください。
先ほどの返信に載せたコードの一部が間違えていました。
修正しておきましたので、コピーし直してください。
ありがとうございました.理解できました.
「SymPy の基本的な使い方」の記事で、下記は誤植と思われますのでご確認ください。
In[5]プロクラムで、print( ) → print( a + b )
直しておきました。
ありがとうございます。m(_ _)m