关于一元三次方程的一些事

· · 算法·理论

安利一下我的博客

定义

如果一个整式方程经过整理后只有一个未知数,并且未知数的最高次项等于 3,这样的方程称作一元三次方程。

一元三次方程是形如 ax^3+bx^2+cx+d=0(a \ne 0) 的方程,其中 a,b,c,d 分别称作三次项系数,二次项系数,一次项系数和常数项。同样地,我们称函数 y=ax^3+bx^2+cx+d(a \ne 0) 为三次函数。

例 1:观察下列方程,它们是一元三次方程吗?

解析:3. 5. 是,1. 2. 4. 不是。因为 1. 不满足整式方程;2. 没有说 a \ne 0;3. 因为 \sqrt{a^2+1} \ge 1,所以隐含了三次项系数不为 0 的条件;4. 化简后是 6x^2+4x+1=0,最高次项为 2;5. 化简后是 3x^3+7x^2+5x+1=0,是一元三次方程。

求解一元三次方程

研究一个代数问题,可以按照从特殊到一般的方法层层递进。

配立方法

对于一元二次方程,我们可以把它配成 (x+h)^2=\frac{k}{a} 的形式,如果我们可以把一元三次方程配成 (x+h)^3=\frac{k}{a} 的形式,那么问题也就迎刃而解了。

但是所有的一元三次方程都可以使用配立方法吗?

例2:尝试使用配立方法解如下方程:

解析:

对于第一个:

\\ x^3+3\cdot x^2 \cdot 2+3 \cdot x \cdot 2^2 +8 &= -1 \\ (x+2)^3 &= -1 \\ x &= -3 \end{aligned}

但是对于第二个方程,无论如何都无法使用配立方法求解。

考虑什么样的方程可以使用配立方法求解?

尝试展开 (x+h)^3=\frac{k}{a},可得 ax^3+3ahx^2+3ah^2x+ah^3-k=0,与方程 ax^3+bx^2+cx+d=0 做比较,可得

b=3ah \\ c=3ah^2 \\ d=ah^3-k \end{cases}

因而得到数量关系 b^2-3ac=0。因此,只要 b^2-3ac=0,那么这个方程就可以直接使用配立方法求解。

例3:判断如下的方程是否可以直接使用配立方法求解。

解析:分别计算三个方程的 b^2-3ac 即可。

对于第一个方程,b^2-3ac=36-33 \ne 0,所以不行;

对于第二个方程,b^2-3ac=144-144 = 0,所以可以;

对于第一个方程,b^2-3ac=48-48 = 0,所以可以。

因式分解法

如果我们能够很容易地看出来方程的一个根,那么可以考虑把这个一元三次方程“降次”,变成一元二次方程然后求解。

例4: 在实数范围内解下列方程。

解析: 对于第一个方程,代入 x=-1,可得左式 =-4+9+x-6=0,所以 x=-1 是原方程的一个根,所以原方程必然有一个因式为 x+1

考虑凑出 x+1,可得 4x^3+4x^2+5x^2+5x-6x-6=0,即 4x^2(x+1)+5x(x+1)-6(x+1)=0,提出公因式 x+1,可得 (4x^2+5x-6)(x+1)=0,最终可以因式分解成 (4x-3)(x+2)(x+1)=0

所以原方程的三个实数根分别为 x_1=\frac{3}{4},x_2=-2,x_3=-1

对于第二个方程,可以看出 x=1 是原方程的根,所以原方程可以因式分解成 (x^2+7x+12)(x-1)=0,进而因式分解成 (x+3)(x+4)(x-1)=0

所以原方程的三个实数根分别为 x_1=-4,x_2=-3,x_3=1

对于第三个方程,可以试出 x=2 是原方程的根,所以原方程可以因式分解成 (3x^2+8x+16)(x-2)=0。该式子不能继续因式分解了。

所以原方程的唯一实数根为 x=2

卡尔丹诺公式

先考虑一种特殊形式的三次方程:x^3+px+q=0。这样的方程缺少二次项。

接下来就是处理这个方程比较神奇的地方:令 x=u+v。(假设 u>v

代入可得 (u+v)^3+p(u+v)+q=0

整理可得 u^3+v^3+(3uv+p)(u+v)+q=0

因为 uv 到现在只需满足 x=u+v 这个限制,不妨让它再多满足一个限制 3uv+p=0

如果这样可行,我们可以得到这样的方程:\begin{cases}u^3+v^3=-q \\ uv=-\frac{p}{3}\end{cases}

第二个式子等式两边同时三次方,可得 u^3v^3=-\frac{p^3}{27}

因此可以解得 u^3=-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}},v^3=-\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}

所以 x=u+v=\sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}}+\sqrt[3]{-\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}}

一般三次方程的转化

对于一般的一元三次方程 ax^3+bx^2+cx+d=0 (a \ne 0),都可以转化成以上形式的方程。

考虑令 x=y+m,确定 m 的取值,可以消去二次项。我们先代入 x=y+m

& ax^3+bx^2+cx+d \\= & a(y+m)^3+b(y+m)^2+c(y+m)+d \\= & ay^3+(3am+b)y^2+(3am^2+2bm+c)y+ (am^3+bm^2+cm+d) \end{aligned}

所以令 3am+b=0,即 m=-\frac{b}{3a} 是可以令二次项系数化为 0m

例5:运用以上方法解方程 x^3-3x^2-9x+27=0

首先把它转化成缺项形式,令 m=-\frac{b}{3a}=1,代入 x=y+1 可得

所以 $p=-12,q=16$,代入以上公式,可得 $u=\sqrt[3]{-\frac{16}{2}+\sqrt{\frac{16^2}{4}+\frac{(-12)^3}{27}}}=-2,v=\sqrt[3]{-\frac{16}{2}-\sqrt{\frac{16^2}{4}+\frac{(-12)^3}{27}}}=-2$。 所以原方程的一个根为 $y=u+v=-4$,此时 $x=y+1=-3$。 将原方程进行降次,可得 $(x+3)(x^2-6x+9)=0$,即 $(x+3)(x-3)^2=0$,所以原方程有两个根 $x_1=3,x_2=-3$。

注意以上的公式不能求出一个一元三次方程的所有根,在求出一个根之后,还需要进行降次得到另外的根。

复数的引入

请尝试解方程 x^3-15x-4=0

如果还是使用以上的方法解方程,你会发现这个方程的根是“无意义的”:

u = \sqrt[3]{-\frac{-4}{2}+\sqrt{\frac{(-4)^2}{4}+\frac{(-15)^3}{27}}} = \sqrt[3]{2+\sqrt {-121}} v = \sqrt[3]{-\frac{-4}{2}-\sqrt{\frac{(-4)^2}{4}+\frac{(-15)^3}{27}}} = \sqrt[3]{2-\sqrt {-121}}

但是,对于原方程,容易发现代入 x=4 是满足条件的。

那么是哪里出问题了呢?

假设我们令 i=\sqrt{-1},并定义 i^2=-1,那么我们可以进行如下的变形:

x=u+v &= \sqrt[3]{2+\sqrt {-121}}+\sqrt[3]{2-\sqrt {-121}} \\&= \sqrt[3]{2+11i}+\sqrt[3]{2-11i} \\&= \sqrt[3]{(2+i)^3}+\sqrt[3]{(2-i)^3} \\&= 2+i+2-i \\&= 4 \end{aligned}

神奇!把它展开以后,i 居然消掉了,并且得出了正确的结果。

这启示我们,可能 \sqrt{-1} 不是一种无意义的运算,如果能够在解三次方程的时候假设它是 “有意义” 的,也是没有关系的,因为它能够得出正确的结果。

复数范围内的解

卡尔达诺公式不能求出一个缺项的一元三次方程的所有解,那么是否有可能把这个公式“升级”,使得它能够求出所有解呢?

在复数范围内,对一个数 a 开根,相当于在复数域解方程 x^3-a=0

首先在实数域中可以因式分解:(x-\sqrt[3]{a})(x^2+\sqrt[3]{a}x+{a}^{\frac{2}{3}})=0

然后使用求根公式,x^2+\sqrt[3]{a}x+{a}^{\frac{2}{3}}=0 的两根为

