Sympyでギリシャ文字を定義する.(メモ)

目次

はじめに

こんにちは.かわつあんです.最近pythonで方程式などの文字式を計算するモジュールsympyを使っていろいろ遊び始めました. 文字式を扱うとなるとアルファベットに加えてギリシャ文字を定義することが多いのではないのでしょうか. そこでこの記事では,ギリシャ文字をsympyで使う方法をまとめました.

直接入力によるギリシャ文字の定義

タイトルの通り,直接ギリシャ文字を入力して定義します.入力方法は例えばギリシャ文字(ミュー)\muの場合,日本語入力できる状態で"myu-"と入力すれば,変換候補に出てきます.

これをそのまま定義してしまいます.sympyでは文字の定義はSymbolsクラスを使うと以下の通りにコードがかけます.

import sympy as sm
sm.init_pringing()

mu = sm.Symbol("μ")
mu

実行結果

\mu

となります.

ここで注意ですが私の場合,sympyを使う時はJupyter Lab(Notebook)を使っています.これを使えば,コードを書く際に一行sm.init_printing()を加えると出力の時にLatex(後述)のようにきれいに表示できるからです.

また,変数をセルの最後に書いておけば,自動的に出力されます.(普通のpythonでは最後の行はprint(mu)としないと出力されない) 以下のスクリーンショットのようにきれいな出力になるため,おすすめです.

f:id:kawats1:20200115110121p:plain

Latex記法を使ったギリシャ文字の定義

次にLatex記法をsympyで使う方法についてまとめます.sympyではLatex記法でも文字を定義できます.

Latexは大学生の理工系を卒業している人の半数以上は卒業論文等で使ったことがあると思います.簡単にいうと数式をきれいに書くための道具です.

例えば,Latex記法で\muを書きたい場合は,\muのように入力すれば,きれいなギリシャ文字およびそれらを組み合わせた数式などが記入できます. この記事では,ギリシャ文字Latex記法の知識を前提としています.わからない人はこちらなどを参考にしてください=>参考

それでは早速,Latexの記法を使った記法で例として \muおよび \thetaについて定義してみます.

import sympy as sm
sm.init_printing()

mu    = sm.Symbol("\mu")
theta = sm.Symbol("\theta")
mu, theta

出力結果  ( \mu, \quad  heta )

Jupyter Labのスクリーンショットは以下の通り.f:id:kawats1:20200115111544p:plain

ダメでしたね.\thetaの部分が正しく定義されていません. というのも,文字列の中の"\t"はpythonではタブ文字として定義されているからです.

これの解決策として一番簡単なのは,文字列"hoge"の部分をr"hoge"のようにかえれば良いです.

import sympy as sm
sm.init_printing()

mu    = sm.Symbol("\mu")
theta = sm.Symbol(r"\theta")# "\theta"から変更
mu, theta

実行結果

 ( \mu, \quad  \theta )

スクリーンショット

f:id:kawats1:20200115112217p:plain

なぜ正しく定義できたのかというと,""の前にrを書くとraw stringsすなわち,そのままの文字列として認識し,予約された文字もただの文字として認識してくれるようになるそうです. 詳しくは以下を参考にしてください. blog.pyq.jp

ちなみに,お気づきの方もいるとは思いますが,直接入力にたいして,Latex記法を使うと斜体になってギリシャ文字が定義されるようです. 以下に,Latex記法で斜体を普通の形に直そうとしたものを比べてみましたが...

スクリーンショット f:id:kawats1:20200115113938p:plain このように,Latex記法では斜体を直せないようです. また,直接入力とLatex記法での出力結果はやはり違うようです.

なんでだろう...

とりあえずは,特に気にならなけらばLatex記法を普通に使うほうがいい気はします...

さいごに

今回はsympyでギリシャ文字を定義する方法についてまとめてみました. 私は,Latex記法でギリシャ文字を定義するのをお勧めします. 若干謎も残りましたが,まあいいでしょう...(よくない)

ではまた(✿╹◡╹)