Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで二次方程式を解く方法:cmathモジュールの使い方を解説

Pythonで二次方程式を解くには?

Pythonで二次方程式を解くには、標準ライブラリのcmathモジュールを使うのが便利です。二次方程式の解(根)は、判別式の値によっては複素数になることがあるためです。cmathモジュールを使えば、負の数の平方根も問題なく計算でき、複素数の解も正確に求められます。

一般に、ax² + bx + c = 0 という形式の二次方程式の解は、次の解の公式で求められます。

x = (-b ± √(b² - 4ac)) / 2a

ここで、b² - 4ac の部分は判別式(discriminant)と呼ばれ、その値によって解の性質が決まります。

  • 判別式 > 0:異なる2つの実数解
  • 判別式 = 0:重解(1つの実数解)
  • 判別式 < 0:2つの共役な複素数解

コード例

以下は、a = 12、b = 8、c = 1 の二次方程式「12x² + 8x + 1 = 0」を解くPythonコードです。

import cmath

a = 12
b = 8
c = 1

# 判別式を計算
d = (b**2) - (4*a*c)

# 解の公式を使って2つの根を求める
root1 = (-b - cmath.sqrt(d)) / (2 * a)
root2 = (-b + cmath.sqrt(d)) / (2 * a)

print(root1)
print(root2)

実行結果

このプログラムを実行すると、次の出力が得られます。

(-0.5+0j)
(-0.16666666666666666+0j)

出力は「実部+虚部j」という複素数形式で表示されています。今回の例では虚部が0のため、実際には x = -0.5 と x ≈ -0.167 という2つの実数解が存在することを意味します。

cmathとmathモジュールの違い

判別式が必ず0以上だと分かっている場合は、通常のmathモジュールのsqrt関数でも十分です。しかし、判別式が負になる可能性がある場合、math.sqrtはValueErrorを発生させてしまいます。一方、cmath.sqrtは負の数に対しても複素数の平方根を返すため、あらゆる二次方程式を汎用的に扱いたい場合はcmathモジュールを選ぶのが最適です。

  1. Pythonでディレクトリの名前を変更する方法をわかりやすく解説

    Pythonでディレクトリ(フォルダ)の名前を変更するには、主に shutil モジュールと os モジュールの2つの方法があります。どちらも簡単なコードで実現できるため、用途に応じて使い分けるとよいでしょう。 shutil.move() を使う方法 shutil モジュールの move(src, dst) 関数は、指定したパスから別のパスへディレクトリを移動する関数です。移動先(dst)にパスを含めず新しい名前だけを指定すると、実質的に「リネーム」として機能します。 使用例 >>> import shutil >>> shutil.move(my_fold

  2. Pythonでファイルを削除する方法をわかりやすく解説

    Pythonでファイルを削除する基本の方法 Pythonでは、標準ライブラリのosモジュールを使うことで、単一のファイルや空のフォルダ(ディレクトリ)を簡単に削除できます。外部ライブラリのインストールは不要で、import osと記述するだけですぐに利用できるのが魅力です。 os.remove() でファイルを削除する たとえば、カレントディレクトリにある my_file.txt というファイルを削除したい場合は、次のように記述します。 >>> import os >>> os.remove(my_file.txt) os.remove() の引数には、削