[数学メモ] 高次方程式の解の公式（一般解法）

# 断り書き

* メモです
* 一般的に高次方程式といえば三次以上のことを指すと思いますが、とりあえず二次も。

# 二次方程式

```math
ax^2 + bx + c = 0 \tag{1}
```

## 二次方程式の解の公式

```math
x = \frac{-b \pm \sqrt{ b^2 - 4ac } }{ 2a }
```

## 実装上の注意点

二次方程式の解の公式を単純に実装してしまうと、場合によっては解の精度が悪くなってしまう場合があります。

具体的には、実解があるケースで $4ac$ の絶対値が $b$ の絶対値に比べて非常に小さい場合には $b$ と $\sqrt{ b^2 - 4ac }$ の絶対値が非常に近くなり、解の片方で「桁落ち」が発生してしまいます。

https://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#%E6%A1%81%E8%90%BD%E3%81%A1

> 桁落ち（けたおち、英: cancellation）とは、値がほぼ等しく丸め誤差を持つ数値同士の減算を行った場合、有効数字が減少すること[5][7]。絶対値がほぼ等しく符号が異なる数値どうしの加算の場合も同様。

そのため、まずは「桁落ち」の起きない解 $x_1$ を求めてから、解の関係式からもう一つの解 $x_2$ を求める方法を使います（それ以外の解法もあります）。

```math
x_1 = \frac{-b - sign(b) \sqrt{ b^2 - 4ac } }{ 2a }
```

ここで $sign(b)$ は $b$ が正の場合に $1$ で、負の場合に $-1$ となる関数です（$b$ がゼロの場合には「桁落ち」が起きないので、通常の解の公式を使います）。

もう一つの解 $x_2$ は、解の関係から、以下のように求めます。

```math
x_2 = \frac{ c }{ ax_1 }
```

ちなみに、解の関係は以下の通り。

```math
\begin{align}
ax^2 + bx + c &= 0\\
\Leftrightarrow x^2 + \frac{ b }{ a } x + \frac{ c }{ a } &= 0
\end{align}
```

この時の実数解を $x_1$ , $x_2$ とすると

```math
\begin{align}
(x - x_1)(x - x_2) &= 0\\
x^2 + (- x_1 - x_2) x + x_1 x_2 &= 0
\end{align}
```

ゆえに

```math
\begin{align}
x_1 + x_2 &= - \frac{ b }{ a }\\
x_1 x_2 &= \frac{ c }{ a }
\end{align}
```


# 三次方程式

```math
ax^3 + bx^2 + cx + d = 0
```

## 三次方程式の解法

まず三次の係数の無い式に変形します。

```math
\begin{align}
A &= \frac{b}{a}\\
B &= \frac{c}{a}\\
C &= \frac{d}{a}\\
\end{align}
```

```math
x^3 + Ax^2 + Bx + C = 0 \tag{2}
```

以下のように定義した場合

```math
\begin{align}
P &= B - \frac{A^2}{3}\\
Q &= \frac{2A^3}{27} - \frac{AB}{3} + C\\
\omega &= \frac{ -1 + i\sqrt{3} }{2}\\
M &= \sqrt[3]{ -\frac{Q}{2} + \sqrt{ \frac{Q^2}{4} + \frac{P^3}{27} } }\\
N &= \sqrt[3]{ -\frac{Q}{2} - \sqrt{ \frac{Q^2}{4} + \frac{P^3}{27} } }\\
\end{align}
```

３つの解 $x_0, x_1, x_2$ は

```math
\begin{align}
x_0 &= M + N - \frac{A}{3}\\
x_1 &= \omega M + \omega^2N - \frac{A}{3}\\
x_2 &= \omega^2M + \omega N - \frac{A}{3}\\
\end{align}
```

つまり

```math
x_n = \omega^n M + \omega^{3-n}N - \frac{A}{3}
```

となる。

## 三次方程式の解法のポイント

式(2)に $x = y - \frac{A}{3}$ を代入すると

```math
y^3 + Py + Q = 0
```

と変形できる。
この方程式の解 $y_0, y_1, y_2$ は

```math
\begin{align}
y_0 &= M + N\\
y_1 &= \omega M + \omega^2N\\
y_2 &= \omega^2M + \omega N\\
\end{align}
```

となる。
また、 $\omega ^3 = 1$ です。

### 三次方程式の解法の歴史

三次方程式の解の公式は、 1535 年イタリアの科学者タルターリアが発見した。 しかし、自分の発見を秘密にして、誰にも解けない難問を解く事によって 自分の才能を誇示していた（これは、この時代の風潮らしい）。

同じイタリアの数学者カルダーノは、甘言を弄してタルターリアから 三次方程式の解法を聞き出し、それを発表してしまった。
この事件がきっかけで、 「科学の発見は発見者個人に帰属するものではなく、全ての人が共有するもの」という意識、 「科学の発見の栄誉は、発見者ではなく、発表者に与えられる」というルールが つくられた、らしい（参考文献によると）。

上記の解法は、現在でも「カルダーノの解法」として知られている。

# 四次方程式

```math
x^4 + Ax^3 + Bx^2 + Cx + D = 0 \tag{3}
```

## 四次方程式の解法

式(3)を変形する。

```math
(x^2 + \frac{A}{2}x + \lambda)^2 - \Bigl( x^2(\frac{A^2}{4} + 2\lambda - B) + x(A\lambda - C) + \lambda^2 - D \Bigr) = 0  \tag{3-1}
```

この式は、カッコを展開すると $\lambda$ が消え、先ほどの式と同じになる。
そのため、 $\lambda$ はどんな値であっても問題無い。

そこで

```math
(A\lambda - C)^2 = (\lambda^2 - D)(A^2 + 8\lambda - 4B) \tag{3-2}
```

を満たす $\lambda$ を選ぶことにする。
この式は $\lambda$ の三次方程式になっているので、三次方程式の解の公式（一般解法）で解く事が出来る。
$\lambda$ が式(3-2) を満たすならば、式(3-1) の後半は完全平方式となり、 $\alpha, \beta$ を以下のようにおけば

```math
\begin{align}
\alpha^2 &= (\frac{A^2}{4} + 2\lambda - B)\\
2\alpha\beta &= (A\lambda - C)\\
\beta^2 &= \lambda^2 - D\\
\end{align}
```

つまり

```math
(\alpha x + \beta)^2 = \alpha^2 x^2 + 2\alpha\beta x + \beta^2
```

となり、式(3-1) は

```math
(x^2 + \frac{A}{2}x + \lambda)^2 - (\alpha x + \beta)^2 = 0\\
\Leftrightarrow \quad (x^2 + \frac{A}{2}x + \lambda)^2 = (\alpha x + \beta)^2\\
```

と変形できる。 これは

```math
\begin{align}
x^2 + \frac{A}{2}x + \lambda &= \alpha x + \beta\\
x^2 + \frac{A}{2}x + \lambda &= - ( \alpha x + \beta)
\end{align}
```
の、２つの二次方程式と同じ事になる。

## 四次方程式の解法の歴史

イタリアの数学者カルダーノは 1545 年、４次方程式の一般解法を完成させた。
ちなみに上の解法は、カルダーノの解法では無いようだ。 また、他にも何通りかの解法が存在する。

# 五次方程式の解法

ノルウェーの数学者アーベルが 1824 年、 五次以上の高次方程式の解の公式は存在しない事を証明した。

# 参考文献

* 「共立 数学公式」共立出版
* 「アイザック・アシモフの科学と発見の年表」丸善株式会社