ではpythonを使って2次方程式を解いてみましょう。
使用する関数は代数演算を行うことができるSymPyから、Symbolクラス、solve()関数を使います。

この記事はこんな人におすすめ。
- SymPy を使って2次方程式を解く方法を知りたい。
- 同じく連立方程式を解く方法を知りたい。
プログラミング無料体験はこちら↓↓↓
![]()
では を計算してみましょう。
2次方程式の計算
from sympy import Symbol, solve #Symbol, Solve をSymPyからインポート
x=Symbol('x') #記号 を表すシンボルオブジェクト
expr=x**2+10*x+15 #方程式を定義
solve(expr, dict=True) #方程式、そして結果をPythonの辞書リストで受け取る指定
[{x: -5 - sqrt(10)}, {x: -5 + sqrt(10)}] #結果
というわけで、解は以下の通り。
もう一つやってみましょう。
expr=x**2+6*x+4 #方程式を定義
solve(expr, dict=True) #方程式、そして結果をPythonの辞書リストで受け取る指定
[{x: -3 - sqrt(5)}, {x: -3 + sqrt(5)}] #結果
解は以下の通り。
因数の展開と求解
因数を展開し、その解を求めてみましょう。
まずは以下の因数から。
from sympy import Symbol, solve #Symbol, Solve をSymPyからインポート
x=Symbol('x') #記号 を表すシンボルオブジェクト
p=(x+5)*(x-1) #因数を定義
p
(x + 5)(x - 1)
定義した因数を、expand()関数を使って展開します。
from sympy import expand #expand()関数をインポート expand(p) #因数を展開
solve()関数を使って、解を求めます。
solve(p, dict=True) #方程式、そして結果をPythonの辞書リストで受け取る指定
[{x: -5}, {x: 1}]
解は以下の通り。
では、上の解が方程式を満たすか確認します。
soln=solve((p), dict=True) #方程式を定義、そして結果をPythonの辞書リストで受け取る指定
soln = soln[0] #正解であれば0表示
p.subs({x:soln[x]}) #実行
0
0なので、満たすことがわかります。
それではもう一つ。
p2=(x+7)*(x+9) #因数を定義 p2
expand (p2) #因数を展開
展開された式の解を求めます。
solve(p2, dict=True)
[{x: -9}, {x: -7}]
解は、以下の通り。
soln=solve((p2), dict=True)
soln = soln[0]
p2.subs({x:soln[x]})
0
こちらも、方程式を満たすことがわかりますね。
連立方程式を解く
では次に連立方程式を解いてみましょう。
例はこの式。
基本の記述は同じですが、変数xとyがあるのでSymbol クラスで定義します。
x=Symbol('x')
y=Symbol('y')
expr1=4*x-3*y+9
expr2=3*x-7*y-17
solve((expr1, expr2), dict=True)
[{x: -6, y: -5}]
解が式を満たしているかを確認します。
soln=solve((expr1, expr2), dict=True)
soln=soln[0]
expr1.subs({x:soln[x], y:soln[y]})
0
soln=solve((expr1, expr2), dict=True)
soln=soln[0]
expr2.subs({x:soln[x], y:soln[y]})
0
というわけで、確認できました。![]()
関連記事:
https://paython-iot.com/2021/04/04/python-unit-conversion/
https://paython-iot.com/2021/04/05/factor/
コメント