当前位置: 首页> 财经> 股票 > java 求解 一元多次方程

java 求解 一元多次方程

时间:2025/7/14 15:59:51来源:https://blog.csdn.net/weixin_42710740/article/details/142103637 浏览次数:0次

 这里以三元方程为例,三次方程最多三个解。

这里是使用牛顿迭代公式,因为牛顿迭代公式一次只能求一个根,因此需要设置不同的初始值来求出三个根

    public static void main(String[] args) {//ax^2+bx+c=0double a = 1000;double b = 90;double c = 10;double d = 20;List<Double> result = solveEquations3(a, b, c, d);double x = result.get(0);System.out.printf("%.4f%n", a *x * x * x + b * x * x + c * x + d);}public static List<Double> solveEquations3(double a, double b, double c, double d) {//ax^3+bx^2+cx+d=0// 3ax^2 + 2bx + c = 0为ax^3+bx^2+cx+d的顶点List<Double> result = new ArrayList<>();List<Double> result2 = solveEquations2(3*a, 2*b, c);//一个根double x;double x1 = 0;if (result2.isEmpty()) {do {x = x1;x1 = x - (a *x * x * x + b * x * x + c * x + d) / (3 * a * x * x + 2 * b * x + c);} while (!(Math.abs(x1 - x) < 0.0000000000001));result.add(x1);return result;}double topX1 = result2.get(0);double topX2 = result2.get(1);x1 = topX1 - 5;;double x2 = (topX1 + topX2) /2;double x3 = topX2 + 5;;double value1 = a * topX1 * topX1 * topX1 + b * topX1 * topX1 + c * topX1 + d;double value2 = a * topX2 * topX2 * topX2 + b * topX2 * topX2 + c * topX2 + d;//三个解,可能存在同根,这里就不细分了if (value1 >= 0 && value2 <= 0) {do {x = x1;x1 =  x - (a *x * x * x + b * x * x + c * x + d) / (3 * a * x * x + 2 * b * x + c);} while (!(Math.abs(x1 - x) < 0.0000000000001));do {x = x2;x2 = x - (a *x * x * x + b * x * x + c * x + d) / (3 * a * x * x + 2 * b * x + c);} while (!(Math.abs(x2 - x) < 0.0000000000001));do {x = x3;x3 = x - (a *x * x * x + b * x * x + c * x + d) / (3 * a * x * x + 2 * b * x + c);} while (!(Math.abs(x3 - x) < 0.0000000000001));result.add(x3);result.add(x1);result.add(x2);return result;}//一个根if (value1 >= 0 && value2 >= 0) {do {x = x1;x1 = x - (a *x * x * x + b * x * x + c * x + d) / (3 * a * x * x + 2 * b * x + c);} while (!(Math.abs(x1 - x) < 0.0000000000001));result.add(x1);} else  {do {x = x3;x3 = x - (a *x * x * x + b * x * x + c * x + d) / (3 * a * x * x + 2 * b * x + c);} while (!(Math.abs(x3 - x) < 0.0000000000001));result.add(x3);}return result;}public static List<Double> solveEquations2(double a, double b, double c) {// (2 * a * x + b) = 0 为ax^2+bx+c=0 的顶点  x = -b/2aList<Double> result = new ArrayList<>();double topX = -b/(2*a);double x;double v = b * b - 4 * a * c;if (v < 0) {return result;}if (v == 0) {result.add(topX);return result;}double x1 = topX - 5;double x2 = topX + 5;;do {x = x1;x1 = x - (a * x * x + b * x + c) / (2 * a * x + b);} while (!(Math.abs(x1 - x) < 0.0000000000001));do {x = x2;x2 = x - (a * x * x + b * x + c) / (2 * a * x + b);} while (!(Math.abs(x2 - x) < 0.0000000000001));result.add(x1);result.add(x2);return result;}

关键字:java 求解 一元多次方程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: