Для кубического полинома есть решения в замкнутой форме , но они не особенно хорошо подходят для численного исчисления.
Я бы сделал следующее для кубического случая: любой кубический полиномимеет по крайней мере один настоящий корень, вы можете легко найти его с помощью метода Ньютона.Затем вы используете дефляция , чтобы получить оставшийся квадратичный полином для решения, см. Мой ответ там о том, как правильно выполнить этот последний шаг.
Одно слово предостережения:если дискриминант близок к нулю, будет численно кратный действительный корень, и метод Ньютона потерпит неудачу.Более того, поскольку в окрестности корня многочлен имеет вид (x - x0) ^ 2, вы потеряете половину значащих цифр (поскольку P (x) будет
Если вы хотите найти корни в данном интервале, проверьте Теорема Штурма .
Более общим (сложным) алгоритмом для решения полиномиального обобщенного алгоритма является алгоритм Дженкинса-Трауба .Это явно излишне, но хорошо работает с кубиками.Как правило, вы используете стороннюю реализацию.
Поскольку вы делаете C, использование GSL , безусловно, является вашей лучшей ставкой.
Еще один общий способ - найти собственные значения сопутствующей матрицы с например.сбалансированное разложение QR, или приведение к форме домохозяина.Это подход, принятый GSL.