初中生也能看懂的一元三次方程求解

· · 算法·理论

写在前面

本文参考了这篇文章,原文章思路较为跳跃,有些部分较难理解,因此作者在原文章的基础上进行了补充,侵权紫衫。

在阅读本文前,你需要:

问题引入

对于一般的一元二次方程 f(x)=ax^2+bx+c=0,其求根公式为:

x=\dfrac{-b\pm\sqrt{b^2-4ac}}{2a}

该公式的推导过程为:

\begin{aligned} ax^2+bx+c&=0 \\ \Rightarrow a(x^2+\dfrac{b}{a}x)+c&=0 \\ \Rightarrow a(x^2+\dfrac{b}{a}x+\dfrac{b^2}{4a^2})-a\cdot\dfrac{b^2}{4a^2}+c&=0 \\ \Rightarrow a(x+\dfrac{b}{2a})^2-\dfrac{b^2-4ac}{4a}&=0 \\ \Rightarrow (x+\dfrac{b}{2a})^2&=\dfrac{b^2-4ac}{4a^2} \\ \Rightarrow x+\dfrac{b}{2a}&=\dfrac{\sqrt{b^2-4ac}}{2a} \\ \Rightarrow x&=\dfrac{-b\pm\sqrt{b^2-4ac}}{2a} \end{aligned}

然而,对于一元三次方程,情况则复杂得多。对于一般的一元三次方程 f(x)=ax^3+bx^2+cx+d=0(a \ne 0),我们可以从一元二次方程求根公式的推导中获得启发,通过减少项数来简化三次方程的形式,使其更容易求解。

Tschirnhaus变换

对于一般式的一元三次方程:

f(x)=ax^3+bx^2+cx+d=0(a\ne0)

我们可以类比一元二次方程的处理方法,通过代换 x=y-\dfrac{b}{3a} 来消去二次项,从而将其化为一个没有二次项的三次方程。具体来说,设 x=y-\dfrac{b}{3a},则有:

f(x)=a(y-\dfrac{b}{3a})^3+b(y-\dfrac{b}{3a})^2+c(y-\dfrac{b}{3a})+d=0

展开后可以得到一个没有二次项的三次方程。由于展开该式较为繁琐且没有思维难度,所以此处省略,读者可以尝试自行展开。至于为什么是利用 x=y-\dfrac{b}{3a},我们可以从以下几个角度思考。

代数角度

对于一般式的一元三次方程 f(x)=ax^3+bx^2+cx+d=0(a\ne0),我们可以通过代数方法来变换。首先,我们在方程的两侧同时除以 a,得到:

x^3+\dfrac{b}{a}x^2+\dfrac{c}{a}x+\dfrac{d}{a}=0

我们令 x=y+m,带入到原方程中,得到:

(y+m)^3+\dfrac{b}{a}(y+m)^2+\dfrac{c}{a}(y+m)+\dfrac{d}{a}=0

展开得到:

y^3+(3m+\dfrac{b}{a})y^2+(3m^2+\dfrac{2bm}{a}+\dfrac{c}{a})y+(m^3+\dfrac{bm^2}{a}+\dfrac{cm}{a}+\dfrac{d}{a})=0

观察上式,二次项系数为 3m+\dfrac{b}{a},为了消去二次项,我们令其为 0,即 3m+\dfrac{b}{a}=0,解得 m=-\dfrac{b}{3a}。因此,通过代换 x=y-\dfrac{b}{3a},我们可以将一般式的一元三次方程化为一个没有二次项的三次方程。

函数角度

从函数角度来看,一元三次方程的图像是一个三次函数的曲线。对于一个三次函数 f(x)=ax^3+bx^2+cx+d,我们消去二次项的操作其实是将函数对称中心移动到原点的过程。我们不难通过求导得到其对称中心是 (-\dfrac{b}{3a},f(-\dfrac{b}{3a}))。故而令 x=y-\dfrac{b}{3a},可以将对称中心移动到原点,从而简化三次方程的形式。

::::align{center} 图 1 ::::

如图,红色线为原函数 f(x)=ax^3+bx^2+cx+d,紫色线为函数 f(x)=a(y-\dfrac{b}{3a})^3+b(y-\dfrac{b}{3a})^2+c(y-\dfrac{b}{3a})+d

::::info[如何求导求出三次函数的对称中心] 我们知道,三次函数的对称中心就是该函数的拐点,也是使该函数的二阶导数为 0 的点。

我们先求函数 f(x)=ax^3+bx^2+cx+d 的一阶导数 f'(x)=3ax^2+2bx+c,再对 f'(x) 求导得到二阶导数 f''(x)=6ax+2b

f''(x)=6ax+2b=0 时,此时 (x,f(x)) 即为原函数的对称中心。容易解得 x=-\dfrac{b}{3a}。 ::::

卡尔丹公式

降次

通过 Tschirnhaus 变换,我们可以将一般式的一元三次方程化为一个没有二次项的三次方程。设 x=y-\dfrac{b}{3a},则有:

a(y-\dfrac{b}{3a})^3+b(y-\dfrac{b}{3a})^2+c(y-\dfrac{b}{3a})+d=0

化简得到:

ay^3 + \dfrac{3ac - b^2}{3a}y + \dfrac{2b^3 - 9abc + 27a^2d}{27a^2} = 0

两边同时除以 a 后,我们令:

p = \dfrac{3ac - b^2}{3a^2},q = \dfrac{2b^3 - 9abc + 27a^2d}{27a^3}

得到:

y^3+py+q=0

其中 pq 是与原方程系数相关的常数。这个方程被称为“简化三次方程”或“缺项三次方程”。

构造二次方程

接下来我们令 y=u+v,则有:

(u+v)^3+p(u+v)+q=0

化简得到:

u^3+v^3+(3uv+p)(u+v)+q=0

由于 uv 两者是我们设出来的,故而我们可以添加额外的约束条件来消元。我们可以令 3uv+p=0,即 uv=-\dfrac{p}{3}。于是我们就有了:

\begin{cases} u^3+v^3=-q \\ uv=-\dfrac{p}{3} \end{cases}

对上式变一下形,并令 U=u^3V=v^3,我们可以得到:

\begin{cases} U+V=-q \\ UV=-\dfrac{p^3}{27} \end{cases}

然后我们由韦达定理可知,UV 是以下一元二次方程的两个根:

t^2+qt-\dfrac{p^3}{27}=0

::::info[推导] 韦达定理:若一元二次方程 ax^2+bx+c=0 的两个根分别为 x_1x_2,则 x_1+x_2=-\dfrac{b}{a}x_1x_2=\dfrac{c}{a}

由于我们假设了 UV 是一个一元二次方程 at^2+bt+c=0 的两个根,为了方便,我们将 a 定为 1,那么 U+V=-bUV=c,带入可得:t^2+qt-\dfrac{p^3}{27}=0。 ::::

在复数域中开立方根

接下来我们套用一元二次方程的求根公式就可以得到 UV 的值。由一元二次方程的求根公式可得:

\begin{cases} U=u^3=\dfrac{-q+\sqrt{q^2+\frac{4p^3}{27}}}{2}=-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}} \\ \\ V=v^3=\dfrac{-q-\sqrt{q^2+\frac{4p^3}{27}}}{2}=-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}} \end{cases}

于是我们就有了:

u=\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}},v=\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}}

但问题还没那么简单,由代数基本定理可知,在复数域内,一元 n 次方程一定有 n 个根。那么,在复数域内,一元三次方程一定有三个根。

本原单位根

接下来,我们引入本原单位根的概念来更好地帮助读者了解复数域中开立方根的操作。对于形如 x^n-1=0 的方程,设 z 为方程的解,有 z^n=1

在复数域中,复数 z 的三角形式表示法为:

z=r(\cos\theta+i\sin\theta)=re^{i\theta}

::::info[复数的三角形式表示法] 我们知道,复数由实部和虚部组成,z=x+iy(z \in \mathbb C,x,y \in \mathbb R)。所以对于任意一对确定的 (x,y),这个复数也是确定的。那么容易联想到平面直角坐标系也具有这样的特征,于是可以用平面直角坐标系上的点来描述一个复数。

我们将用于描述复数的平面直角坐标系称为复平面x 轴表示实数,y 轴表示虚数。那么对于复平面上的一个点 (x,y),这个点所代表的复数即为 x+iy

:::align{center} 图 2 :::

如图,根据三角函数容易推出两条绿色线段的长度,易知红色坐标,即该复数点在复平面上的坐标。所以该复数点的值为 r \cos \theta + ir \sin \theta=r(\cos \theta + i \sin \theta)。根据欧拉公式,该复数点的值等于 re^{i\theta}

::::

由棣莫弗公式得:

z^n=r^n[\cos(n\theta)+i\sin(n\theta)]=r^ne^{in\theta}=1

由于 z^n=1,所以该数虚部为 0,于是就有:

r^n\cos(n\theta)=1,r^n\sin(n\theta)=0

