スライドショースライドショー

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

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

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

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

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

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

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

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の理解を深めていきましょう!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

akira

akira

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説