class dd2{private static readonly double dsr3 = Math.Sqrt(3);// <summary>/// 盛金公式求解一元三次方程,ax^3+bx^2+cx+d=0。/// </summary>/// <param name="a">三次系数</param>/// <param name="b">二次系数</param>/// <param name="c">一次系数</param>/// <param name="d">常系数</param>/// <param name="x1">结果1,为null则没有实根</param>/// <param name="x2">结果2</param>/// <param name="x3">结果3</param>public static void solveEquations(double a, double b, double c, double d, out double? x1, out double? x2, out double? x3,double dTol = 1e-9){x1 = null;x2 = null;x3 = null;double A = b * b - 3 * a * c;double B = b * c - 9 * a * d;double C = c * c - 3 * b * d;double delta = B * B - 4 * A * C;if (IsZero(A, dTol) && IsZero(B, dTol)){//盛金公式1//方程有一个三重实根if (!IsZero(a, dTol)){double r1 = -b / (3 * a);x1 = x2 = x3 = r1;}else if (!IsZero(b, dTol)){double r2 = -c / b;x1 = x2 = x3 = r2;}else if (!IsZero(c, dTol)){double r3 = -3 * d / c;x1 = x2 = x3 = r3;}else{//无解}}else if (IsZero(delta, dTol)){//盛金公式3//方程有三个实根,其中有一个二重根。//A != 0double K = B / A;x1 = -b / a + K;x2 = x3 = -K / 2;}else if (delta > 0){//盛金公式2//方程有一个实根和一对共轭复根double dsrdelta = Math.Sqrt(delta);double yp = -B + dsrdelta;double yn = -B - dsrdelta;double y1 = A * b + 3 * a / 2 * yp;double y2 = A * b + 3 * a / 2 * yn;const double dZhiShu = 1d / 3;double y1cr = Math.Pow(y1, dZhiShu);double y2cr = Math.Pow(y2, dZhiShu);double dAm3 = 3 * a;x1 = -b - (y1cr + y2cr);x1 /= dAm3;}else{//盛金公式4://方程有三个不相等的实根。//(A>0,-1<T<1)double T = (2 * A * b - 3 * a * B) / (2 * Math.Sqrt(Math.Pow(A, 3)));double theta = Math.Acos(T);double thetaOf1d3 = theta / 3;double cosThetaOf1d3 = Math.Cos(thetaOf1d3), sinTheta_1d3 = Math.Sin(thetaOf1d3);double dx2part = cosThetaOf1d3 + dsr3 * sinTheta_1d3;double dx3part = cosThetaOf1d3 - dsr3 * sinTheta_1d3;double dsrA = Math.Sqrt(A);double dAm3 = 3 * a;x1 = -b - 2 * dsrA * cosThetaOf1d3;x2 = -b + dsrA * dx2part;x3 = -b + dsrA * dx3part;x1 /= dAm3;x2 /= dAm3;x3 /= dAm3;}}/// <summary>/// num是否为0.(由于double本身的精度问题)/// </summary>/// <param name="num"></param>/// <param name="dTol"></param>/// <returns></returns>public static bool IsZero(double num,double dTol){return Math.Abs(num) <= dTol;}}

参考资料:

盛金公式(盛金公式_百度百科)

C# 盛金公式 求解一元三次方程相关推荐

  1. 用盛金公式求解一元三次方程

    解一元三次方程一般用盛金公式求解,算法高效且求出来的解精确.     百度百科关于盛金公式有如下解释: 盛金公式 Shengjin's Formulas 一元三次方程aX^3+bX^2+cX+d=0, ...

  2. 盛金公式解一元三次方程_盛金公式解一元三次方程

    Module Shengjin_mod Implicit None contains Function Cubic_equation(Co) Result (X) !盛金公式求解一元三次方程 !默认浮 ...

  3. 盛金公式解一元三次方程_【国际数学竞赛】高次方程求根

    对于一元二次方程 ,我们由求根公式可得: . 对于一元三次方程 ,我们有 卡尔丹公式法和盛金公式法.不过公式比较冗长.不易计算,但我们还是有方法计算的,那么如果是一元四次.一元五次甚至更高呢? 遇到高 ...

  4. 盛金公式解一元三次方程_一元三次方程解法(卡尔丹公式法盛金公式法)

    卡尔丹公式法 特殊型一元三次方程 X^3+pX+q=0 (p.q∈R) 判别式Δ=(q/2)2+(p/3)3 卡尔丹公式 X1=(Y1)(1/3)+(Y2)(1/3) X2= (Y1)(1/3)ω+( ...

  5. 盛金公式(一元三次方程的解)

  6. 一元三次方程-盛金公式求解

    原理参考-百度百科(http://baike.baidu.com/link?url=eA-bEvbcOBM2XmA4rzIG-lgci4MQdQcr7lCzCHBW-qG-qcPaDNovXp_jYx ...

  7. MATLAB实现一元三次方程求解/盛金公式

    MATLAB实现一元三次方程求解/盛金公式 一元三次方程求解中,1945年卡尔丹诺把冯塔纳的三次方程求根公式发表出来,但该公式形式比较复杂,直观性也较差.1989年范盛金对一元三次方程求解进行了深入的 ...

  8. 一元三次方程求解(盛金公式)

    一元三次方程求解(盛金公式) #include<iostream> #include<cmath> #include<iomanip> using namespac ...

  9. NOIP 2001 一元三次方程求解(二分||盛金公式)

    题目描述 有形如:ax3+bx2+cx+d=0这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝 ...

最新文章

  1. Centos7 下安装python3及卸载
  2. RGPNET: 复杂环境下实时通用语义分割网络
  3. lua代码格式化工具_FFLUA——C++嵌入Luaamp;扩展Lua利器
  4. whoosh----索引|搜索文本类库
  5. 69道Java Spring 面试笔试题
  6. 2022-01-24
  7. 计划策略的配置参数(2)
  8. OpenCV imwrite
  9. 我对DevOps的理解
  10. Flowable 数据库表结构 ACT_GE_PROPERTY
  11. Python 中如何自动导入缺失的库?
  12. node mysql 查询_Node.js使用mysql进行查询详解
  13. C# Chart详细解析
  14. java俄罗斯方块程序设计报告_java课程设计实验报告俄罗斯方块
  15. 数据驱动型企业的海外服务器管理实践
  16. 20.SPDY_QUIC_HTTP2_HTTP3
  17. 一加8 pro 刷入 kali Hunter
  18. 分段函数的期望和方差_2020考研数学一大纲
  19. 李彦宏偷换概念还是危言耸听?
  20. layer-list的作用和使用方法

热门文章

  1. sendgrid html text,在Node.js中的SendGrid的“发件人”字段中添加名称
  2. 使用smtp协议发送邮件
  3. 龙芯平台安装Visual Studio Code(VSCode)
  4. css实现视频文字特效
  5. HTML网页设计:六、列表
  6. Openwrt pppoe demand拨号问题
  7. Qt焦点事件 setFocusPolicy
  8. httpd的MPM工作模式
  9. Typescript泛型与implements子句
  10. js获取元素下的第一级子元素