Pythonによる代数系の表現
著者:梅谷 武
Pythonによる代数系の表現法について述べる。
作成:2006-07-07
更新:2013-06-16

Pythonの組み込み数値型

 Pythonには次の4つの数値型が組み込まれています。
  1. 整数型(int):そのマシンの標準語長(最低で32bit)。C言語のlong型
  2. 長整数型(long):無限精度
  3. 浮動小数点型(float):C言語のdouble型
  4. 複素数型(complex):C言語のdouble型の組(real, imag)
 通常の整数定数はそれが整数型の制限を超えない場合、整数型として扱われます。整数型の制限を越える整数、あるいは語尾に 'L' あるいは 'l' が付いた整数定数は長整数型として扱われます。小文字の 'l' は '1' と区別するのが難しいので大文字の'L'を使うことが推奨されます。
 小数点または指数表記のある数値定数は浮動小数点型として扱われます。語尾に 'j' または 'J' をつけると実部が零である複素数として扱われます。一般の複素定数は実部+虚部として表します。
 Python はこの4つの数値型を
int ⊂ long ⊂ float ⊂ complex
と考えてこの4つの型が混合された演算を実行します。二つの異なる数値型の演算は大きい方の数値型に拡張して行なわれます。
 4つの組み込み数値型には次の演算が定義されています。
x + y 加算
x - y 減算
x * y 乗算
x / y 除算
x 剰余(整数型、長整数型のみ)
-x 符号反転
+x 符号不変
abs(x) 絶対値
int(x) 整数型への変換
long(x) 長整数型への変換
float(x) 浮動小数点型への変換
complex(re,im) 複素数型への変換
conjugate() 共役複素数
divmod(x, y) 除算と剰余の組(整数型、長整数型のみ)
pow(x, y) xのy乗
x ** y xのy乗

Pythonによる有理整数環の表現

 Pythonにおいては組み込み型で有理整数を表現することができます。整数型(int)の演算で制限を越える場合は自動的に無限精度の長整数型(long)に変換されますのであまり型を意識する必要がありません。
 注意すべき点として整数の定数定義において長整数を定義する場合に語尾に 'L' をつける必要があることですが、2.3.4で実験する限り 'L'を付けなくても整数型の範囲を超える整数定数は長整数型として認識されるようです。

Pythonにおける演算子オーバーロード

 PythonにおいてはC++と同様に演算子をオーバーロードすることができます。これによりクラスを新しい数値型として定義し、そのクラスに属するオブジェクトを数式を使って演算することが可能になります。この方法によってさまざまな代数系における計算を表現します。
 あるクラスにおいて演算子オーバーロードを行なうためには次のメソッドを定義します。
__add__(self, other) self + other により呼び出される。
__radd__(self, other) other + self においてotherで未定義のとき呼び出される。
__sub__(self, other) self - other により呼び出される。
__rsub__(self, other) other - self においてotherで未定義のとき呼び出される。
__mul__(self, other) self * other により呼び出される。
__rmul__(self, other) other * self においてotherで未定義のとき呼び出される。
__div__(self, other) self / other により呼び出される。
__rdiv__(self, other) other / self においてotherで未定義のとき呼び出される。
__mod__(self, other) self
__rmod__(self, other) other
__pow__(self, other) self ** other により呼び出される。
__rpow__(self, other) other ** self においてotherで未定義のとき呼び出される。
__cmp__(self, other) self (比較演算子) other により呼び出される。
__rcmp__(self, other) other (比較演算子) self においてotherで未定義のとき呼び出される。
__neg__(self) -self により呼び出される。
__abs__(self) abs(self) により呼び出される。
__int__(self) int(self) により呼び出される。
__long__(self) long(self) により呼び出される。
__float__(self) float(self) により呼び出される。
__complex__(self) complex(self) により呼び出される。
__coerce__(self, other) 型混合演算において呼び出される。

有理数体

 Pythonにおいては有理数を表現するためのモジュール fractions が標準ライブラリに組み込まれています。これをインクルードすることにより、
int ⊂ long ⊂ Fraction
とみなすことができる有理数体クラスFractionが使えるようになります。

一変数多項式環クラス:Poly1.py

 一変数多項式環クラス:Poly1.pyはPythonの組み込み型による有理整数環あるいは有理数体を係数とする一変数多項式環クラスです。
 Poly1.py においては一変数多項式が係数のリストとして実装されています。
 Poly1.py は次の演算子オーバーロードを実装しています。
__add__(self, other) self + other により呼び出される。
__radd__(self, other) other + self においてotherで未定義のとき呼び出される。
__sub__(self, other) self - other により呼び出される。
__rsub__(self, other) other - self においてotherで未定義のとき呼び出される。
__mul__(self, other) self * other により呼び出される。
__rmul__(self, other) other * self においてotherで未定義のとき呼び出される。
__div__(self, other) self / other により呼び出される。
__mod__(self, other) self
__pow__(self, other) self ** other により呼び出される。
__neg__(self) -self により呼び出される。
 Poly1.pyには次の固有メソッドが実装されています。
SetChar(chr) print文による表示における不定元文字chrを設定する。
Horner(const) ホーナー法により定数constを代入する。
diff1() 一階微分
diff(n) n階微分

多変数多項式環クラス:PolyM.py

 多変数多項式環クラス:PolyM.pyはPythonの組み込み型による有理整数環あるいは有理数体を係数とする多変数多項式環クラスです。
 PolyM.py においては多変数多項式が単項式における不定元の添え字と係数の組のリストとして実装されています。
 PolyM.py は次の演算子オーバーロードを実装しています。
__add__(self, other) self + other により呼び出される。
__radd__(self, other) other + self においてotherで未定義のとき呼び出される。
__sub__(self, other) self - other により呼び出される。
__rsub__(self, other) other - self においてotherで未定義のとき呼び出される。
__mul__(self, other) self * other により呼び出される。
__rmul__(self, other) other * self においてotherで未定義のとき呼び出される。
__pow__(self, other) self ** other により呼び出される。
__neg__(self) -self により呼び出される。
 Poly1.pyには次の固有メソッドが実装されています。
SetChars(chrs) print文による表示における不定元文字列chrsを設定する。
Published by SANENSYA Co.,Ltd.