解方程是我们从小学就开始学习的一种技能,所谓方程,就是含有未知数的等式,我们的任务,就是通过一系列的等式求解出方程的中存在的未知数。这种由已知推出未知的过程的代数思想十分重要,这也是方程举足轻重的原因。
今天讨论的牛顿迭代法,适用于求解最简单的一类方程:一元代数方程。
这个方法来自于函数的泰勒展开,如果一个函数在某一点(我们设为点x0)N阶导数可导,则一个函数在这一点可以写成这样一个收敛的幂级数:

在n = 1的时候,我们可以得到这样的式子:

看着这个式子,我们由导函数的定义也能够得到:

所谓方程的根,就是令f(x) = 0的点,如果x0是零点的话,那么我们只需要令f(x)不断逼近f(x0),当两者差在一定范围之内的时候,我们就可以认为此时的x是x0的近似值,也就是所谓方程的近似解。
由此我们改写一下,我们要求的是x0,而要求出x0我们就不断的使我们的x逼近之,也就是我们初始选定的x是被当做x0的近似值处理的,由此我们这样写:

我们用右式所求出的数值,是一个比x更加接近x0的值,这样的话,我们再一次把这个值带入右式中的x的话,我们就又一次的逼近了方程的根,我们可以用图像非常直观的感受到这一过程:

刚才那个式子的逼近过程,就是图中所演示的过程:

1.随便选取一点,作为方程的一个近似解,图中就是点A
2.我们过这一点做函数的切线,就是那条较粗的红线,这条红线与x轴的交点,就是上面式子中右式的计算结果
3.我们再以这个点为依据,做B点的切线,也就是较细的那条红线
……

如此反复之后我们发现,切线与x轴的交点,越来越逼近与函数的零点,也就是方程f(x)=0的根,这一过程我们称之为牛顿迭代过程,当求出一点在函数上的值小于预订精度的时候,也就是|yD – 0| <ε这种方法比二分法的逼近速度更快,而且迭代过程易于实现,所以广泛用于计算机求解方程,我曾经用过一款卡西欧的计算器,其解方程的算法也应该是这样(其特点是如果是一次方程,其近似解的精确度会一次性达到极高的程度)。
在下一篇文章中,我将利用之前制作的“表达式解析”,来实现利用计算机求解一元代数方程的程序:)。

3
说点什么

3 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
  Subscribe  
最新 最旧 得票最多
提醒
匿名

泰勒零次方项让博主吃了

[…] 牛顿迭代方程的近似解 http://blueve.me/archives/369 var wumiiPermaLink = ""; //请用代码生成文章永久的链接 var wumiiTitle = ""; […]

[…] 在前一篇文章中我们已经了解到了牛顿迭代法的基本原理,在现在,我们就要将其编写为程序。 为了实现输入一个方程,给出其解的目标,我们需要一个能计算出字符串表达式的结果的函数,这个函数功能我在之前的文章中已经完成了,请参看[上一篇文章]中就能了解到,我们只用考虑在x的估计值上的函数和导函数的值即刻,也就是说,在处理这个问题的时候,这个方程中的x,只要根据需要被替换为要带入的数值,就可以直接计算了。 方程的形式多种多样,但我们总能将其转化为F(x) = 0的样子,比如f(x) = g(x),只需要把等号改为减号,我们就能得到这个方程的整齐样式,这样我们再带入数值的时候,只需要计算f(x) – g(x)的结果,就可以了。 在处理这个问题上,我们使用的方法很简单: 1.找到等号,替换为“-(” 2.在方程的最后再添加“)” […]