/*** @author Along* @desc 一元三次方程,二次方程,和一次方程求解工具类*/
public class EquationCalculation {/* 计算一元三次方程最大实根* 一元三次方程(ax3+bx2+cx+d=0)的盛金公式解题法* 输入:参数a,b,c,d* 1):当A=B=0时,方程有一个三重实根;* 2):当Δ=B^2-4AC>0时,方程有一个实根和一对共轭虚根,只处理实根;* 3):当Δ=B^2-4AC=0时,方程有三个实根,其中有一个两重根;* 4):当Δ=B^2-4AC<0时,方程有三个不相等的实根。* 返回 : 所有根中大于0的最大值,不存在大于0的值时方程无有效解或有误,返回异常*/public static double solveCubic(double a, double b, double c, double d)  throws ArithmeticException{double t1=0,t2=0,t3=0;if (a != 0) {double A = b * b - 3 * a * c; // A=b*b-3acdouble B = b * c - 9 * a * d; // B=bc-9addouble C = c * c - 3 * b * d; // C=c*c-3bddouble D = B * B - 4 * A * C; // 判别式D=B*B-4*A*Cif (A == 0 && B == 0) {//当A=B=0时,盛金公式1: t1=t2=t3=-b/(3a)=-c/b=-3d/ct1 = -c / b;t2 = t1;t3 = t1;}else{if (D > 0) {/** 当D=B^2-4AC>0时,盛金公式2:t1=(-b-(Y1)^(1/3)-(Y2)^(1/3))/(3a);* t2,t3=(-2b+(Y1)^(1/3)+(Y2)^(1/3))/(6a)±i3^(1/2)((Y1)^(1/3)-(Y2)^(1/3))/(6a),* 其中Y1,Y2=Ab+3a(-B±(B^2-4AC)^(1/2))/2,* 因i^2=-1,故t2和t3为虚根,忽略不使用*/double Y1 = A * b + 3 * a * (-B + Math.sqrt(D)) / 2;double Y2 = A * b + 3 * a * (-B - Math.sqrt(D)) / 2;// Math.pow(a,b)使用时a不能为负数,分情况判断计算if(Y1<0) {Y1=-Math.pow(Math.abs(Y1), 1.0 / 3);}else {Y1=Math.pow(Math.abs(Y1), 1.0 / 3);}if(Y2<0) {Y2=-Math.pow(Math.abs(Y2), 1.0 / 3);}else {Y2=Math.pow(Math.abs(Y2), 1.0 / 3);}double F =Y1 +Y2;t1 = (-b - F) / (3 * a);t2 = t1;t3 = t1;}else if (D == 0) {/** 当D=B^2-4AC=0时,盛金公式3:t1=-b/a+K; t2=t3=-K/2,* 其中K=B/A,(A≠0)。* 盛金定理:当D=0时,若B≠0,盛金公式3一定不存在A≤0的值,故不需要判断A是否等于0* */double K = B / A;t1 = -b / a + K;t2 = -K / 2;t3 = t2;}else{/** 当D=B^2-4AC<0时,盛金公式4: t1=(-b-2A^(1/2)cos(θ/3))/(3a);* t2,t3=(-b+A^(1/2)(cos(θ/3)±3^(1/2)sin(θ/3)))/(3a),* 其中θ=arccosT,T=(2Ab-3aB)/(2A^(3/2)),(A>0,-1<T<1)。* 盛金定理:当D<0时,盛金公式4一定不存在A<=0的值,且一定不存在T<=-1或T>=1的值,故条件A>0和-1<T<1不需要判断* */double T = (2 * A * b - 3 * a * B) / (2 * Math.sqrt(A * A * A));double q = Math.acos(T);double q3 = q / 3.0;t1 = (-b - 2 * Math.sqrt(A) * Math.cos(q3)) / (3 * a);t2 = (-b + Math.sqrt(A) * Math.cos(q3) - Math.sqrt(A) * Math.sqrt(3) * Math.sin(q3)) / (3 * a);t3 = (-b + Math.sqrt(A) * Math.cos(q3) + Math.sqrt(A) * Math.sqrt(3) * Math.sin(q3)) / (3 * a);}}//返回多个结果中大于0的最大值,若都小于0,则返回0double jg[]={t1,t2,t3};Arrays.sort(jg);if(jg[2] < 0){//方程无大于等于0的有效实根,返回0throw new ArithmeticException("方程无大于等于0的有效实根!");}else{return jg[2];}}else{//a=0时,为一元二次方程,调用一元二次方程求根函数return solveQuadratic(b,c,d);}}/* 计算一元二次方程最大实根* 一元三次方程(ax2+bx+c=0)的公式解题法* 输入:参数a,b,c* 1):当Δ=b^2-4ac<0时,方程有无实根;* 2):当Δ=b^2-4ac=0时,方程有两个相同的根为-b/2a;* 3):当Δ=b^2-4ac<0时,方程有两个根为(-b±(b^2-4ac)^(1/2))/(2a)。* 返回 : 所有根中大于0的最大值根,不存在大于0的值时方程无有效解或有误,返回异常*/public static double solveQuadratic(double a,double b,double c) throws ArithmeticException{double t1=0,t2=0;if(a!=0){double A = b * b - 4 * a *c;if(A < 0){//方程无实根,返回0throw new ArithmeticException("方程无实根!");}else if(A == 0){t1=t2= -b/(2*a);}else{t1= (-b + Math.pow(A, 1.0/2)) / (2 * a);t2= (-b - Math.pow(A, 1.0/2)) / (2 * a);}//返回多个结果中大于0的最大值,若都小于0,则返回0double jg[]={t1,t2};Arrays.sort(jg);if(jg[1] <= 0){//方程无大于等于0的有效实根,返回0throw new ArithmeticException("方程无大于等于0的有效实根!");}else{return jg[1];}}else{//一元一次方程return solveLinear(b,c);}}/* 计算一元一次方程实根* 一元一次方程(ax+b=0)的公式解题法* 输入:参数a,b* 当a!=0,且b!=0时,x=-b/a;* 当b=0时,x=0;* 返回 : 大于0的实根,不存在大于0的值时方程无有效解或有误,返回异常*/public static double solveLinear(double a,double b) throws ArithmeticException{double t1=0;if(b == 0){//方程等式无意义,返回0throw new ArithmeticException("方程等式无意义!");}else {if(a!=0){t1=-b/a;if(t1 < 0){//方程无大于等于0的有效实根,返回0throw new ArithmeticException("方程无大于等于0的有效实根!");}else{return t1;}}else{//a=0且b!=0,方程等式不成立,返回异常信息throw new ArithmeticException("方程等式不成立!");}}}
}

Java解一元一次方程,一元二次方程,一元三次方程相关推荐

  1. 解一元二次方程lisp_lisp语言编写lisp程序解二元一次方程组和一元二次方程组应该怎么做​...

    附上相关程序,请审核. ;-------------------------解二元一次方程组------------------------ (defun 1y1c (a c) (if (/= a 0 ...

  2. logit方程怎么写_家长也能看懂的“一元一次方程解法”,请大家收藏给孩子看!...

    开篇之前,先说个事,今天收到了头条的通知,原创申请没有成功,有点懊恼,和妻子抱怨了下,妻子跟我说,先别说你的文章写的怎么样,关键是我看都看不懂,更别说有没兴趣看了,俗话说"当局者迷,旁观者清 ...

  3. 程序员数学(3)--一元一次方程

    点此查看全部文字教程.视频教程.源代码 本文目录 1. 为什么要用方程 2. 一元一次方程 3. 等式的性质 4. 解一元一次方程 4.1 合并同类项 4.2 移项 4.3 去括号 4.4 去分母 5 ...

  4. 如何解一元一次方程视频_初中数学一元二次方程,注重基础,实例解析考点

    暑假已经过去了一半了,对于即将上九年级的学生来说,这个暑假应该也是在学习中度过的吧,毕竟还有一年的时间就要中考了,中考是学生时代第一个比较重要的节点,更多的学生和家长也是为了能够进入重点高中,积极努力 ...

  5. java解有虚根的一元二次方程(超简单代码)

    解一元二次方程最核心的问题就是分情况讨论方程有无解以及有几个解. 以下是我概括出的几种情况: 1.判断当a,b,c都为0时的情况: 2.判断当a,b为0,c不为0的情况: 3.判断当a为0,b,c不为 ...

  6. Java解一元二次方程和四则运算

    目录 一.Java解一元二次方程 运行结果 思路解析 二.Java四则运算 运行结果 思路解析 一.Java解一元二次方程 package hello; import java.util.Scanne ...

  7. php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...

    导航:网站首页 > 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 相关问题: 匿 ...

  8. java解一元一次方程

    复旦大学上机题(二) 解方程.给定一个字符串,代表一个一元一次方程.如果有解求解,输出格式"x=数字" ,如果解的个数无穷,输出 "infinite solutions& ...

  9. Python解一元一次方程和一元二次方程,输出数学形式和小数形式

    Python解一元一次方程和一元二次方程,输出数学形式和小数形式 一元一次方程 一元二次方程 完整代码 运行结果 创建函数: def eqt(c,b,a=0): 其中,a.b.c分别是二次项系数.一次 ...

最新文章

  1. RAC环境下的备份与恢复(四)
  2. spring:注解@Resource,实现引用类型的赋值
  3. WINCE R3 QQ下载地址
  4. 工业交换机常见问题汇总!
  5. python 判断时间是否大于6点_python中判断时间间隔的问题
  6. FPGA同步复位设计代码
  7. mysql id自动增长_MySQL中的6种约束,你掌握了几种?
  8. 设计模式-----桥接模式(Bridge Pattern)(转)
  9. MATLAB创建三对角线矩阵-211103
  10. python selenium下载电子书
  11. 某程序员吐槽:刚过试用期就被辞退,理由竟是不转发朋友圈!
  12. 数模学习第三天--微分方程(药物分布与排除)
  13. KeilC51_v960版201905((含汉字补丁,STC15说明书,stc-isp-15xx-v6.86S).7z
  14. 台式计算机usb口不识别鼠标,总算找到无法识别usb鼠标设备怎么办
  15. padding在css中是什么意思,padding
  16. Cadence Orcad Capture CIS 如何替换元器件所有信息
  17. islide 安装 PPT崩溃问题
  18. C++面向对象实验(四)
  19. 【已解决】海康威视MFC综合示例(C++ 官网Demo)采用VS2019编译异常如何解决?
  20. 爱立信诠释网络社会:物联网的奇思妙想如何转变为现实

热门文章

  1. 图像分类篇——AlexNet详解
  2. undefined reference to `vtkRenderingVolumeOpenGL_AutoInit_Destruct()',`vtkRenderingVolumeOpenGL_Auto
  3. Seata 极简入门
  4. “serve with message ‘spawn vue-cli-service ENOENT”的解决办法
  5. DeepHPV:一个用于预测HPV整合人类基因位点的深度学习模型
  6. html转pdf 图片跨域问题解决
  7. 深度残差网络(ResNet)浅析
  8. 大数据、人工智能如何助力市场监管?专家们这样说
  9. WordPress站点通过ReadmorJS实现展开阅读全文
  10. 人工智能领域6大关键创新,AI可以用在哪些领域?