Решение кубического уравнения

Формулу Кардано для решения кубического уравнения не учат ни в школе, ни даже на первом курсе мехмата МГУ. Между тем она не намного сложнее формулы для решения квадратного уравнения, вывести ее ничего не стоит, причем не нужно ничего запоминать, чтобы вывести ее при необходимости еще один раз. При этом кубические уравнения на практике возникают очень часто — например, для вычисления собственных чисел и векторов матрицы $3\times 3$, которая реализует преобразование трехмерного пространства, надо решить ee характеристическое уравнение третьей степени.

Кубическое уравнение в общем случае записывается так: $$ ax^3 + bx^2 + cx + d = 0. $$ Упростим уравнение. Во-первых, разделив уравнение на $a$, можно считать коэффициент при $x^3$ равным единице. Перепишем уравнение в виде $$ x^3 + ax^2 + bx + c = 0. $$ Во-вторых, делая замену $x = x' + s$, можно избавиться от коэффициента $a$ при второй степени $x$: $$ \begin{array}{l} (x'+s)^3 + a(x'+s)^2 + b(x'+s) + c = 0 \\ x'^3 + (3s + a)x'^2 + \ldots = 0. \end{array} $$ Достаточно положить $s = -a/3$. В результате общее кубическое уравнение сводится к виду $$ x^3 + ax + b = 0. $$ Главный трюк при решении этого уравнения состоит в том, что мы делаем замену $$ x = u + v, $$ что позволяет нам перейти от одного уравнения с одним неизвестным к системе из двух уравнений с двумя неизвестными. Такой переход, казалось бы, от простого к сложному позволит нам легко решить уравнение.

Сделав эту замену, получим: $$ \begin{array}{l} (u+v)^3 + a(u+v) + b = 0, \\ u^3 + 3 u^2 v + 3 u v^2 + v^3 + a(u + v) + b = 0, \\ u^3 + 3 uv(u + v) + v^3 + a(u + v) + b = 0, \\ u^3 + v^3 + b + (u + v)(3uv + a) = 0. \end{array} $$

Теперь разобьем полученное уравнение на две части: $$ [u^3 + v^3 + b] + [(u + v)(3uv + a)] = 0. $$ Сумма равна нулю, если оба слагаемых равны нулю, значит, для нахождения одного решения достаточно решить систему уравнений: $$ \left\{ \begin{array}{l} u^3 + v^3 + b = 0 \\ (u + v)(3uv + a) = 0 \end{array} \right. $$ Если в исходном уравнении $b\ne 0$, то $x=0$ не является решением. Поскольку $x=u+v$, то второе уравнение системы можно сократить на $(u+v)$. Получим: $$ \left\{ \begin{array}{l} u^3 + v^3 + b = 0 \\ 3uv + a = 0 \end{array} \right. $$ Выразим $v$ через $u$ из второго уравнения и подставим в первое уравнение: $$ \left\{ \begin{array}{l} u^3 - a^3/(27u^3) + b = 0 \\ v = -a/(3u) \end{array} \right. $$

Сделав замену $u^3 = y$ в первом уравнении, мы получим квадратное уравнение относительно $y$: $$ \begin{array}{l} y - a^3/(27y) + b = 0, \\ 27y^2 + 27by - a^3 = 0. \end{array} $$ Решаем последнее квадратное уравнение: $$ \begin{array}{l} D = 27^2 b^2 + 4\cdot 27 a^3 \\ y = (-27b \pm \sqrt{D})/54 \end{array} $$ Поскольку нам достаточно найти хотя бы одно решение, то выберем знак $+$ в формуле (если выбрать знак $-$, то после всех подстановок в обратном порядке мы получим те же самые решения): $$ y = (-27b + \sqrt{D})/54 $$ Здесь квадратный корень — это либо вещественное, либо чисто мнимое комплексное число, в зависимости от знака дискриминанта, если мы рассматриваем исходное уравнение с вещественными коэффициентами. Если изначально мы рассматриваем уравнение с комплексными коэффициентами, то выбираем любой из двух комплексных корней из дискриминанта.

Вспомним, что мы сделали замену $$ u^3 = y. $$ В поле комплексных чисел у каждого числа $y$ есть ровно 3 кубических корня: $$ \begin{array}{l} u_k = y^{1/3}\cdot{} r^k, \quad \text{где}\ k=0,1,2\\ r = \cos(2\pi/3) + \sin(2\pi/3)i \end{array} $$ Здесь $r$ — кубический корень из единицы, порождающий циклическую группу корней из единицы порядка 3 в поле комплексных чисел.

Делая обратные замены, вычисляем все 3 корня $х_k$, $k=0, 1, 2$ кубического уравнения: $$ \begin{array}{l} v_k = -a/(3u_k), \\ x_k = u_k + v_k,\quad k=0,1,2 \end{array} $$

Пример

Найдем корни уравнения $$ x^3 - x - 1 = 0 $$ (это очень важное уравнение, возникающее, например, совершенно неожиданно в программировании при реализации динамического массива, здесь $x$ — знаменатель геометрической прогрессии, с которой растет объем памяти динамического массива, вернее, верхнее ограничение для этого знаменателя из условия того, что освобожденная на предыдущих шагах память может снова быть использована).

По выписанным выше формулам вычисляем: $$ \begin{array}{l} D = 27^2 - 4\cdot 27 = 621 \\ y = (27 + \sqrt{D})/54 \\ r = \cos(2\pi/3) + \sin(2\pi/3)i \\ u_0 = y^{1/3},\quad u_1 = u_0\cdot r, \quad u_2 = u_1\cdot r, \\ v_0 = 1/(3u_0),\quad v_1 = 1/(3u_1),\quad v_2 = 1/(3u_2), \\ x_0 = u_0 + v_0, \quad x_1 = u_1 + v_1, x_2 = u_2 + v_2 \end{array} $$ Вычислим приближенные значения корней уравнения $x_0$, $x_1$, $x_2$, последовательно применяя эти формулы: $$ \begin{array}{l} D = 27^2 - 4\cdot 27 = 621 \\ y = (27 + \sqrt{D})/54 \approx 0.961479103495449, \\ u_0 = y^{1/3} \approx 0.986991206271354, \\ r = \cos(2\pi/3) + \sin(2\pi/3)i \approx -0.5 + 0.866025403784439\cdot i \\ u_1 = u_0\cdot r \approx -0.493495603135677 + 0.854759457942839\cdot i, \\ u_2 = u_1\cdot r \approx -0.493495603135677 - 0.854759457942839\cdot i, \\ v_0 = 1/(3u_0) \approx 0.337726750973392, \\ v_1 = 1/(3u_1) \approx -0.168863375486696 - 0.292479945880538\cdot i, \\ v_2 = 1/(3u_2) \approx -0.168863375486696 + 0.292479945880538\cdot i, \\ x_0 = u_0 + v_0 \approx 1.32471795724475, \\ x_1 = u_1 + v_1 \approx -0.662358978622373 + 0.562279512062301\cdot i, \\ x_2 = u_2 + v_2 \approx -0.662358978622373 - 0.562279512062301\cdot i \end{array} $$ Уравнение имеет один вещественный корень и два комплексно сопряженных. Вещественный корень $x_0 = 1.32471795724475$ правильный, что подтверждает график функции $f(x) = x^3 - x - 1$: