Python を使用して代数方程式を解く
-
1つの変数で
SymPy
パッケージのsolve()
メソッドを使用して代数方程式を解きます -
SymPy
パッケージを使用して複数の変数の代数方程式を解く - 2つの複数の変数で代数方程式を解く
- 3つの複数の変数で代数方程式を解く
Python には、記号数学用のライブラリ、つまり SymPy
があります。このライブラリには、行列、微積分、幾何学、離散数学、積分、暗号化、代数などの複雑な数学の問題や概念を解決するためのユーティリティが含まれています。
このライブラリを使用して、代数方程式を解くことができます。この記事では、SymPy
を使用して Python で代数方程式を解く方法を説明します。
以下は、SymPy
モジュールをマシンにインストールするためのいくつかの方法です。
pip
パッケージマネージャーを使用して Sympy
をインストールする
次のコマンドを使用して、pip
を使用して SymPy
パッケージをインストールします。
pip install sympy
また
pip3 install sympy
Anaconda を使用して Sympy
をインストールする
Anaconda は無料の Python ディストリビューションであり、デフォルトでその環境に SymPy
ライブラリが含まれています。次のコマンドを使用して、既存のバージョンを更新できます。
conda update sympy
上記で説明した方法の詳細な概要と、SymPy
ライブラリをインストールするために利用できるその他の方法については、公式ドキュメントこちらを参照してください。
1つの変数で SymPy
パッケージの solve()
メソッドを使用して代数方程式を解きます
SymPy
ライブラリには、代数方程式を解くことができる solve()
関数があります。この関数は、次の主な引数を受け入れます。
f
:代数方程式。symbols
:方程式を解く必要のある変数。dict
:ソリューションマッピングのリストを返すためのブールフラグ。set
:シンボルのリストとソリューションのタプルのセットのブールフラグ。check
:代数式で得られた解をテストするためのブールフラグ。minimal
:ソリューションの高速で最小限のテストのためのブールフラグ。
簡単な理論が終わったので、いくつかの例を使用して、この solve()
メソッドを使用して代数方程式を解く方法を学びましょう。同じことについては、次のコードを参照してください。
from sympy.solvers import solve
from sympy import Symbol
x = Symbol("x")
print(solve(x ** 2 - 1, x))
print(solve(x ** 3 + x ** 2 + x + 1, x))
print(solve(x ** 3 - 0 * x ** 2 + 4 * x - 5, x))
出力:
[-1, 1]
[-1, -i, i]
[1, -1/2 - √19i / 2, -1/2 + √19i / 2]
SymPy
パッケージを使用して複数の変数の代数方程式を解く
複数の変数で代数方程式を解くには、複数の方程式が必要です。
たとえば、2つの変数で代数方程式を解く必要がある場合は、少なくとも 2つのそのような方程式が必要です。3つの変数で代数方程式を解くには、少なくとも 3つのそのような方程式が必要です。
そして、そのような方程式を解くには、SymPy
モジュールの symbols
、Eq
、solve
の 3つのユーティリティが必要です。
symbols
関数は、変数の文字列を Symbol
クラスのインスタンスに変換します。
Eq
クラスは、2つのオブジェクト、具体的には式の間の等しい関係を表します。たとえば、方程式 x + y = 3
がある場合、x + y
と 3
は 2つのオブジェクトまたは式です。x + y - 5 = x + 6
の場合、x + y - 5
と x + 6
が 2つのオブジェクトです。
そして、solve()
メソッドは上記の 2つを使用して方程式を解きます。
いくつかの関連する例を使用して、これらのユーティリティを使用して 2つおよび 3つの変数の代数方程式を解く方法を見てみましょう。
2つの複数の変数で代数方程式を解く
上記のユーティリティを使用して 2つの値で代数方程式を解く方法を理解するために、次の 2つの例を検討します。
例 1:
x + y = 5
x - y = 5
例 2:
2 * x + 4 * y = 10
4 * x + 2 * y = 30
最初の例については、次の Python コードを参照してください。
from sympy import symbols, Eq, solve
x, y = symbols("x y")
equation_1 = Eq((x + y), 5)
equation_2 = Eq((x - y), 5)
print("Equation 1:", equation_1)
print("Equation 2:", equation_2)
solution = solve((equation_1, equation_2), (x, y))
print("Solution:", solution)
出力:
Equation 1: Eq(x + y, 5)
Equation 2: Eq(x - y, 5)
Solution: {x: 5, y: 0}
2 番目の例については、次の Python コードを参照してください。
from sympy import symbols, Eq, solve
x, y = symbols("x y")
equation_1 = Eq((2 * x + 4 * y), 10)
equation_2 = Eq((4 * x + 2 * y), 30)
print("Equation 1:", equation_1)
print("Equation 2:", equation_2)
solution = solve((equation_1, equation_2), (x, y))
print("Solution:", solution)
出力:
Equation 1: Eq(2*x + 4*y, 10)
Equation 2: Eq(4*x + 2*y, 30)
Solution: {x: 25/3, y: -5/3}
3つの複数の変数で代数方程式を解く
上記のユーティリティを使用して 3つの値で代数方程式を解く方法を理解するために、次の 2つの例を検討します。
例 1:
x + y + z = 5
x - y + z = 5
x + y - z = 5
例 2:
2 * x - 4 * y + 6 * z = 10
4 * x + 2 * y + 6 * z = 30
4 * x + 2 * y - 10 * z = 50
最初の例については、次の Python コードを参照してください。
from sympy import symbols, Eq, solve
x, y, z = symbols("x y z")
equation_1 = Eq((x + y + z), 5)
equation_2 = Eq((x - y + z), 5)
equation_3 = Eq((x + y - z), 5)
print("Equation 1:", equation_1)
print("Equation 2:", equation_2)
print("Equation 3:", equation_3)
solution = solve((equation_1, equation_2, equation_3), (x, y, z))
print("Solution:", solution)
出力:
Equation 1: Eq(x + y + z, 5)
Equation 2: Eq(x - y + z, 5)
Equation 3: Eq(x + y - z, 5)
Solution: {x: 5, z: 0, y: 0}
2 番目の例については、次の Python コードを参照してください。
from sympy import symbols, Eq, solve
x, y, z = symbols("x y z")
equation_1 = Eq((2 * x - 4 * y + 6 * z), 10)
equation_2 = Eq((4 * x + 2 * y + 6 * z), 30)
equation_3 = Eq((4 * x + 2 * y - 10 * z), 50)
print("Equation 1:", equation_1)
print("Equation 2:", equation_2)
print("Equation 3:", equation_3)
solution = solve((equation_1, equation_2, equation_3), (x, y, z))
print("Solution:", solution)
出力:
Equation 1: Eq(2*x - 4*y + 6*z, 10)
Equation 2: Eq(4*x + 2*y + 6*z, 30)
Equation 3: Eq(4*x + 2*y - 10*z, 50)
Solution: {x: 37/4, z: -5/4, y: 1/4}