一、一元四次方程求解

一元四次方程求根公式,百科:        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

1.网上搜到的求解代码

python求解代码,见:https://github.com/Larissa1990/Solve-cubic-and-quartic-equations-with-one-unknown/blob/master/Equations.py   经测试, 有bug,求解不正确

说明,见:https://www.cnblogs.com/larissa-0464/p/11706131.html

2. 一元四次方程在线求解工具:https://www.osgeo.cn/app/s2085   可用来验证求解程序是否正确;

3. 一元四次方程, 沈天珩简化求根公式,  具体公式 详见百科链接;

import math
import cmath
import numpy as npdef cal_quartic_ik(args_list):a, b, c, d, e = args_listD = 3*pow(b,2) - 8*a*cE = -pow(b, 3) + 4*a*b*c - 8*pow(a, 2)*dF = 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)*eA = D**2 - 3*FB = D*F - 9*pow(E, 2)C = F**2 - 3*D*pow(E, 2)delta = B**2 - 4*A*C  # 总判别式if (D == 0) & (E == 0) & (F == 0):""" 四重实根"""x = -b/(4*a)return 1, [x]if (A == 0) & (B == 0) & (C == 0) & (D*E*F != 0):""" 两个实根,其中一个三重实根"""x1 = (-b*D + 9*E)/(4*a*D)x234 = (-b * D - 3 * E) / (4 * a * D)return 2, [x1, x234]if (E == 0) & (F == 0) & (D != 0):""" 一对二重根"""if D>0:  # 根为实数x13 = (-b + math.sqrt(D))/(4*a)x24 = (-b - math.sqrt(D)) / (4 * a)return 2, [x13, x24]if D<0:  # 根为虚数# x13 = (-b + cmath.sqrt(D))/(4*a)# x24 = (-b - cmath.sqrt(D)) / (4 * a)return 0, 0if (A*B*C != 0) & (delta == 0):""" 一对二重实根 """x3 = (-b - np.sign(A*B*E)*math.sqrt( D - B/A))/(4*a)x4 = (-b - np.sign(A*B*E)*math.sqrt( D - B/A))/(4*a)if A*B>0 :  # 其余两根为不等实根x1 = (-b + np.sign(A*B*E)*math.sqrt( D - B/A) + math.sqrt( 2*B/A) )/(4*a)x2 = (-b + np.sign(A * B * E) * math.sqrt(D - B / A) - math.sqrt(2 * B / A)) / (4 * a)return 4, [x1, x2, x3, x4]if A*B < 0:  # 其余两根为共轭虚根# x1 = (-b + np.sign(A * B * E) * math.sqrt(D - B / A) + cmath.sqrt(2 * B / A)) / (4 * a)# x2 = (-b + np.sign(A * B * E) * math.sqrt(D - B / A) - cmath.sqrt(2 * B / A)) / (4 * a)return 2,  [x3, x4]if delta > 0:"""" 两个不等实根和一对共轭虚根"""z1 = A*D + 3*(( -B + math.sqrt(delta))/2.0)z2 = A * D + 3 * ((-B - math.sqrt(delta)) / 2.0)# print """ z1 =  """, z1# print """ z2 =  """, z2# print """ abs(z1) =  """, abs(z1)# print """ abs(z2) =  """, abs(z2)z = D**2 - D*(np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0)) + \(np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0))**2 - 3*Ax1 = (-b + np.sign(E)*math.sqrt((D + np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0))/3.0)+ math.sqrt((2*D - np.sign(z1)*pow(abs(z1), 1.0/3.0) - np.sign(z2)*pow(abs(z2), 1.0/3.0)+ 2*math.sqrt(z))/3.0))/(4*a)x2 = (-b + np.sign(E)*math.sqrt((D + np.sign(z1)*pow(abs(z1), 1.0/3.0) + np.sign(z2)*pow(abs(z2), 1.0/3.0))/3.0)- math.sqrt((2*D - np.sign(z1)*pow(abs(z1), 1.0/3.0) - np.sign(z2)*pow(abs(z2), 1.0/3.0)+ 2*math.sqrt(z))/3.0))/(4*a)# 虚根忽略return 2, [x1, x2]if delta < 0:if E == 0:if (D>0) & (F>0) :""" 四个不等实根 """x1 = (-b + math.sqrt(D + 2*math.sqrt(F))) / (4 * a)x2 = (-b - math.sqrt(D + 2 * math.sqrt(F))) / (4 * a)x3 = (-b + math.sqrt(D - 2 * math.sqrt(F))) / (4 * a)x4 = (-b - math.sqrt(D - 2 * math.sqrt(F))) / (4 * a)return 4, [x1, x2, x3, x4]else:""" 两对不等共轭虚根 """# 虚根忽略print " 两对不等共轭虚根 "return 0, 0else:if (D > 0) & (F > 0):""" 四个不等实根 """theta = math.acos((3*B-2*A*D)/(2*A*math.sqrt(A)))y1 = (D - 2*math.sqrt(A)*math.cos(theta/3.0))/3.0y2 = (D + math.sqrt(A)*(math.cos(theta/3.0) + math.sqrt(3)*math.sin(theta/3.0)))/3.0y3 = (D + math.sqrt(A) * (math.cos(theta / 3.0) - math.sqrt(3) * math.sin(theta / 3.0))) / 3.0x1 = (-b + np.sign(E) * math.sqrt(y1) + ( math.sqrt(y2) + math.sqrt(y3)))/(4*a)x2 = (-b + np.sign(E) * math.sqrt(y1) - (math.sqrt(y2) + math.sqrt(y3))) / (4 * a)x3 = (-b - np.sign(E) * math.sqrt(y1) + (math.sqrt(y2) - math.sqrt(y3))) / (4 * a)x4 = (-b - np.sign(E) * math.sqrt(y1) - (math.sqrt(y2) - math.sqrt(y3))) / (4 * a)return 4, [x1, x2, x3, x4]else:""" 两对不等共轭虚根 """# 虚根忽略print " 两对不等共轭虚根 "return 0, 0

