ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 51005|回复: 62

[分享] 在Excel中解一元三次方程(盛金公式解法)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2008-11-26 09:40 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他结构和算法
一个网友问起在Excel中解一元三次方程的方法,很是费了一番脑筋,数学这个东西很高深莫测,于是乎在网上查阅各种资料,找到了盛金公式,比较好用Excel来转化其算法,特在此与大家分享,有兴趣的朋友略加改造,可以做成自定义函数。

附,盛金公式算法——
一元三次方程aX3bX2cXd=0,(abcdR,且a0)。
重根判别式:
A=b23ac
B=bc9ad
C=c23bd
总判别式:
Δ=B24AC
A=B=0时,盛金公式①
X1=X2=X3=b/(3a)=c/b=3d/c
当Δ=B24AC0时,盛金公式②:
X1=(b3Y13Y2)/(3a)
X23=(2b3Y13Y2±3(3Y13Y2)i)/(6a)
其中Y12=Ab3a(B±(B24AC))/2i2=1
当Δ=B24AC=0时,盛金公式③:
X1=b/aK
X2=X3=K/2
其中K=B/A(A0)
当Δ=B24AC0时,盛金公式④:
X1=(b2Acos(θ/3))/(3a)
X23=(bA(cos(θ/3)±3sin(θ/3)))/(3a)
其中θ=arccosTT=(2Ab3aB)/(2A3)(A0,-1T1)
盛金判别法
①:A=B=0时,方程有一个三重实根
②:当Δ=B24AC>0时,方程有一个实根和一对共轭虚根
③:当Δ=B24AC=0时,方程有三个实根,其中有一个两重根
④:当Δ=B24AC<0时,方程有三个不相等的实根。
盛金定理
b=0c=0时,盛金公式①无意义;当A=0时,盛金公式③无意义;当A0时,盛金公式④无意义;当T<-1或T>1时,盛金公式④无意义。
b=0c=0时,盛金公式①是否成立?盛金公式③与盛金公式④是否存在A0的值?盛金公式④是否存在T<-1或T>1的值?盛金定理给出如下回答:
盛金定理1:A=B=0时,若b=0,则必定有c=d=0(此时,方程有一个三重实根0,盛金公式①仍成立)。
盛金定理2:A=B=0时,若b0,则必定有c0(此时,适用盛金公式①解题)。
盛金定理3:A=B=0时,则必定有C=0(此时,适用盛金公式①解题)。
盛金定理4:A=0时,若B≠0,则必定有Δ>0(此时,适用盛金公式②解题)。
盛金定理5:A0时,则必定有Δ>0(此时,适用盛金公式②解题)。
盛金定理6:当Δ=0时,若B=0,则必定有A=0(此时,适用盛金公式①解题)。
盛金定理7:当Δ=0时,若B≠0,盛金公式③一定不存在A0的值(此时,适用盛金公式③解题)。
盛金定理8:当Δ<0时,盛金公式④一定不存在A0的值。(此时,适用盛金公式④解题)。
盛金定理9:当Δ<0时,盛金公式④一定不存在T≤-1或T≥1的值,即T出现的值必定是-1<T<1。
显然,当A0时,都有相应的盛金公式解题。
注意:盛金定理逆之不成立。如:当Δ>0时,不一定有A0
盛金定理表明:盛金公式始终保持有意义。任意实系数的一元三次方程都可以运用盛金公式直观求解。
以上结论,发表在《海南师范学院学报(自然科学版)》(第2卷,第2期;1989年12月,中国海南。国内统一刊号:CN46-1014)(主编:陈剑辉 副主编:黄国泰 责任编辑:汪一湘),第91—98页。范盛金,一元三次方程的新求根公式与新判别法。(NATURAL SCIENCE JOURNAL OF HAINAN TEACHERES COLLEGE(Hainan Province, China.Vol.2,No. 2;Dec,1989)A new extracting formula and a new distinguishing means on the one variable cubic equation,Fan Shengjin . PP91—98.)

盛金公式解方程.rar

14.46 KB, 下载次数: 1580

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

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2008-12-15 11:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-4-6 16:57 | 显示全部楼层
正在找这类的方法,试了一下,结果还不错。顶一下

[ 本帖最后由 geoLu 于 2010-5-24 16:33 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-4-6 17:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-16 14:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这些值得研究

TA的精华主题

TA的得分主题

发表于 2009-5-16 16:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-19 11:03 | 显示全部楼层
感谢朋友们的关注,欢迎提出批评指正意见!

有朋友问起如何求解多个一元三次方程,其实略加改造,做成自定义函数,就方便使用了。

aX3+bX2+cX+d=0,(a,b,c,d∈R,且a≠0)

如:2X3+3X2+4X+5=0

=ShengJin(2,3,4,5,0)  '返回值:一个实根+一对共轭虚根
=ShengJin(2,3,4,5,1)  '返回值:-1.371134331
=ShengJin(2,3,4,5,2)  '返回值:-6.44328343463185E-02+1.34876101196125i
=ShengJin(2,3,4,5,3)  '返回值:-6.44328343463185E-02-1.34876101196125i
=ShengJin(2,3,4,5,5)  '返回值:#VALUE!


'========以下为代码部分==========
  1. Option Explicit

  2. Function ShengJin(a, b, c, d, v)
  3. On Error Resume Next
  4. Dim e, f, g, h, x1, x2, x3, s$
  5. e = b ^ 2 - 3 * a * c 'A
  6. f = b * c - 9 * a * d 'B
  7. g = c ^ 2 - 3 * b * d 'C
  8. h = f ^ 2 - 4 * e * g 'Δ

  9. If Round(e, 8) = 0 And Round(f, 8) = 0 Then '盛金公式①
  10. x1 = -b / (3 * a)
  11. x2 = -c / b
  12. x3 = -3 * d / c
  13. s = "三重实根"
  14. Else
  15. Select Case Round(h, 10)
  16.   Case Is > 0 '盛金公式②
  17.    Dim x, y
  18.    x = e * b + 3 * a * (-f + Abs(h) ^ 0.5 * Sgn(h)) / 2
  19.    y = e * b + 3 * a * (-f - Abs(h) ^ 0.5 * Sgn(h)) / 2
  20.    x1 = (-b - Abs(x) ^ (1 / 3) * Sgn(x) - Abs(y) ^ (1 / 3) * Sgn(y)) / (3 * a)
  21.    x2 = (-2 * b + Abs(x) ^ (1 / 3) * Sgn(x) + Abs(y) ^ (1 / 3) * Sgn(y)) / (6 * a) & "+" & 3 ^ 0.5 * (Abs(x) ^ (1 / 3) * Sgn(x) - Abs(y) ^ (1 / 3) * Sgn(y)) / (6 * a) & "i"
  22.    x3 = (-2 * b + Abs(x) ^ (1 / 3) * Sgn(x) + Abs(y) ^ (1 / 3) * Sgn(y)) / (6 * a) & "-" & 3 ^ 0.5 * (Abs(x) ^ (1 / 3) * Sgn(x) - Abs(y) ^ (1 / 3) * Sgn(y)) / (6 * a) & "i"
  23.    s = "一个实根+一对共轭虚根"
  24.   Case Is = 0 '盛金公式③
  25.    x1 = -b / a + f / e
  26.    x2 = -f / e / 2
  27.    x3 = -f / e / 2
  28.    s = "三个实根中含一个两重根"
  29.   Case Else '盛金公式④
  30.    Dim tmp3 As Double
  31.    tmp3 = Application.Acos((2 * e * b - 3 * a * f) / (2 * (Abs(e) ^ (3 / 2) * Sgn(e)))) / 3
  32.    x1 = (-b - 2 * Abs(e) ^ 0.5 * Sgn(e) * Cos(tmp3)) / (3 * a)
  33.    x2 = (-b + Abs(e) ^ 0.5 * Sgn(e) * (Cos(tmp3) + 3 ^ 0.5 * Sin(tmp3))) / (3 * a)
  34.    x3 = (-b + Abs(e) ^ 0.5 * Sgn(e) * (Cos(tmp3) - 3 ^ 0.5 * Sin(tmp3))) / (3 * a)
  35.    s = "三个不相等的实根"
  36. End Select
  37. End If

  38. Select Case v '定义函数输出值
  39. Case 0
  40.   ShengJin = s 'v=0,方程解的描述
  41. Case 1
  42.   ShengJin = x1 'v=1,第一个解
  43. Case 2
  44.   ShengJin = x2 'v=2,第二个解
  45. Case 3
  46.   ShengJin = x3 'v=3,第三个解
  47. Case Else
  48.   ShengJin = "#VALUE!" '无法识别的,显示错误值
  49. End Select
  50. End Function
复制代码



[ 本帖最后由 sunya_0529 于 2009-5-19 11:07 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-19 21:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢!学习了!

TA的精华主题

TA的得分主题

发表于 2009-8-6 17:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-6 17:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错,谢谢分享!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 23:19 , Processed in 0.058274 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表