x_{1,2}=\frac{-\sqrt[3]{a}\pm\sqrt{{a}^{\frac{2}{3}}-4{a}^{\frac{2}{3}}}}{2}=\frac{-1\pm\sqrt{3}i}{2}\sqrt[3]{a}

所以在复数域中,令 \omega=\frac{-1+\sqrt{3}i}{2},那么 x^3-a=0 的根为 x_1=\sqrt[3]{a},x_2=\omega \sqrt[3]{a},x_3=\omega^2 \sqrt[3]{a}

我们再回顾一下卡尔达诺公式的推导过程,我们实际上是在解方程 \begin{cases}u^3+v^3=-q \\ uv=-\frac{p}{3}\end{cases},然后第二个式子同时 3 次方,得到了 \begin{cases}u^3+v^3=-q \\ u^3v^3=-\frac{p^3}{27}\end{cases},然后得到了

因此得到了 u^3=-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}},v^3=-\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}

根据以上的推导过程,设 u_1=\sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}},u_2=\omega \sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}},u_3=\omega^2 \sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}}v 同理,这些 u,v 都是满足以上条件的数,那么这个一元三次方程有 9 个根?这显然不正确。

原来在同时三次方的过程中,会导致最终出现增根。例如 u_1,v_2 它满足 u^3v^3=-\frac{p^3}{27},但是不满足 uv=-\frac{p}{3}

舍去增根以后,就只有三个根满足条件了。

x_1 &= u_1+v_1=\sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}}+\sqrt[3]{-\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}} \\ x_2 &= u_2+v_2=\omega \sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}}+\omega^2 \sqrt[3]{-\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}} \\x_3 &= u_3+v_3=\omega^2 \sqrt[3]{-\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}}+\omega\sqrt[3]{-\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}} \end{aligned}

这样我们就得到了一元三次方程的通解了。

盛金公式

用以上的方法解一元三次方程是非常麻烦的。首先我们需要进行代数变形去除掉二次项,然后代入以上的公式。代入以上的公式会导致解的形式可能出现复数,不是很直观,需要进行化简才能得到最终结果。这样对计算机很不友好。如果三次方程的系数比较奇怪,运用以上的公式以后可能都不知道从何化简。

有没有一些更直观的公式呢?接下来我们介绍盛金公式。

对于一般的一元三次方程 ax^3+bx^2+cx+d=0(a \ne 0),规定 \begin{cases} A=b^2-3ac \\ B=bc-9ad \\ C=c^2-3bd \end{cases},判别式 \Delta=B^2-4AC