经测试,求解正确;

程序中,忽略了复数解,返回的解,均是实数解; 可作为一基础求解工具;

一、一元三次方程求解

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

def cal_cubic_ik(args_list):a, b, c, d = args_listA = b**2 - 3*a*cB = b*c - 9*a*dC = c**2 - 3*b*ddelta = B**2 - 4*A*C  # 总判别式if (A == 0) & (B == 0):""" 一个三重实根"""x = -b/(3*a)return 1, [x]if delta > 0:"""" 一个实根和一对共轭复根"""y1 = A*b + 3*a*(( -B + math.sqrt(delta))/2.0)y2 = A*b + 3*a*(( -B - math.sqrt(delta))/2.0)print """ y1 =  """, y1print """ y2 =  """, y2print """ abs(y2) =  """, abs(y2)# 虚根忽略x1 = (-b - (np.sign(y1)*pow(abs(y1), 1.0 / 3.0) + np.sign(y2)*pow(abs(y2), 1.0 / 3.0)) )/ (3 * a)  # 负数直接开立方根会报错return 1, [x1]if delta == 0:"""三个实根,其中有一个二重根 """K = B/float(A)x1 = -b/float(a) + Kx23 = -K/2.0return 2,  [x1, x23]if delta < 0:""" 三个不等实根 """T = (2*A*b - 3*a*B)/(2*math.sqrt(pow(A, 3)))theta = math.acos(T)x1 = (-b - 2 * math.sqrt(A) * math.cos(theta / 3.0)) / (3 * a)x2 = (-b + math.sqrt(A)*(math.cos(theta/3.0)) + math.sqrt(3)*math.sin(theta/3.0))/(3*a)x3 = (-b + math.sqrt(A) * (math.cos(theta / 3.0)) - math.sqrt(3) * math.sin(theta / 3.0)) / (3 * a)return 3, [x1, x2, x3]

程序中,忽略了复数解,返回的解,均是实数解;

