zasdfgbnm 发表于 2009-9-11 07:52:51

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

本文讲述的是fx-5800P可编程计算器上的解方程软件。如果想要电脑上使用的具有解方程功能的数学软件,请移步至http://www.cncalc.org/forum-43-1.html。
给定一个区间,给定切割细度,可以解出一个方程在给定区间的所有跟。
先来简单介绍一下:
主程序:ROOT
子程序:M-FIND、M-SOLVE
方程存储程序:EQN
方程自变量:X
方程因变量:Y
计算器应用的临时变量:Z、Z、Z……
使用方法:
首先,把方程存在程序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,则得到的小区间为。
结果查看:
进入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)中,得到的到底是曲间还是具体的跟取决于你选择的是解跟还是找跟。

zasdfgbnm 发表于 2009-9-11 07:54:29

源程序:ROOT0->Z
0->DimZ
ClrStat
11->DimZ
"(0:SOLVE,1:FIND)+(1:ONE,0:ALL)i"?Z
"START"
?->Z
"END"?->Z
Zi+Z->Z
If Imp(Z)=1:Then
"DELTA X"
?->Z
Rep(Z)->Z
Imp(Z)->Z
Cls
"SOLVING"
"TOTAL:"
Locate 7,2,Int(log(2,Abs(Z-Z)÷Z+1)
"CURRENT:"
Prog "M-SOLVE"
Cls
If Z=0:Then
"ROOT:"
X
Else "ERROR"
IfEnd
Else
If Rep=0:Then
"DELTA X"
?->Z
IfEnd
"STEP"
?->Z
Cls
"FINDING"
"TOTAL:"
Locate 7,2,Int((Imp(Z)-Rep(Z))÷Z)
"CURRENT:"
"FOUND:"
Prog "M-FIND"
If Rep(Z)=0:Then
Cls
"SOLVING:"
Locate 9,1,Z
"TOTAL:"
"CURRENT:"
"SOLVED:0"
1->Z
While Z≤ Z
If List Freq ]=0:Then
List X]->Z
List Y]->Z
Locate 9,3,"                   "(引号中是一堆空格)
Locate 7,2,"                   "
Locate 7,2,Int(log(2,Abs(Z-Z)÷Z)+1)
Prog "M-SOLVE"
X->List X]
0->List Y]
1->List Freq]
IfEnd
Locate 8,4,Z
Z+1->Z
WhileEnd
IfEnd
Cls
If Z=1:Then
"ERROR"
Else
If Z=0:Then
"NO ROOT"
Else If Z=1 And n=1:Then(n是STAT中的n,不是字母变量N)
"ONLY ONE ROOT"
"          "
List X->X
Locate 1,2,X
Else "THERE ARE"
"          "
"ROOTS"
Locate 1,2,Z
IfEnd
IfEnd
0->DimZ

zasdfgbnm 发表于 2009-9-11 07:54:52

子程序:M-FIND
0->Z
1->Z
Rep(Z)->Z
Imp(Z)->Z
Z->X
Prog "EQN"
Y->Z
Lbl 1
Locate 7,4,"            "
Locate 7,4,Z
Locate 9,3,"                "
Locate 9,3,Z
Z->Z
If Z=0:Then
Z+1->Z
X->List X]
IfEnd
X->Z
If X<Z-Z:Then
X+Z->X
Else Z->X
IfEnd
Prog "EQN"
Y->Z
If Z×Z<0:Then
Z+1->Z
Z->List X]
X->List Y]
0->List Freq]
IfEnd
Z+1->Z
If X<Z:Then
Goto 1
IfEnd
If Z=0:Then
Z+1->Z
X->List X]
IfEnd

zasdfgbnm 发表于 2009-9-11 07:55:19

子程序:M-SOLVE1->Z
Do
Locate 9,3,Z
Z->X
Prog "EQN"
Y->Z
Z->X
Prog "EQN"
Y->Z
(Z+Z)÷2->X
Prog "EQN"
If Y=0:Then
Break
IfEnd
If Z=0:Then
Z->X
Break
IfEnd
If Z=0:Then
Z->X
Break
IfEnd
If Y×Z<0:Then
X->Z
Else
X->Z
IfEnd
If Y×Z>0 And Y×Z>0:Then
1->Z
Return
IfEnd

FRGFGT 发表于 2009-9-11 17:51:49

赞!不过这源程序也太长长长长长长长长长长长长长长长长了吧

zasdfgbnm 发表于 2009-9-17 08:38:12

要的是功能嘛

515671788 发表于 2009-10-3 16:37:33

what a long programme it is!

yzhang37 发表于 2009-11-10 19:42:15

说真的,这个程序并不怎么长。我编编实用的小程序怎么也要三四页

gdlcx 发表于 2009-11-11 00:46:04

强!
编程主要是计算方法和算法语言,找到了正确的计算方法,编程应该可以顺利进行,程序完成后必须进行调试

hoooooe 发表于 2010-1-7 00:12:13

观望

rouren 发表于 2010-5-29 14:42:40

不会用,也不知道怎么输入方程,建议修改

柠檬树 发表于 2010-7-23 18:50:59

编程讲的是精简

rookie0167 发表于 2010-7-25 19:08:10

功能强大,代码太长

zhj 发表于 2010-7-26 10:38:18

还不如直接用二分法,Pascal程序20-40行,这个在计算器上应该也不会太长。

朔雪X忆 发表于 2010-7-26 10:45:18

…………LS这个就是二分法呀……

FM98.7 发表于 2010-7-26 17:40:59

二分法?那就不能根号显示了?

imath 发表于 2010-7-28 17:00:23

LS:这就要使用2D-Math 3 Fine了

imath 发表于 2010-7-28 17:00:58

最新版本2D-Math 4即将发布
将成为历史上最厉害的转换程序.

yzhang37 发表于 2010-8-7 02:14:30

别搞了
别人是5800P
不能用2d-MATH

imath 发表于 2010-8-7 18:17:49

9860基于二分法的iEQN编写成功.
目前成功加装到Mathpad 9中.
页: [1] 2
查看完整版本: [原创]fx-5800P的超强解方程软件