文章目录

  • 一、一元四次方程求根算法
  • 二、一元三次方程求根算法
  • 总结

一、一元四次方程求根算法

天珩公式:https://baike.baidu.com/item/%E4%B8%80%E5%85%83%E5%9B%9B%E6%AC%A1%E6%96%B9%E7%A8%8B%E6%B1%82%E6%A0%B9%E5%85%AC%E5%BC%8F/10721996?fr=aladdin

代码如下(示例):

/*** 沈天珩简化四次方求根公式算法。* 返回根的数组,数组长度: 0 - 4* @param {*} param0 a,b,c,d 分别为四、三、二、一次项系数;e为常数项* @returns {Number[]}*/
function cal_quartic_ik ([a, b, c, d, e]){let a_Quadruple = 4 * a;let D = 3 * pow(b, 2) - 8 * a * c,E = - pow(b, 3) + a_Quadruple * b * c - 8 * pow(a, 2) * d,F = 3 * pow(b, 4) + 16 * pow(a, 2) * pow(c, 2) - 16 * a * pow(b, 2) * c + 16 * pow(a, 2) * b * d - 64 * pow(a, 3) * e;let A = D ** 2 - 3 * F,B = D * F - 9 * pow(E, 2),C = F ** 2 - 3 * D * pow(E, 2);let delta = B ** 2 - 4 * A * C; //总判别式//四重实根if (isZero(D) && isZero(E) && isZero(F)) return [-b / a_Quadruple]//两个实根,其中一个三重实根if (isZero(A) && isZero(B) && isZero(C) && !isZero(D * E * F)) {let m = a_Quadruple * D, n = -b * D;return [(n + 9 * E) / m, (n - 3 * E) / m]}//一对二重根,有可能没有根if (isZero(E) && isZero(F) && !isZero(D)) {if (D > 0) return [(-b + sqrt(D)) / a_Quadruple, (-b - sqrt(D)) / a_Quadruple]if (D < 0) return []}//四个根if (!isZero(A * B * C) && isZero(delta)) {let temp = sign(A * B * E) * sqrt(D - B / A),sqrt_BA = sqrt(2 * B / A);//其余两根为不等实根,四个实根 if (A * B > 0)          return [(-b + temp + sqrt_BA) / a_Quadruple, (-b + temp - sqrt_BA) / a_Quadruple, (-b - temp) / a_Quadruple]//其余两根为共轭虚根if (A * B < 0) return [(-b - temp) / a_Quadruple]}//两个不等实根和一对共轭虚根if (delta > 0) {let z1 = A * D + 3 * ((-B + sqrt(delta)) / 2.0);let z2 = A * D + 3 * ((-B - sqrt(delta)) / 2.0);let z = D ** 2 - D * (sign(z1) * pow(abs(z1), One_third) + sign(z2) * pow(abs(z2), One_third)) + (sign(z1) * pow(abs(z1), One_third) + sign(z2) * pow(abs(z2), One_third)) ** 2 - 3 * A,m = (-b + sign(E) * sqrt((D + sign(z1) * pow(abs(z1), One_third) + sign(z2) * pow(abs(z2), One_third)) / 3.0)),n = sqrt((2 * D - sign(z1) * pow(abs(z1), One_third) - sign(z2) * pow(abs(z2), One_third) + 2 * sqrt(z)) / 3.0);return [(m + n) / a_Quadruple, (m - n) / a_Quadruple]}if (delta < 0) {if (!(D > 0) && (F > 0))  return []//四个不等实根if (isZero(E)) {let sqrt_F_two = 2 * sqrt(F);return [(-b + sqrt(D + sqrt_F_two)) / a_Quadruple,(-b - sqrt(D + sqrt_F_two)) / a_Quadruple,(-b + sqrt(D - sqrt_F_two)) / a_Quadruple, (-b - sqrt(D - sqrt_F_two)) / a_Quadruple]}//四个不等实根let sqrt_A = sqrt(A);let theta_one_third = acos((3 * B - 2 * A * D) / (2 * A * sqrt_A)) / 3.0,y1 = (D - 2 * sqrt_A * cos(theta_one_third)) / 3.0,y2 = (D + sqrt_A * (cos(theta_one_third) + sqrt(3) * sin(theta_one_third))) / 3.0,y3 = (D + sqrt_A * (cos(theta_one_third) - sqrt(3) * sin(theta_one_third))) / 3.0,y4 = sign(E) * sqrt(y1);return [(-b + y4 + (sqrt(y2) + sqrt(y3))) / a_Quadruple,(-b + y4 - (sqrt(y2) + sqrt(y3))) / a_Quadruple,(-b - y4 + (sqrt(y2) - sqrt(y3))) / a_Quadruple,(-b - y4 - (sqrt(y2) - sqrt(y3))) / a_Quadruple]       }return []
}

二、一元三次方程求根算法

盛金公式:https://baike.baidu.com/item/%E7%9B%9B%E9%87%91%E5%85%AC%E5%BC%8F#9

