【Python入門】Numpy行列やSympyで連立方程式を簡単に解く方法

Pythonでの数値計算などを学習していると、

  • 中学で習った連立方程式ってPythonで解けたりするの?
  • プログラミングで連立方程式を計算することってできるの?

という疑問もでてくるかと思います。

そのような方に向けて、この記事では以下の2つの方法で連立方程式の解き方について解説していきます。

  • NumPy行列で連立方程式を解く方法
  • SymPyで連立方程式を解く方法

連立方程式での色々な問題をわかりやすく解説していますので、ぜひ参考にしてくださいね!

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

NumPy行列で連立方程式を解いてみよう!

NumPyとは

NumPyとは、Pythonの学術計算ライブラリになります!

ndarrayというNumPyの配列を使用し、高速に少ないコード量で様々な数値計算が行えます。

NumPyとは、やNumPyの基本計算についてしっかり基礎を固めてから連立方程式を学びたい!という方はこちらの記事を参考にしてください。

連立方程式を解いてみよう!

それではサンプルコードを見ながらNumPyを使用した連立方程式の解き方について確認していきましょう!

今回解く連立方程式は以下となります。

2x + 3y = 16
x + 7y = 19

Pythonのコードについて解説していきます!

まずimport文で連立方程式を解くために使用するNumPyのsolveをインポートします。

変数leftに両方程式の左辺を2次元配列として代入し、変数rightに両方程式の右辺を代入します。

これで先程インポートしたsolveの引数にleftとrightを渡すことで、連立方程式を計算した結果を得ることができるのです。とても簡単で便利ですね!

from numpy.linalg import solve

left = [[2, 3],
        [1, 7]]

right = [16, 19]

print(solve(left, right))

実行結果

[5. 2.]

実行結果は小数になっているので、「x=5, y=2」が答えということになります!

複雑な連立方程式に挑戦してみよう!

基本的な連立方程式は解けるようになったかと思いますので、次は少し複雑な連立方程式の解き方について確認していきましょう!

今回解く連立方程式は以下となります。

3/4x + 5/2y = -6 …①
y = 2x – 7 …②

サンプルコードを見ていきます。少し複雑ですが、中学の授業で習った移項を思い出しながら頑張っていきましょう!

左辺にxとyの式が来るように②の式を以下のように移動させます。

-2x + y = -7 …②

その後は同じように、solveの引数にleftとrightを渡して連立方程式を解いていきましょう!

from numpy.linalg import solve

left = [[3/4, 5/2],
        [-2, 1]]

right = [-6, -7]

print(solve(left, right))

実行結果

[ 2. -3.]

続いてこちらの連立方程式を解いていきましょう!

2(x + 3y) = -6 …①
2y – 7 = -(3x – y) …②

こちらも少し複雑な連立方程式ですが、基本的な解き方は変わりません。以下のように式を展開して移行すれば全く同じように解くことができます!

2x + 6y = -6 …①
3x + y = 7 …②

from numpy.linalg import solve

left = [[2, 6],
        [3, 1]]

right = [-6, 7]

print(solve(left, right))

実行結果

[ 3. -2.]

3つの式の連立方程式に挑戦してみよう!

それでは今度は、3つの式の連立方程式に挑戦してみましょう!

今回解く連立方程式はこちらです。

5x-4y+6z=8 …①
7x-6y+10z=14 …②
4x+9y+7z=74 …③

3つの式の連立方程式は中学でやったように手で計算すると結構面倒ですよね?でもPythonを使って解けば、2つの式の連立方程式と同じように簡単に解くことができます!

さっそくサンプルコードを見ながら試していきましょう!

今回は3つの方程式があるので、変数leftの要素には、3つ分の左辺の要素が入りますね!変数rightにも3つ分の右辺の要素が入ります!これでsolveにそれぞれleftとrightを渡して計算結果を求めることができますね!

from numpy.linalg import solve

left = [[5, -4, 6],
        [7, -6, 10],
        [4, 9, 7]]

right = [8, 14, 74]