A=B=0 时,方程有三个相等的实根,x_1=x_2=x_3=-\frac{b}{3a}=-\frac{c}{b}=-\frac{3d}{c}。(盛金公式 1

\Delta>0 时,方程有一个实根,x_1=\frac{-b-(\sqrt[3]{y_1}+\sqrt[3]{y_2})}{3a},其中 y_{1,2}=Ab+3a(\frac{-B \pm \sqrt{B^2-4AC}}{2})。(盛金公式 2

\Delta=0 时,方程有三个实根,x_1=-\frac{b}{a}+K,x_2=x_3=-\frac{K}{2},其中 K=\frac{B}{A}。(盛金公式 3

\Delta<0 时,方程有三个实根,x_1=\frac{-b-2\sqrt{A}\cos{\frac{\theta}{3}}}{3a},x_{2,3}=\frac{-b+\sqrt{A}(\cos{\frac{\theta}{3}}\pm\sqrt 3\sin{\frac{\theta}{3}})}{3a},其中 \theta=\arccos \frac{2Ab-3aB}{2 \sqrt{A^3}}。(盛金公式 4

例6:解以下方程。

解析: 对于第一个方程:a=1,b=0,c=3,d=1,计算得 A=-9,B=-9,C=9,计算 \Delta=405>0,运用盛金公式 2。 计算 y_{1,2}=\frac{3}{2}(9\pm 9\sqrt{5}),所以 x=\frac{-\sqrt[3]{\frac{3}{2}(9+ 9\sqrt{5})}-\sqrt[3]{\frac{3}{2}(9- 9\sqrt{5})}}{3}

对于第二个方程:a=5\sqrt 2,b=-18,c=6\sqrt 2,d=4,计算得 A=144,B=-288\sqrt 2,C=288,计算 \Delta=0,运用盛金公式 3。 计算 K=\frac{B}{A}=-2\sqrt 2,所以 x_1=\frac{18}{5\sqrt 2}-2\sqrt 2=-\frac{\sqrt 2}{5}x_2=x_3=-\frac{-2\sqrt 2}{2}=\sqrt 2

三次方程韦达定理

用求根公式推韦达定理固然可行,但是我们可以用一种更简单的方法。

设一元三次方程 ax^3+bx^2+cx+d 的三根分别是 x_1,x_2,x_3,那么原方程可以分解成 a(x-x_1)(x-x_2)(x-x_3)=0。展开可得 ax^3-a(x_1+x_2+x_3)x^2+a(x_1x_2+x_2x_3+x_3x_1)x-ax_1x_2x_3=0

对比系数可知 \begin{cases}b=-a(x_1+x_2+x_3) \\ c=a(x_1x_2+x_2x_3+x_3x_1) \\ d=-ax_1x_2x_3\end{cases},即 \begin{cases}x_1+x_2+x_3=-\frac{b}{a} \\ x_1x_2+x_2x_3+x_3x_1=\frac{c}{a} \\ x_1x_2x_3=-\frac{d}{a} \end{cases}

运用三次方程韦达定理,我们可以快速解决一些代数问题。

例7:已知 x_1,x_2,x_3 分别为方程 x^3-x^2-1=0 的根,计算 \frac{1+x_1}{1-x_1}+\frac{1+x_2}{1-x_2}+\frac{1+x_3}{1-x_3} 的值。

解析:

&\frac{1+x_1}{1-x_1}+\frac{1+x_2}{1-x_2}+\frac{1+x_3}{1-x_3} \\ =& \frac{2}{1-x_1}-1+\frac{2}{1-x_2}-1+\frac{2}{1-x_3}-1 \\ =& 2\left(\frac{1}{1-x_1}+\frac{1}{1-x_2}+\frac{1}{1-x_3}\right)-3 \\ =& 2\left[\frac{(1-x_2)(1-x_3)+(1-x_1)(1-x_3)+(1-x_1)(1-x_2)}{(1-x_1)(1-x_2)(1-x_3)}\right]-3 \\ =& 2\left[\frac{3+(x_1x_2+x_2x_3+x_3x_1)-2(x_1+x_2+x_3)}{1-x_1x_2x_3+(x_1x_2+x_2x_3+x_3x_1)-(x_1+x_2+x_3)}\right]-3 \end{aligned}

因为 x_1,x_2,x_3 分别为方程 x^3-x^2-1=0 的根,所以

\begin{cases}x_1+x_2+x_3=1 \\ x_1x_2+x_2x_3+x_3x_1=0 \\ x_1x_2x_3=1 \end{cases}

代入原式 = 2 \times(\frac{3+0-2}{1-1+0-1})-3=-5

三次函数的图像与性质

用几何画板画出 f(x)=(x-1)(x-2)(x-3) 的图像如图。

能够发现,一个普通的三次函数有最多 3 个零点(可能有两个或者一个零点),2 个顶点(可能没有顶点),1 个对称中心。如果设这个三次函数的两个顶点为 A(x_1,y_1)B(x_2,y_2)

当三次项系数 a>0 时:

当三次项系数 a<0 时:

顶点

我们知道三次函数 f(x)=ax^3+bx^2+cx+d(a \ne 0) 的导数是 f'(x)=3ax^2+2bx+c。导数反映了一个函数在某一点处的变化率。那么如果一个函数在某一点的变化率等于 0,那么这一点就是原函数的顶点。

那么我们令 f'(x)=3ax^2+2bx+c=0,计算 \Delta=(2b)^2-4\times(3a)\times c=4b^2-12ac

也就是说,当 \Delta>0 时,即 b^2-3ac>0 时,原函数有 2 个顶点;当 \Delta \leq 0 时,即 b^2-3ac \leq 0 时,原函数没有顶点。

如果 \Delta>0,我们能够求出函数顶点的两个横坐标:

x_{1,2}=\frac{-b \pm \sqrt{b^2-3ac}}{3a}

顺便我们也求出来了原函数存在两个顶点的充要条件,就是 b^2-3ac>0。求出顶点,单调性啥的就很好说了。

对称中心

一个三次函数的对称中心就是两个顶点的中点。如果我们代入公式,计算

\frac{x_1+x_2}{2} = -\frac{b}{3a}

看起来和二次函数的对称轴公式很像。把对称中心的横坐标求出来,代入原函数就是对称中心的纵坐标了。

计算一元三次方程的近似根

在计算近似根前的操作

我们计算近似根,首先要知道这个方程的根的分布是什么样的。为了论述简单,我们只考虑三次项系数为正数的情况,如果是负数,那么可以先让等式两边同时乘以 -1 即可。

我们不妨先把顶点求出来,拿出公式:

x_{1,2}=\frac{-b \pm \sqrt{b^2-3ac}}{3a}

零点存在性定理:设函数是 [a,b] 上的连续函数,且存在不等式 f(a)f(b)<0,则在 (a,b) 上,至少存在一个数 x ,能够使得 f(x)=0 成立。

至此我们只需要解决在一个区间上有且只有一个零点的情况了。

二分法

二分法是求近似根比较基础的方法,易于理解。

原理:零点存在性定理。

步骤:首先选取一个区间 [a,b],要求函数在区间 [a,b] 已经被确定有且仅有一个零点,并提前预设一个精度 \varepsilon

  1. [a,b] 的中点 m=\frac{a+b}{2}
  2. 如果 [a,b] 的精度已经满足要求(也就是 |b-a|<\varepsilon),那么 m 就可以作为我们要求的近似根。否则比较 f(a)f(m)0 的大小关系。
    • 如果 f(a)f(m)>0,令 a \leftarrow m
    • 如果 f(a)f(m)<0,令 b \leftarrow m
  3. 重复 1. 2. 的操作即可。

牛顿迭代法

牛顿迭代法是求近似根较为常用的方法,其特点是方法简单,收敛速度快。但前提是能够知道原函数的导数。每迭代计算一次,牛顿迭代法结果的有效数字将增加一倍。

原理

对于一个函数 f(x),其导数 f'(x) 的几何意义之一是函数 f(x) 上的点 (x,f(x)) 切线方程的斜率。

所以对于函数上的一个点 (x_0,f(x_0)),我们能够写出它的切线方程:f'(x_0)=\frac{y-f(x_0)}{x-x_0},这个方程与 x 轴的交点为 (x_0-\frac{f(x_0)}{f'(x_0)},0),如果我们令 x_1=x_0-\frac{f(x_0)}{f'(x_0)},那么点 (x_1,f(x_1)) 相较于 (x_0,f(x_0)) 会更接近函数的零点。如图所示。浅蓝色为 f(x) 的图像。

步骤

步骤就很简单了,对于区间 [a,b],取 x_0=\frac{a+b}{2}(这个 x_0 只要在区间内且 f'(x_0) 不为 0 即可)。

然后每次计算:

x_n=x_{n-1}-\frac{f(x_{n-1})}{f'(x_{n-1})}

一直迭代下去即可得到精确的答案。

例8:分别用二分法、牛顿迭代法求方程 x^3-3x+1=0(0,1) 之间的近似根。

解析:以下表格是用二分法的过程

迭代次数 a b m f(m) 新区间
0 0 1 0.5 -0.375 [0,0.5]
1 0 0.5 0.25 0.2656 [0.25,0.5]
2 0.25 0.5 0.375 -0.0723 [0.25,0.375]
3 0.25 0.375 0.3125 0.0930 [0.3125,0.375]

迭代 3 次只能保证小数点后 2 位的精度。

在牛顿迭代法中,我们计算 f'(x)=3x-3。这个是使用牛顿迭代法的结果。

迭代次数 x_n f(x_n) f'(x_n) x_{n+1}
0 0.500000 -0.375000 -2.250 0.333333
1 0.333333 0.037037 -2.667 0.347222
2 0.347222 -0.000365 -2.638 0.347296
3 0.347296 -3.7×10^{-8} -2.638 0.347296

迭代 3 次即能获得小数点后 6 位的精度。效率较高。