こんにちは、くれあです。
この記事ではPythonで方程式の解を求めるプログラムを紹介します。
是非参考にしてみて下さい!
解の公式を使って2次方程式を解く
2次方程式の解の公式を関数にセッティングし、2解を求めてみます。公式は以下です。
2次方程式 \(ax^2+bx+c=0\ (a\neq0)\) の解は
$$x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$
サンプルプログラム
#2次方程式の解を求める
def solve_f(a, b, c):
D = (b*b - 4*a*c)**0.5
x_1 = (-b + D)/(2*a)
x_2 = (-b - D)/(2*a)
print('解は {0}, {1}'.format(x_1,x_2))
solve_f(1,1,-6)
2次方程式の解を返す、solve_f()関数を作りました。
引数(a,b,c)は2次方程式の係数です。
実行結果
解は 2.0, -3.0
SymPyを使って2次方程式を解く
事前に、開発環境でSymPyをインストールしておきます。
pip install sympy
ターミナルやコマンドプロンプトでコマンドを入れてインストールを実行しましょう。
Pythonの環境構築がない場合、
それを作っておく必要もありますがそこまで面倒ではないのでトライしてみてください!
Python公式でも環境構築についてガイドしてくれています。
サンプルプログラム
import sympy
x = sympy.Symbol('x')
Sol2=sympy.solve(x**2 - 3 * x + 2)
print(Sol2)
solve関数で解きたい方程式の解を返します。
今回の場合\(x^2-3x+2=0\)の解を出してくれます。
実行結果
[1, 2]
2解が返されます。
SymPyを使って3次方程式を解く
同様に3次方程式もsolve関数の引数に入れることで、解を求めることができます。
サンプルプログラム
import sympy
x = sympy.Symbol('x')
Sol2=sympy.solve(x**3 - 8)
print(Sol2)
今回の場合\(x^3-8=0\)の解を出してくれます。
実行結果
[2, -1 - sqrt(3)*I, -1 + sqrt(3)*I]
√がsqrtだったり、tex形式のような形ですが
\(x^3-8=0\)の解 \(2, -1-\sqrt{3}i, -1+\sqrt{3}i\) が返されます。
SymPyを使って連立方程式を解く
sympyでは連立方程式を解くこともできます。
2つの方程式を定義しsolve関数の引数に入れることで解が返されます。
サンプルプログラム
import sympy
x = sympy.Symbol('x')
y = sympy.Symbol('y')
expr1 = 4 * x + 2 * y - 2
expr2 = 4 * x + 5 * y + 7
print(sympy.solve([expr1, expr2]))
実行結果
{x: 2, y: -3}
まとめ
最初の解の公式を記述したコードは面倒ですが、
SymPyライブラリをインストールすることで簡単に方程式を解くプログラムができました。
掛け算など演算の書き方に慣れると、簡単に今回のプログラムも作れるので
ぜひ方程式を色々カスタマイズしてみて試してみてくださいね!
プログラミングを勉強してみたい!という方は、是非こちらも参考にしてください(^^)
参考にした書籍はこちら
にほんブログ村
コメント