今天要通过java求解一元三次方程,其Java实现特记录如下,根不完整,但是能保证准确性。
private static double shengjing(double a,double b,double c,double d){
double A = b*b -3.0*a*c;
double B = b*c - 9.0*a*d;
double C = c*c - 3.0*b*d;
if(B*B-4.0*A*C > 0) {
double Y1 = A * b + 3 * a * ((-1.0 * B + Math.sqrt(B * B - 4 * A * C)) / 2.0);
double Y2 = A * b + 3 * a * ((-1.0 * B - Math.sqrt(B * B - 4 * A * C)) / 2.0);
return (-1.0 * b - (((Y1 < 0) ? (-1.0) : 1.0) * Math.pow(Math.abs(Y1), 1.0 / 3.0)
+ ((Y2 < 0) ? (-1.0) : 1.0) * Math.pow(Math.abs(Y2), 1.0 / 3.0))) / (3 * a);
}else {
double T = (2.0*A*b-3.0*a*B)/(2*Math.sqrt(A*A*A));
double o = Math.acos(T);
return (-1.0 * b-2.0*Math.sqrt(A)*Math.cos(o/3.0))/(3.0*a);
}
}
专注 极致 坚持