print(solve(left, right))

実行結果

[2. 5. 3.]

SymPyで連立方程式を解いてみよう!

SymPyとは

SymPyとは、記号計算を行うためのPythonライブラリです。Pythonで様々な数学計算を簡単に行うことができます!

次項からSymPyを使用して連立方程式を解いていきましょう!

連立方程式を解いてみよう!

それではSymPyを使用して連立方程式を解いていきましょう!

連立方程式は先程NumPyで解いたものと同じものになります。

2x + 3y = 16
x + 7y = 19

サンプルコードを見ていきましょう!

まずimport文で連立方程式を解くために使用するSymPyをインポートします。xとyの計算ができるように、sympy.Symbol()で宣言をします!そして宣言したxとyを使用して、方程式をそれぞれ作りましょう!

これでsympy.solve([]))に作成した方程式を渡すと、連立方程式を解くことができます!こちらもとても簡単に解くことができますね!

import sympy

x = sympy.Symbol('x')
y = sympy.Symbol('y')

equation1 = 2*x + 3*y - 16
equation2 = x + 7*y - 19

print(sympy.solve([equation1, equation2]))

実行結果

{x: 5, y: 2}

複雑な連立方程式に挑戦してみよう!

それでは少し複雑な連立方程式の解き方について確認していきます!

こちらも先程NumPyで使用した連立方程式を使っていきます!

3/4x + 5/2y = -6 …①
y = 2x – 7 …②

サンプルコードを見ていきましょう!

まず先程NumPyで連立方程式を解いた時のように、②の式を以下のように移項します!

-2x + y = -7 …②

その後は同じように、sympy.solve([]))に方程式を渡すと結果を求めることができますね!

import sympy

x = sympy.Symbol('x')
y = sympy.Symbol('y')

equation1 = 3/4*x + 5/2*y + 6
equation2 = -2*x + y + 7

print(sympy.solve([equation1, equation2]))

実行結果

{x: 2.00000000000000, y: -3.00000000000000}

次のサンプルもNumPyで使用したものを使用していきます!

2(x + 3y) = -6 …①
2y – 7 = -(3x – y) …②

以下のように式を展開、移行して連立方程式を解いていきましょう!

2x + 6y = -6 …①
3x + y = 7 …②

import sympy

x = sympy.Symbol('x')
y = sympy.Symbol('y')

equation1 = 2*x + 6*y + 6
equation2 = 3*x + y - 7

print(sympy.solve([equation1, equation2]))

実行結果

{x: 3, y: -2}

3つの式の連立方程式に挑戦してみよう!

では最後にSymPyで3つの式の連立方程式を解いていきましょう!

こちらもNumPyの項で使用したものを解いていきます!

5x-4y+6z=8 …①
7x-6y+10z=14 …②
4x+9y+7z=74 …③

3つの式の連立方程式は少し複雑ですが解き方は2つの式のものと同じです!

xとyとzの計算ができるように、sympy.Symbol()で宣言をします!そして宣言したxとyとzを使用した方程式を作り、sympy.solveで3つの式の連立方程式も解くことができるのです!

import sympy

x = sympy.Symbol('x')
y = sympy.Symbol('y')
z = sympy.Symbol('z')

equation1 = 5*x - 4*y + 6*z - 8
equation2 = 7*x - 6*y + 10*z - 14
equation3 = 4*x + 9*y + 7*z - 74

print(sympy.solve([equation1, equation2, equation3]))

実行結果

{x: 2, y: 5, z: 3}

まとめ

いかがでしたでしょうか。今回は、Pythonの連立方程式について学習しました!

PythonはNumPyやSymPyなどの便利な計算ライブラリがあるため様々な数値計算を行うことができます!

Pythonで連立方程式を解く方法もマスターして、さらにPythonの理解を深めていきましょう!

この記事を書いた人

インフラエンジニア→プログラマー。趣味は3歳の子供にPCの使い方、タイピングを教えること。業務ではPython, PHP, Javaなどやってます。

目次