2016-09-16 3 views
0

Я пытаюсь сделать программу, которая выводит корни данного кубического уравнения. Поэтому я решил сделать версию с использованием кубической формулы (http://www.math.vanderbilt.edu/~schectex/courses/cubic/). Эта формула должна иметь возможность выводить результат одного из корней.Использование кубической формулы для вычисления корней кубического уравнения не работает

Однако, похоже, что это не работает, и я не уверен, что это код или идея, которая является ошибочной. Здесь коэффициенты 1, -6, 11 и -6 должны создавать выход из 1, 2 или 3. Вместо этого выводится NaN. То же самое относится и к другим коэффициентам, которые я пытался использовать. Спасибо за вашу помощь!

public class CubicFormula { 
    public static void main(String[] args) { 
     System.out.println(new CubicFormula().findRoots(1.0, -6.0, 11.0, -6.0)); 
    } 

    public double findRoots(double a, double b, double c, double d) { 
     double p = -(b)/(3*a); 
     double q = Math.pow(p, 3) + (b*c - 3*a*d)/(6*Math.pow(a, 2)); 
     double r = c/(3*a); 

     return Math.cbrt(q + Math.sqrt(Math.pow(q, 2.0) + Math.pow((r - Math.pow(p, 2.0)), 3))) 
       + Math.cbrt(q - Math.sqrt(Math.pow(q, 2.0) + Math.pow((r - Math.pow(p, 2.0)), 3))) + p; 

    } 
} 

ответ

3

С самого ссылки вы упомянули

Одной из причин является то, что мы пытаемся избежать обучая их комплексных чисел. Сложные числа (т. Е. Обработка точек на плоскости в виде чисел) являются более продвинутой темой, лучше всего подходит для более продвинутого курса. Но тогда только номерами, которые нам разрешено использовать в исчислении, являются действительными числами (т. Е. Точки на линии). Это накладывает на нас некоторые ограничения - например, мы не можем взять квадратный корень из отрицательного числа. Теперь формула Кардана имеет тот недостаток, что может приводить такие квадратные корни в промежуточные этапы вычисления, даже если эти числа не отображаются в проблеме или ее ответе.

Эта часть

Math.sqrt(Math.pow(q, 2.0) + Math.pow((r - Math.pow(p, 2.0)), 3)) 

будет в конечном итоге SQRT отрицательного числа, которое является мнимым, но в Java

двойники мир заканчивается время NaN.

+0

В дополнение к отмене мнимых частей для реальных корней корни куба, возможно, должны быть сложными (полярными) корнями в зависимости от варианта используемой формулы. (т. е. 'cbrt (-1)' должно быть '-0.5 + sqrt (3) i' вместо' -1'.) – Mysticial

Смежные вопросы