SymPy

SymPy は、プログラミング言語Pythonで記号計算を行うためのオープンソースのライブラリである（Python用の離散事象シミュレーションライブラリ と混同しやすい名前だが別ものである）。プロジェクトの目的は、完全な機能を持つ計算機代数システム (CAS; Computer Algebra System) を完備すること、さらに、拡張性を損なわないようにソースコードを可能な限り簡素に保つこと、とされている。SymPyはすべてPythonで書かれており、オプション機能であるプロット機能以外では、他の第三者製ライブラリに依存しない。

SymPyは、BSDライセンスを採用している自由ソフトウェアである。Ondřej ČertíkとAaron Meurerを中心に開発が進められている。

 特徴 

コア機能

 基本演算 *, /, +, -, **
 式の簡約化 (a*b*b + 2*b*a*b → 3*a*b**2 など)
 式の展開 ((a+b)**2 → a**2 + 2*a*b + b**2 など)
 数学関数（三角法、双曲線、指数対数、根、絶対値、階乗、ガンマ関数、ゼータ関数、多項式、球面調和関数、特殊関数、など）
 複素数 (exp(I*x).expand(complex=True) → cos(x)+I*sin(x) など)
 記号の置換 (x → ln(x), or sin → cosなど)
 任意桁数の整数・有理数、任意精度の浮動小数点実数
 非可換な演算
 パターンマッチング

多項式

 基本演算（除算、最大公約数、etc.）
 因数分解

 グレブナー基底
 部分分数分解
 終結式

微積分

 極限
 微分
 積分（リッシュのアルゴリズム、etc.）
 テイラー展開（ローラン展開）

方程式

 多項方程式
 代数方程式
 微分方程式
 差分方程式
 方程式系（連立方程式）

組み合わせ論 

 順列
 組み合わせ
 集合の分割
 部分集合
 順列集合
 グレイコード、Prufer sequence

離散数学

 二項係数
 総和
 総乗・階乗
 数論
 論理式

行列

 基本演算
 行列式
 固有値・固有ベクトル
 逆行列
 解
 抽象演算

幾何

 点、線、光線、線分、円、楕円、ポリゴン、など
 交差判定
 傾き
 類似性

プロット

Pygletモジュールが必要。

 座標系
 幾何のプロット
 2Dおよび3Dのポート
 対話的インタフェース
 色

物理学

 単位
 力学
 量子力学

 パウリ代数
 ディラック代数

統計学

 正規分布
 一様分布
 確率

出力

 pritty-printing: ASCIIアートによる式の出力、LaTeX出力
 コード生成: Python, C, FORTRAN

 関連するプロジェクト 

 Sage: Mathematica、Maple、MATLAB、Magma をあわせた機能を持つ環境を構築することを目的として開発が進められている、オープンソースソフトウェア (Sageの内部でSymPyが利用されている)
 mpmath: 任意精度の浮動小数点演算を行うためのPythonライブラリ (SymPy の内部で利用している)
 SympyCore: SymPyとは別の、PythonによるCASの実装
 symbide: SymPyが使っているGUIでPyGTKで書かれている
 SymFE: Pythonで書かれた、有限要素法を記号計算で行うソフトウェア

 例 

微分:
>>> from sympy import *
>>> x,y = symbols('x y')
>>> f = x**2 / y + 2 * x - ln(y)
>>> diff(f,x)
2 + 2*x/y
>>> diff(f,y)
-1/y - x**2*y**(-2)
>>> diff(diff(f,x),y)
-2*x*y**(-2)

プロット:
>>> from sympy import *
>>> Plot(cos(x*3)*cos(y*5)-y)
[0]: -y + cos(3*x)*cos(5*y), 'mode=cartesian'

 脚注 

 関連項目 

 数式処理システムの一覧

 外部リンク 

 Planet SymPy
 mpmath ホームページ
 SympyCore ホームページ
 Symbide ホームページ
 SymFe ホームページ

Category:オープンソースソフトウェア
Category:Pythonライブラリ
Category:数式処理システム
Category:Linux向け数式処理システム
Category:数学に関する記事
Category:Pythonでプログラムされた自由ソフトウェア