3次方程式 x3+px+q=0 の解を求める方法として、カルダノの公式がある。
wを1の3乗根の一つとして、
x=3√(-q/2+√(q3/27+q2/4))+3√(-q/2-√(q3/27+q2/4))
x=3√(-q/2+√(q3/27+q2/4))*w+3√(-q/2-√(q3/27+q2/4))*w2
x=3√(-q/2+√(q3/27+q2/4))*w2+3√(-q/2-√(q3/27+q2/4))*w
と、あまりにもグロテスクな姿をしている。しかも、
(x-1)(x-2)(x+3)=x3-7x+6=0
を解くのにさえ、
x=3√(-3+√(-343/27+9))+3√(-3-√(-343/27+9))
=3√(-3+10√3*i/9)+3√(-3-10√3*i/9) (iは虚数単位)
(これは計算機では、2.0000・・・・で返される。)
そこで、これもスッキリとは言えないが、カルダノの公式よりは処理しやすいものとして、三
角法を利用して、3次方程式 x3-3rx+4s=0 を満たす3解は、t=arcsin(2s√r/r2) とおき、
x=2√r*sin((t+2kπ)/3) (k=0,1,2) で済む。
先の例 x3-7x+6=0 では、r=7/3、s=3/2 から、t=1.0004195167554963460・・・
x=2√r*sin((t+2kπ)/3) (k=0,1,2) を計算させることで、
x=2*√r*sin(t/3)=1.0000000000・・・
x=2*√r*sin((t+2π)/3)=2.0000000000・・・
x=2*√r*sin((t+4π)/3)=-3.0000000000・・・
が素直に現れる。
らすかるさんからのコメントです。(平成29年10月30日付け)
2次の項がある場合や虚数解を持つ場合などを含めて、私のサイトにあります。
GAI さんからのコメントです。(平成29年10月30日付け)
既に、こんな公式を編み出してあったのですね。三角法を利用した公式では虚数解を持つ
場合でもコンピュータはちゃんと反応して、正しい3つの解(虚数解も含めて)を出力してくれ
ますね。記述されている部分の
・p2>q3 の場合(虚数解を持つ場合)
u={p+√(p2-q3)}^(1/3), v={p-√(p2-q3)}^(1/3) (u、vは実数)とおくと、
実数解は、(u+v-2a)/6、虚数解は、-{(u+v+4a)±i(u-v)√3}/12
の所では、vの部分は、 v=-{-p+√(p2-q3)}^(1/3) としなくていいんでしょうか?
私のPARIのソフトでの確認では、この式にしてもらっておくと、ピタリ望みの実数解が出力
されますが・・・?
らすかるさんからのコメントです。(平成29年10月30日付け)
q>0の場合は、v=-{-p+√(p2-q3)}^(1/3) とすると、{ }内が負になってしまいますので、
{ }内が負にならないようにするならば、
q≧0のとき、v={p-√(p2-q3)}^(1/3)
q<0のとき、v=-{-p+√(p2-q3)}^(1/3)
と場合分けする必要がありますね。
PARI/GPならば、 v=sign(q)*abs(p-sqrt(p2-q3))^(1/3) とするとよいと思います。
GAI さんからのコメントです。(平成29年10月31日付け)
らすかるさんの3次方程式での万能三角法での解法を参考に、4次方程式を解く流れを
プログラムしてみました。(→ 計算結果)