【作者声明】


  本文所有文字均为作者原创,所有图片均为作者本人真实拍摄或制作。

  版权所有,仅供阅读欣赏,严禁任何单位或个人以任何形式转载、复制、引用、抄袭、截图、模仿、翻译本评测的部分或全部内容(包括但不限于文字、图片)。

  作者保留所有权利。

  请尊重作者劳动成果,谢谢合作。


  在早期的可编程计算器(包括图形计算器)上,例如fx-4000P、fx-7000G等型号,除了基本的计算、编程、BASE-N、统计与回归,就没有其他功能了,特别是目前函数计算器上都有的定积分牛顿法解方程的功能,在这些计算器上是没有的。定积分功能在这些计算器的说明书的附录中有辛普森积分法的程序,而牛顿法解方程可能没有,或者是以一个三次方程的解法作为例子,没有普适性。鉴于这一原因,参照定积分的程序以及运行方式,编写了一套类似于目前函数计算器SOLVE功能的牛顿法解方程的程序。

  这里的牛顿法解方程程序占用两个程序存储区(本文使用P0和P1),其中P0为程序的主体,并作为运行的接口;P1为需要求解的方程。

  牛顿法的数学原理本文不再赘述,使用的是下图所示的牛顿迭代公式:

  在具体的实现过程中,方程统一使用“f(x)=0”的形式,只需要输入f(x)的部分;原方程所对应的函数的导数值采用数值计算的方式得出而不是直接计算导函数,使用1e-5作为Δx,且直接用导数的定义进行计算,这样就可以应对绝大多数情况了。

实现的算法如下:
P0:
1. 规定数值求导的Δx为1e-5。
2. 提示输入迭代初始值x0。
3. 若初始值输入的是0,为避免后续检查是否满足求解精度时报错,将初始值进行偏移操作,偏移量为Δx。
4. 插入循环标记Label 0。
5. 将初始值x0赋值给函数f(x)的自变量x,调用P1计算f(x),并将计算的结果Q赋值给M。
6. 将x+Δx赋值给x,调用P1计算f(x),将计算的结果Q与M的差值除以Δx作为数值求导的结果赋值给N。
7. 检查迭代是否满足精度要求,这里规定|(M/N)/Δx|<1e-9,若满足则输出结果;若不满足,返回循环标记Label 0。
P1:
1. 计算f(x)的值并赋值给变量Q。

  以fx-4000P为例,程序如下(方程以求解0.8X+tan⁻¹ X-π=0为例):

【Prg 0】
1e-5→S:
"X0=":?→A:
A=0=>S→A:
Lbl 0:
A→X:Prg 1:Q→M:
A+S→X:Prg 1:(Q-M)÷S→N:
Abs (M÷N÷A)<1e-9=>A◢
A-M÷N→A:
Goto 0
【Prg 1】
0.8X+tan⁻¹ X-π→Q
注:程序中的“=>”符号是一个整体,按[SHIFT]、[7]调用。

  将角度单位设置为弧度后,运行程序Prg 0,计算器提示“X0=?”,此时输入0作为初始值,按[EXE],等待一段时间即可得到解:2.448218394,按[AC]退出方程求解。