RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

3次方程式厳密解 まとめ

過去ブログの転載です。

実数係数の3次方程式の厳密解のまとめです。

プログラムで実装する際にカルダノの公式をそのまま代入すると、途中式に虚数が入るので、既存の関数で求めるのは何かと困難であったりします。そのため、解の種類によって場合分けして、計算過程で虚数を使わないようにした方が何かと便利です。

途中式は省いて結果だけ羅列していきます。

 \displaystyle ax^{3}+bx^{2}+cx+d=0

このままでは扱いづらいので、

 \displaystyle p=\frac{3ac-b^{2}}{3a^{2}}
 \displaystyle q=\frac{2b^{3}-9abc+27a^{2}d}{27a^{3}}
として、上の方程式を次の形に変換します。

 \displaystyle y^{3}+py+q=0(ただし \displaystyle y=x+\frac{b}{3a}

これでカルダノの公式を用いることができます。以後、 \displaystyle y_{n}は、 \displaystyle n番目( \displaystyle n=0,1,2)の解 \displaystyle yを表わします。

解のパターンは \displaystyle p,qの値で4通りに分岐します。 \displaystyle p=q=0のときのみ①となり、それ以外の場合は次の判別式で分岐します。

 \displaystyle D=\frac{27q^{2}+4p^{3}}{108}

 \displaystyle D \gt 0のとき②
 \displaystyle D = 0のとき③
 \displaystyle D \lt 0のとき④

符号チェックのときのみ分母の108は無くてもいいですが、どっちみち後の計算でDを使うので、そのままにしておいた方が無難です。

① p=q=0:実数解1個(3重解)の場合

 \displaystyle p=q=0のときのみ、このパターンになります。
 \displaystyle y_{n}=0(3重解)

② D>0:実数解1個 虚数解2個の場合

 \displaystyle D \gt 0のときのパターンです。

 \displaystyle \alpha = \sqrt[3]{-\frac{q}{2}+\sqrt{D}}
 \displaystyle \beta = \sqrt[3]{-\frac{q}{2}-\sqrt{D}}
として、3つの解は次のように表わされます。(注意:この1/3乗は、実数の3乗根ルート(中がマイナスのものはマイナスを外に出せる)を表します。)

 \displaystyle y_{0}=\alpha + \beta
 \displaystyle y_{1}=-\frac{1}{2}(\alpha+\beta)+\frac{\sqrt{3}}{2}(\alpha-\beta)i
 \displaystyle y_{2}=-\frac{1}{2}(\alpha+\beta)-\frac{\sqrt{3}}{2}(\alpha-\beta)i

③ D=0(p≠0またはq≠0):実数解2個(2重解)の場合

 \displaystyle D=0のときのパターンです。

 \displaystyle y_{0}=-2\sqrt[3]{\frac{q}{2}}
 \displaystyle y_{1},y_{2}=\sqrt[3]{\frac{q}{2}}(2重解)

④ D<0:実数解3個の場合

 \displaystyle D \lt 0のときのパターンです。

 \displaystyle \alpha = -\frac{q}{2}
 \displaystyle \beta=\sqrt{-D}
として、3つの解は次のように表わされます。

 \displaystyle y_{n}=2 \sqrt[6]{\alpha^{2}+\beta^{2}} \cos \left( \frac{\arg (\alpha+\beta i)+2n \pi}{3} \right)

 \displaystyle \arg (\alpha+\beta i) \displaystyle \alpha+\beta i偏角です。

atan(y値, x値)を標準で使えるプログラム言語であれば、atan(β, α)とすれば同等の値となります。単純にatan(β/α)だと符号によって誤りますので、注意してください。

以上を踏まえまして \displaystyle y_{n}が求まったら、解 \displaystyle x_{n}は次式で得られます。

 \displaystyle x_{n}=y_{n}-\frac{b}{3a}
これですべての解が計算できましょう。

3次方程式を計算しなければならない場面に遭遇しましたら、ぜひ利用してください。これ全部覚えるのはさすがに大変ですね。