cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 15032|回复: 21

[fx-4800P/5800P系列] [原创]fx-5800P的超强解方程软件

[复制链接]
发表于 2009-9-11 07:52:51 | 显示全部楼层 |阅读模式
计算器程序
程序名称: 超强解方程软件
平台: fx-5800系列 
系统/软件要求:
版本号: 1.0.0
类型: 数学 
作者: zasdfgbnm
大小(K): 50
更新日期: 2010-02-09
描述: 不错的fx-5800P解方程工具,可以方便解方程
已知缺陷: -
源代码: 开源/部分开源
本文讲述的是fx-5800P可编程计算器上的解方程软件。如果想要电脑上使用的具有解方程功能的数学软件,请移步至http://www.cncalc.org/forum-43-1.html

给定一个区间,给定切割细度,可以解出一个方程在给定区间的所有跟。
先来简单介绍一下:
主程序:ROOT
子程序:M-FIND、M-SOLVE
方程存储程序:EQN
方程自变量:X
方程因变量:Y
计算器应用的临时变量:Z、Z[1]、Z[2]……
使用方法:
首先,把方程存在程序EQN中,例如要解cos(a)=0.5,那么就把程序EQN改为:cos(X)-0.5->Y(->是赋值不是一个减号一个大于)
运行主程序,会看到:
(0:SOLVE,1:FIND)+(1:ONE,0:ALL)i?

这是要求你输入一个复数,用它的实部表示是解跟还是找跟,找跟只会找出跟所在的区间,不会解出跟,这样能节省时间,用它的虚部表示是解出(找出)所有的跟还是解出一个跟。默认为0,也就是解出所有跟。
如:要找出所有的跟,输入1即可
然后计算器就会问你几个参数:
START:区间起点
END:区间终点
DELTA X:二分法解方程中的精确度
STEP:切割细度(是什么待会告诉你)
关于切割细度:
该程序的原理如下:
给定切割细度STEP,从区间起点开始,按照切割细度大小把所给区间分成几个小区间,然后判断区间中有没有根(方法就是二分法中的判断法)。例如,若START=0,END=10.5,STEP=1,则得到的小区间为[0,1),[1,2),[2,3),[3,4),……[9,10),[10,10.5]。
结果查看:
进入REG模式查看列表,看Freq,若该项的值为1,则表示该项为确切的跟,跟为对应的X栏中的数,若该项Freq的值为0,则表示只是值所在的区间(X,Y),而不是确切值
例如:


X
Y
Freq
1
0.5
0
1
2
0.7
0.8
0
3
0.9
1
0
则表示方程有三个跟,其中一个为0.5,另两个分别在曲间(0.7,0.8),(0.9,1)中,得到的到底是曲间还是具体的跟取决于你选择的是解跟还是找跟。
 楼主| 发表于 2009-9-11 07:54:29 | 显示全部楼层
源程序:ROOT
  1. 0->Z
  2. 0->DimZ
  3. ClrStat
  4. 11->DimZ
  5. "(0:SOLVE,1:FIND)+(1:ONE,0:ALL)i"?Z
  6. "START"
  7. ?->Z[1]
  8. "END"?->Z[7]
  9. Z[7]i+Z[1]->Z[1]
  10. If Imp(Z)=1:Then
  11. "DELTA X"
  12. ?->Z[3]
  13. Rep(Z[1])->Z[4]
  14. Imp(Z[1])->Z[5]
  15. Cls
  16. "SOLVING"
  17. "TOTAL:"
  18. Locate 7,2,Int(log(2,Abs(Z[5]-Z[4])÷Z[3]+1)
  19. "CURRENT:"
  20. Prog "M-SOLVE"
  21. Cls
  22. If Z[11]=0:Then
  23. "ROOT:"
  24. X
  25. Else "ERROR"
  26. IfEnd
  27. Else
  28. If Rep[Z]=0:Then
  29. "DELTA X"
  30. ?->Z[3]
  31. IfEnd
  32. "STEP"
  33. ?->Z[2]
  34. Cls
  35. "FINDING"
  36. "TOTAL:"
  37. Locate 7,2,Int((Imp(Z[1])-Rep(Z[1]))÷Z[2])
  38. "CURRENT:"
  39. "FOUND:"
  40. Prog "M-FIND"
  41. If Rep(Z)=0:Then
  42. Cls
  43. "SOLVING:"
  44. Locate 9,1,Z[10]
  45. "TOTAL:"
  46. "CURRENT:"
  47. "SOLVED:0"
  48. 1->Z[6]
  49. While Z[6]≤ Z[10]
  50. If List Freq [Z[6]]=0:Then
  51. List X[Z[6]]->Z[4]
  52. List Y[Z[6]]->Z[5]
  53. Locate 9,3,"                   "(引号中是一堆空格)
  54. Locate 7,2,"                   "
  55. Locate 7,2,Int(log(2,Abs(Z[5]-Z[4])÷Z[3])+1)
  56. Prog "M-SOLVE"
  57. X->List X[Z[6]]
  58. 0->List Y[Z[6]]
  59. 1->List Freq[Z[6]]
  60. IfEnd
  61. Locate 8,4,Z[6]
  62. Z[6]+1->Z[6]
  63. WhileEnd
  64. IfEnd
  65. Cls
  66. If Z[11]=1:Then
  67. "ERROR"
  68. Else
  69. If Z[10]=0:Then
  70. "NO ROOT"
  71. Else If Z[10]=1 And n=1:Then(n是STAT中的n,不是字母变量N)
  72. "ONLY ONE ROOT"
  73. "          "
  74. List X[1]->X
  75. Locate 1,2,X
  76. Else "THERE ARE"
  77. "          "
  78. "ROOTS"
  79. Locate 1,2,Z[10]
  80. IfEnd
  81. IfEnd
  82. 0->DimZ
复制代码
 楼主| 发表于 2009-9-11 07:54:52 | 显示全部楼层
子程序:M-FIND
  1. 0->Z[10]
  2. 1->Z[4]
  3. Rep(Z[1])->Z[7]
  4. Imp(Z[1])->Z[8]
  5. Z[7]->X
  6. Prog "EQN"
  7. Y->Z[6]
  8. Lbl 1
  9. Locate 7,4,"              "
  10. Locate 7,4,Z[10]
  11. Locate 9,3,"                "
  12. Locate 9,3,Z[4]
  13. Z[6]->Z[5]
  14. If Z[5]=0:Then
  15. Z[10]+1->Z[10]
  16. X->List X[Z[10]]
  17. IfEnd
  18. X->Z[9]
  19. If X<Z[8]-Z[2]:Then
  20. X+Z[2]->X
  21. Else Z[8]->X
  22. IfEnd
  23. Prog "EQN"
  24. Y->Z[6]
  25. If Z[5]×Z[6]<0:Then
  26. Z[10]+1->Z[10]
  27. Z[9]->List X[Z[10]]
  28. X->List Y[Z[10]]
  29. 0->List Freq[Z[10]]
  30. IfEnd
  31. Z[4]+1->Z[4]
  32. If X<Z[8]:Then
  33. Goto 1
  34. IfEnd
  35. If Z[6]=0:Then
  36. Z[10]+1->Z[10]
  37. X->List X[Z[10]]
  38. IfEnd
复制代码
 楼主| 发表于 2009-9-11 07:55:19 | 显示全部楼层
子程序:M-SOLVE
  1. 1->Z[9]
  2. Do
  3. Locate 9,3,Z[9]
  4. Z[4]->X
  5. Prog "EQN"
  6. Y->Z[7]
  7. Z[5]->X
  8. Prog "EQN"
  9. Y->Z[8]
  10. (Z[4]+Z[5])÷2->X
  11. Prog "EQN"
  12. If Y=0:Then
  13. Break
  14. IfEnd
  15. If Z[7]=0:Then
  16. Z[4]->X
  17. Break
  18. IfEnd
  19. If Z[8]=0:Then
  20. Z[5]->X
  21. Break
  22. IfEnd
  23. If Y×Z[7]<0:Then
  24. X->Z[5]
  25. Else
  26. X->Z[4]
  27. IfEnd
  28. If Y×Z[7]>0 And Y×Z[8]>0:Then
  29. 1->Z[11]
  30. Return
  31. IfEnd
复制代码
发表于 2009-9-11 17:51:49 | 显示全部楼层
赞!不过这源程序也太长长长长长长长长长长长长长长长长了吧
 楼主| 发表于 2009-9-17 08:38:12 | 显示全部楼层
要的是功能嘛
发表于 2009-10-3 16:37:33 | 显示全部楼层
what a long programme it is!
发表于 2009-11-10 19:42:15 | 显示全部楼层
说真的,这个程序并不怎么长。我编编实用的小程序怎么也要三四页
发表于 2009-11-11 00:46:04 | 显示全部楼层
强!
编程主要是计算方法和算法语言,找到了正确的计算方法,编程应该可以顺利进行,程序完成后必须进行调试
发表于 2010-1-7 00:12:13 | 显示全部楼层
观望
发表于 2010-5-29 14:42:40 | 显示全部楼层
不会用,也不知道怎么输入方程,建议修改
发表于 2010-7-23 18:50:59 | 显示全部楼层
编程讲的是精简
发表于 2010-7-25 19:08:10 | 显示全部楼层
功能强大,代码太长
发表于 2010-7-26 10:38:18 | 显示全部楼层
还不如直接用二分法,Pascal程序20-40行,这个在计算器上应该也不会太长。
发表于 2010-7-26 10:45:18 | 显示全部楼层
…………LS这个就是二分法呀……
发表于 2010-7-26 17:40:59 | 显示全部楼层
二分法?那就不能根号显示了?
发表于 2010-7-28 17:00:23 | 显示全部楼层
LS:这就要使用2D-Math 3 Fine了
发表于 2010-7-28 17:00:58 | 显示全部楼层
最新版本2D-Math 4即将发布
将成为历史上最厉害的转换程序.
发表于 2010-8-7 02:14:30 | 显示全部楼层
别搞了
别人是5800P
不能用2d-MATH
发表于 2010-8-7 18:17:49 | 显示全部楼层
9860基于二分法的iEQN编写成功.
目前成功加装到Mathpad 9中.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-3-29 19:53 , Processed in 0.053447 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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