python標準操作のみで方程式クラス実装

概要

今回は、Python3 で標準的に使える操作を駆使し、ライブラリに依存しない「方程式クラス」を作成しました。
まだ機能は多くないですが、代数方程式 (x^3 + 2x^2 + x + 1 = 0 のように、多項式のみで表される方程式) を簡単に定義できます。

コード概要

このコードは、以下のような要素で構成されます。

Monomial クラス
単項式を表現します。以下をサポートします。
  • 変数の代入と評価
  • 単項式、多項式間の加算、減算、乗算
Polynomial クラス
多項式を表現します。以下をサポートします。
  • 単項式のリストを管理
  • 同類項の結合
  • 単項式、多項式間の加算、減算、乗算
Equation クラス
左辺と右辺の多項式からなる方程式を表現します。以下をサポートします。
  • 方程式の簡単化 (左辺 = 0 の形にする)
  • 1元1次方程式の解計算

実際のコード

コードはGitHubレポジトリでご確認できます。

使用例

以下の例では、クラスを用いて方程式を操作しています。


import equation

# 変数を定義
x = equation.Monomial(1, {'x': 1})

# 多項式を定義
p1 = (x + 1) ** 2
p2 = (x + 2) ** 2

print("多項式 p1 : ", p1)
print("多項式 p2 : ", p2)

# 方程式を定義
eq1 = equation.Equation(p1, p2)

print("方程式: ", eq1)
eq1.simplify()
print("簡略化後: ", eq1)
						

上記のコードを実行すると、下記のような出力が得られます。


多項式 p1 :  x^2 + 2x + 1
多項式 p2 :  x^2 + 4x + 4
方程式:  x^2 + 2x + 1 = x^2 + 4x + 4
簡略化後:  -3 - 2x = 0
            

まとめ

pythonの標準的操作を活用して数学的表現や操作を表現してみました。
今後、1/x を含む方程式など、表現可能な方程式を増やしてみたいと考えてます。