由于 r^ne^{in\theta}=1,所以 (re^{i\theta})^n=1。接下来同时对等式两边取模。由于乘积的模等于模的乘积,所以左边 |(re^{i\theta})^n|=|re^{i\theta}|^n。由于模长的非负性,且显然 r \ne 0,所以 r>0。又因为 |e^{i\theta}|=|\cos \theta+i \sin \theta|,所以 e^{i\theta} 其实就是一个实部为 \cos \theta,虚部为 i \sin \theta 的虚数,在复平面上表示如下图:

::::align{center} 图 3 ::::

易得该复数的模长即为 1。所以 |e^{i\theta}|=1|re^{i\theta}|^n=|r|^n=r^n。而等式右侧 |1|=1,所以推出 r^n=1,即 r=1。代入 r^n\cos(n\theta)=1,r^n\sin(n\theta)=0 可得,\cos(n\theta)=1,\sin(n\theta)=0,当且仅当 n\theta=2k\pi(k \in \mathbb Z) 时成立。所以 \theta=\dfrac{2k\pi}{n}

由于 \cos 函数和 \sin 函数的周期是 2\pi,所以我们只需要研究 0 \le \theta < 2\pik \in [0,n) 即可。

综上:

r=1,\theta=\dfrac{2k\pi}{n},k=0,1,2,...,n-1

不难得到 z=e^{i\frac{2k\pi}{n}} 都是 x^n-1=0 的根。我们设 \omega=e^{i\frac{2k\pi}{n}},如果对于 x^n-1=0 的所有根有以下的表达式:

z_i=\omega^i,i=0,1,2,...,n-1

像这样满足 \omega^n=1,而且对于任意小于 n 的正整数 m 都有 \omega^m\ne1,称为方程 x^n-1=0 的一个 n 次本原单位根。

使用本原单位根求解

方程的所有解都是 \omega 的幂,也就是说本原单位根可以生成该方程所有的解。三次本原单位根为 \omega=e^{i\frac{2\pi}{3}}=-\dfrac{1}{2}+\dfrac{\sqrt3}{2}i,则 \omega^2=e^{i\frac{4\pi}{3}}=-\dfrac{1}{2}-\dfrac{\sqrt3}{2}i(可以通过在复平面上表示出这两个点得出)。于是我们就有了三次方程的三个解 1\omega\omega^2

回到卡尔丹公式本身上来,我们设其中一个 uu_1,令 \omega 为三次本原单位根:

\omega=e^{i\frac{2\pi}{3}}=-\dfrac{1}{2}+\dfrac{\sqrt3}{2}i,\omega^2=e^{i\frac{4\pi}{3}}=-\dfrac{1}{2}-\dfrac{\sqrt3}{2}i

那么 u 的三个值为:

u_1,u_1\omega,u_1\omega^2

对应的 v 分别为:

v_1,v_1\omega^2,v_1\omega

写出三次方程的完整求根公式

最终,缺项方程 y^3 + py + q = 0 的三个根为:

\begin{cases} y_1 = u_1 + v_1 \\ y_2 = u_1 \omega + v_1 \omega^2 \\ y_3 = u_1 \omega^2 + v_1 \omega \end{cases}

由于 u_1v_1=-\dfrac{p}{3},我们记 u_1=\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}},那么 v_1=\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}},此时满足条件,得到满足约束条件的三种配对方式:

u_1=\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}},v_1=\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}}

u_2=\omega\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}},v_2=\omega^2\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}}

u_3=\omega^2\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}},v_3=\omega\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}}

其中 \omega=e^{i\frac{2\pi}{3}}=-\dfrac{1}{2}+\dfrac{\sqrt3}{2}i,故而方程 y^3 + py + q = 0 的三个根为:

\begin{cases} y_1 = \sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} + \sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} \\ \\ y_2 = \omega\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} + \omega^2\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} \\ \\ y_3 = \omega^2\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} + \omega\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} \end{cases}

代回原变量 x = y - \dfrac{b}{3a} 得到原方程的三个根:

x_k = y_k - \dfrac{b}{3a} \quad (k = 1, 2, 3) \begin{cases} x_1 = \sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} + \sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} - \dfrac{b}{3a} \\ \\ x_2 = \omega\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} + \omega^2\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} - \dfrac{b}{3a} \\ \\ x_3 = \omega^2\sqrt[3]{-\dfrac{q}{2}+{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} + \omega\sqrt[3]{-\dfrac{q}{2}-{\sqrt{\dfrac{q^2}{4}+\dfrac{p^3}{27}}}} - \dfrac{b}{3a} \end{cases}

最后我们把 p = \dfrac{3ac - b^2}{3a^2},q = \dfrac{2b^3 - 9abc + 27a^2d}{27a^3},\omega=-\dfrac{1}{2}+\dfrac{\sqrt3}{2}i 带入即可得到最后的结果。