一元三次、四次方程求解相关推荐

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

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

  2. Fast Planner——KinodynamicAstar::estimateHeuristic()中一元三次方程和一元四次方程求解

    Fast Planner的代码中,前端路径搜索时需要评估路径的启发成本(函数KinodynamicAstar::estimateHeuristic),涉及到一元四次方程和一元三次方程的求解计算.Kin ...

  3. 高中数学必修一:一元三次函数快速求解(全新思维)

    作者:vxbomath 今天给同学们分享一个一元三次函数专题,一元三次函数和导函数在一起考察一个填选小题,这种题一旦出现让同学们还是比较头疼.通过今天的分享让大家多高中数学函数专题,让你同学们,在遇到 ...

  4. [数值计算-5]:一元二次非线性方程求解 - 解析法直接求解

    作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article ...

  5. 一元三次函数的最值计算

    题目要求: 设计一个类,该类可以表示一个一元三次函数. 1.该类数据成员包括:函数的参数.变量的取值区间.函数在该区间内的最大值和最小值. 2.该类成员函数包括:求最大值.求最小值. 3.编写一个主程 ...

  6. 一元三次多项式因式分解的两种方法

    参考文献: 张育波. 一元三次多项式因式分解的两种方法[J]. 初中数学教与学, 2007, No.160(04):42.

  7. 一元二次不等式和一元三次不等式解法的思考

    说起一元二次不等式的解法真的不记得了,只是大概记得和一元二次方程的两个根有关系. (x+1)(x-3)<0 这个不等式的集解如果熟悉解法的同学可能一秒就知道答案了,-1<x<3 对于 ...

  8. c语言 最大公约数 最小公倍数的编程,C语言三种算法求解最大公约数与最小公倍数...

    C语言三种算法求解最大公约数与最小公倍数 最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实 ...

  9. Comsol学习笔记1:三种瞬态求解器的选择

    最近在求解一个瞬态问题,计算结果不收敛.研究了一下comsol提供的三种瞬态求解器. 1,向后差分公式BDF 稳定性是它的最大优势.它一种使用向后差分公式的隐式求解器,其精度在一阶(也称为向后欧拉法) ...

  10. c语言编程非线性方程求解,c语言计算机编程三种方法求解非线性方程

    c语言计算机编程三种方法求解非线性方程 本 科 专 业 学 年 论 文题 目:非线性方程求解比较姓 名: 何 娟 专 业: 计算机科学技术系 班 级: 08 级本科(2)班 指 导 老 师: 刘 晓 ...

最新文章

  1. 启用Gzip压缩(IIS)提高客户端网站访问速度
  2. gcnew 与 new 的区别
  3. 1035 插入与归并 (25 分)(c++)
  4. 基础篇--Java IO--概览
  5. Profibus-DP光端机产品功能特点及技术参数详解
  6. Windows via C/C++ 学习(8)CreateProcess 函数
  7. iptables和SELinux漫谈
  8. TensorFlow进阶:CNN对CIFAR10图像分类
  9. 如何用计算机模拟光的传播,菲涅尔计算全息干涉图的制作与模拟再现.doc
  10. 计算机网络属于什么结构,计算机网络体系结构是一种什么结构
  11. Photoshop下载
  12. 51、Vue 单页面应用
  13. 关于鸿蒙系统 JS UI 框架源码的分析
  14. 学习Java的第五天 | 定义方法 | 引用数据类型——类 | 访问权限-修饰符 | 全局变量与局部变量 | toString | 构造方法 | 方法重载
  15. Node课程(3,2,1,8,3)
  16. 房子并发什么意思_周公解梦:梦见建房子是什么意思
  17. 用EXCEL统计分段数据的个数
  18. SAP FI/CO 顾问面试问题1(转帖)
  19. TorchDrug教程--预训练的分子表示
  20. 倒计时软件下载,桌面倒计时便签软件推荐

热门文章

  1. 基于深度学习的图像修复—心中无码
  2. ORA-22285: 对不存在的目录或文件进行 FILEOPEN 操作 ORA-06512: 在 SYS.DBMS_LOB, line 523 ORA-06512: 在 line 6 查看错误堆
  3. 律动荆棘皇冠 Crown of Thorns
  4. 迅雷手机版苹果版_最新手机迅雷iOS版下载安装教程
  5. Windows照片查看器
  6. php 许愿墙 阶段案例_PHP+jQueryUI实现许愿墙功能、贴便签、贴标签功能(案例)...
  7. 【雷达】毫米波雷达和激光雷达
  8. 北航计算机专硕学硕区别,专硕是什么意思啊?和学硕一样吗?
  9. 下载Youtube单个视频和播放列表的方法详细教程
  10. net stop sharedaccess命令 2009-1-15 11:10