Unityと物理・数学の話

UnityやPython、天文関連、物理学、生物学を中心に更新していく予定です。塾講師、家庭教師の仕事をやっているのでお仕事の依頼はコメントにて承っております。当面はUnityをPythonで動かすのを試行錯誤しています。

PythonのSympyでMathematicaの価値はなくなるのか

 

Sympyとは

PythonのSympyライブラリは科学計算とかをめちゃくちゃ容易にしてくれるライブラリです。

本来C言語などで科学計算をやってもらおうってなったときは自分で数式を関数として定義してから計算させないといけないんですが、ここがpythonの強みの一つというだけあって、科学計算用のライブラリが作ってくれてあるんですね。

以下のサイトがsympyの基本的な使い方を説明してくれています。

3.2. Sympy : Python での代数計算 — Scipy lecture notes

そして、現在pythonでこのような科学計算ができるというのであれば、今までの科学計算ツールの主流であったともいえる、Wolfram Mathematicaの価値はなくなってしまうのでしょうか。

Mathematicaは有料であるのに対し、Sympyおよびpythonは無料で入手する事ができるので、可能であれば後者で代用していきたいというのが学生の心情というものでしょうか。また、以下のサイトでも説明されてるように、mathematicaでは複数行のコードを読み込ませることが難しくなっています。

実際Mathematicaで計算させる内容をpythonで代用している人も多いようです。

myenigma.hatenablog.com

Sympyを知らないという人は

SymPy Live

というブラウザ上でSympyを扱うことができるツールがあるので、使ってみるといいかもしれません。

実際、Sympyを使ってみるとかなりの満足感を得られる点として、Latexにより入力した数式のグラフを2次元、あるいは3次元でも描画してくれるという点が挙げられます。これはMathematicaにも実装されている機能ですね。

 

sympyには、表現された数式を実行する際のCコードを自動生成する機能を、Codegenというモジュールをインストールすることにより付与することができます。

Codegen — SymPy 1.1.2.dev documentation

以下はCodegenのサンプルコードです。

>>> from sympy.utilities.codegen import codegen
>>> from sympy.abc import x, y, z
>>> [(c_name, c_code), (h_name, c_header)] = codegen( ... ("f", x+y*z), "C89", "test", header=False, empty=False)
>>> print(c_name)
test.c
>>> print(c_code)
#include "test.h"
#include 
double f(double x, double y, double z) {
double f_result;
f_result = x + y*z;
return f_result;
}

Cに実装させたい数式がある場合に、すぐ関数のコードを表示してくれるのは今後かなり重宝しそうです。

 

また、SymPyをJupyter (ipython)とともに使うことで計算過程を表示させることができるので、かなり便利です。計算結果だけではなく、過程もしっておきたい物理数学の勉強をしたいときにも使えそうですね。表示させる際は、計算過程を知りたいそれぞれの関数を表示させるコマンドを入力すれば見ることができます。

qiita.com

 結局Sympyとmathematicaどちらがいいのか

高度な数学(数式)を含めた科学計算の実行はsympyで構わないという点がmathematicaとの機能の比較でわかりますが、

やはり、mathematicaに含められている計算可能なデータは

  • 数学データ: 195の多面体の98種類の属性データ、5300のグラフの282種類の属性データ、6つの結び目の64種類の属性データ、21の格子の38種類の属性データ
  • 化学データ: 44,000 の化合物の101種類の属性データ、118の元素の86種類の属性データ、1000の亜原子粒子の35種類の属性データ、3200の同位体の33種類の属性データ
  • 天文学データ: 52の測地座標系の32種類の属性データ、156,000 の天体の99種類の属性データ
  • 地政学データ: 240カ国の223種類の属性データ、164,000の世界各地の都市の14種類の属性データ
  • 言語データ: 149,000の英単語の37種類の属性データ、他の26の言語の辞書
  • 生命科学データ: 40,000のヒト遺伝子の41種類の属性データ、27,000のタンパク質の30種類の属性データ
  • 金融データ: 146,000の銘柄や金融商品の74の属性データ(履歴とリアルタイム)
  • 気象データ: 22,000の世界各地の観測地点における43の属性データ(履歴とリアルタイム)
  • Wolfram Alphaのデータ: Wolfram Alphaからの兆を越える多数のデータ

Mathematica - Wikipedia

となっており、数学的なこと以外に必要なデータを用いる科学計算ではmathematicaを使うのが最適という印象でしょうか。

とはいえ、電卓的に用いる場合としてはsympyがかなり強いというのは強調すべき点となりそうです。  

 

以下の記事も見ていってください!

unitypy.hatenablog.com