Python を使用して代数方程式を解く

Vaibhav Vaibhav 2023年1月30日
  1. 1つの変数で SymPy パッケージの solve() メソッドを使用して代数方程式を解きます
  2. SymPy パッケージを使用して複数の変数の代数方程式を解く
  3. 2つの複数の変数で代数方程式を解く
  4. 3つの複数の変数で代数方程式を解く
Python を使用して代数方程式を解く

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 モジュールの symbolsEqsolve の 3つのユーティリティが必要です。

symbols 関数は、変数の文字列を Symbol クラスのインスタンスに変換します。

Eq クラスは、2つのオブジェクト、具体的には式の間の等しい関係を表します。たとえば、方程式 x + y = 3 がある場合、x + y3 は 2つのオブジェクトまたは式です。x + y - 5 = x + 6 の場合、x + y - 5x + 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}
著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

関連記事 - Python Math