/*** 三次方求根公式算法。* 返回根的数组,数组长度: 0 - 3* @param {*} param0 a,b,c 分别为三、二、一次项系数;d为常数项* @returns {Number[]}*/
function cal_cubic_ik([a, b, c, d]){let a_Threefold = 3 * a;let A = b ** 2 - a_Threefold * c,B = b * c - 9 * a * d,C = c ** 2 - 3 * b * d,delta = B ** 2 - 4 * A * C;  //总判别式// 一个三重实根if (isZero(A) && isZero(B)){return [-b / (a_Threefold)]}// 一个实根和一对共轭复根if (delta > 0){let y1 = A * b + a_Threefold * (( -B + sqrt(delta)) / 2.0),   y2 = A * b + a_Threefold * (( -B - sqrt(delta)) / 2.0);return [(-b - (sign(y1) * pow(abs(y1), One_third) + sign(y2) * pow(abs(y2), One_third)) ) / a_Threefold ]}//三个实根,其中有一个二重根if (isZero(delta)){let K = B / float(A);return [- b / float(a) + K, - K / 2.0]}//三个不等实根if (delta < 0){let theta = acos((2 * A * b - 3 * a * B) / (2 * sqrt(pow(A, 3))));m = sqrt(A),n = cos(theta / 3.0),q = sqrt(3) * sin(theta / 3.0);return [(- b - 2 * m * n) / a_Threefold, (- b + m * (n + q)) / a_Threefold, (- b + m * (n - q)) / a_Threefold]}
}

总结

提示:以上算法均返回实数解,且去掉了重根。
需导入的头文件

const {pow, sqrt, sign, abs, sin, cos, acos} = Math;
const One_third = 1.0 / 3.0;function isZero (value, ep = EP) {return Math.abs(value) < ep;
}

javaScript一元四次、三次方程求根算法相关推荐

  1. python牛顿迭代法求根例题_python求根算法

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! scipy官网:https:www.scipy.org这个库是python科学计 ...

  2. 通用求根算法zeroin_Modern Robotics运动学数值解法及SVD算法(C matlab)

    前言 原著之前CSDN已经注销,新CSDN Galaxy_Robot的博客_CSDN博客-机器人,C语言,我是谁?领域博主​blog.csdn.net 这半个月的业余时间研究了机器人逆运动学的解析解法 ...

  3. python实现一元三次方程求根-二分法

    今天我的一位学妹拿了一道编程题来问我,我当时没时间,然后她找了答案,叫我帮忙运行验证一下,我当时做了一些修改,觉得实现过程还不错,所以记录一下,分享出来学习学习. 题目:有形如ax3+bx2+cx+d ...

  4. php 位深度,javascript - 流程图获取深度,求各位算法高手帮帮忙

    最近这个问题困扰我半天,我有以下json数据 [ {"prev_node": "0000000000000005","next_node": ...

  5. 算法 |【实验5.3】:一元三次方程的根-连续区间的二分搜索求近似解

    文章目录 一元三次方程的根 1. 题目描述 2. 问题分析与算法设计思路 1)基本思路 2)小心浮点数存储方式的影响 3)如何判断:一个区间是否值得继续搜索 3. 算法实现 4. 运行结果 5. 算法 ...

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

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

  7. python求一元三次方程的根_关于二次、三次、四次方程求解方法讨论

    高次方程求解的一般方法是将高次方程通过配方求解,然后进行次数降解,高次方程转化为容易求解的低次方程. 一元二次方程 求解高次方程,一元二次方程是最为简单的方程.关于一元二次方程 ,通过配方法可以求解: ...

  8. js条件语句,用if...else if....else方程ax2+bx+c=0一元二次方程。求根

    if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码 if...else if... ...

  9. matlab求解一元四次函数,excel数据函数参数是四个吗|求一个简单的一元四次函数的最大值...

    求四次函数的最值 先求导,令导数等于0,求出x的值,判断单调性,将x代入原函数 4次幂的一元函数怎么计算 解析: (1) 四次方程,有通用求根公式. A 此公式复杂,实际使用较麻烦 B 其推导过程中可 ...

  10. Java实现一元二次方程求根问题

    使用系统:Windows10: 使用JDK:Java SE Development Kit 17.0.2: 使用开发环境:eclipse. 一.代码 package Hello; import jav ...

最新文章

  1. Python包管理工具Distribute的安装
  2. 从QQ聊天看51CTO版主专业精神和工作态度!
  3. 推荐系统实践整体化总结
  4. python3.8什么时候出来,【新版本来临!Python 官网宣布,正式发布Python3.8.0!】- 环球网校...
  5. 一篇文章教你学会Java泛型
  6. codeforces contest 1140(D~G)
  7. C#编程-Access数据库的简单应用
  8. Java高级进阶学习资料!Java虚拟机的垃圾回收机制
  9. Smuxi 0.8.10 发布 - IRC 客户端软件
  10. 用友ERP-NC系统 漏洞 NCFindWeb接口任意文件下载
  11. 201671030111 词频统计软件项目报告
  12. 经纬财富:宁波炒白银亏钱7大原因
  13. Fincy APP评测:安全好用的多功能电子钱包
  14. 协同过滤算法的简单理解《推荐系统实践》
  15. 思维导图的分类 利用思维导图绘制学习知识方法介绍
  16. 机器学习常用的五种预测结果评价
  17. Windows10远程桌面无法复制粘贴问题
  18. java订单派单规则_重点解读 | 什么是派单?派单的好处有哪些?
  19. gif截屏工具推荐(ScreenToGif)
  20. 1000张动漫萌妹子次元系人物素材图,可做壁纸头像

热门文章

  1. 关于广告投放系统:竞价策略(2018)
  2. apache设置开机启动启动
  3. ROI Pooling原理
  4. faster rcnn理论讲解
  5. 苹果xsmax有高通基带吗_苹果iPhone 12拆解:确认采用高通骁龙X55基带芯片
  6. Flutter 和 Dart 开发中一些技巧和坑点填坑指南详解
  7. mysql筛选包含某个字符_mysql判断某个字符串是否包含某个字符串的3种方法
  8. 解决微信公共号开发出现 redirect_uri域名与后台配置不一致,错误码10003 错误
  9. 公式冒号是什么意思_冒号是什么意思
  10. 人工智能如何影响5G网络标准?