在许多实际问题中,常常会遇到方程f(x)=0求解的问题。当f(x)为一次多项式时,f(x)=0称为线性方程,否则称为非线性方程。对于非线性方程,由于f(x)的多样性,求其根尚无一般的解析方法可以使用,因此研究非线性方程的数值解法是十分必要的。
本章主要介绍求非线性方程根的一些常用方法。它们是增值寻根法、二分法、迭代法、牛顿法及割线法。这些方法均是知道根的初始近似值后,进一步把根精确化,直到达到所要求的 精度为止。也即求非线性方程根的数值方法。
第一节第一节 增值寻根法与二分法
2.1.1 增值寻根法
设非线性方程f(x)=0的根为,增值寻根法的基本思想是,从初始值开始,按规定 的一个初始步长h来增值。令 =+h(n=0,1,2,…),同时计算f()。 在增值的计算过程中可能遇到三种情形:
(1) f()=0,此时即为方 程的根。
(2) f()和f()同符号。这说明区间[, ]内无根。
(3) f()和f()异号, 即有
f()·f()<0
此时当f(x)在区间[, ]上连续时,方程f(x)=0在[, ] 一定有根。也即我们用增值寻根法找到了方程根的存在区间,或均可以视为根的近似值。下一步就是设法在该区间内寻找根 更精确的近似值,为此再用增值寻根法 把作为新的初始近似值,同时把步长缩小,例如选新步长,这 样会得到区间长度更小的有根区间,从而也得到使 f(x) 更接近于零的,作为更 精确的近似值,若精度不够,可重复使用增值寻根法,直到有根区间的长度|-|<(为所要求的精度)为止。此时f()或f()就可近似认为是零。或就是满足精度的方程的近似根(如图2-1).
2—1
例1 用增值寻根法求方程 f(x)=-10=0的有根区间。
解 取=-4,h=1,则计算结果如下表2-1:
表 2-1
| x | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 
| f(x) | -10 | -1 | -2 | -7 | -10 | -5 | 14 | 
所以f(x)=0的有根区间为(1,2).再取=1,h=0.1,计算结果如表2-2:
表2-2
| x | 1 | 1.1 | 1.2 | 1.2 | 1.4 | 
| f(x) | -5 | -3.829 | -2.512 | -1.043 | 0. 584 | 
所以 f(x)=0 更进一步的有根区间为(1.3,1.4)
2.1.2 二分法
设f(x)在区间[a,b]上连续,且f(a)·f(b)<0,则由连续函数性质知,方程f(x)=0在(a ,b)内至少有一实根,为以下讨论方便,设(a,b)内仅有唯一实根。
二分法的基本思想 就是逐步对分区间[a,b],通过判断两端点函数值乘积的符号,进一步缩小有根区间,将有根区间的长度缩小到充分小,从而求出满足精度的根的近似值,如图。
2-2
具体做法 如下 :
用区间 [a,b]的中点平分区间,并计算f(),同时记(,)=(a,b),如果恰好有f()=0,则我们已经找到方程的根= 。如若不然,f()≠0,如果f()·f()<0,则记(,)=(, ),如果f()· f()<0,则记(,)=(, ),在后两种情形区间(,)为新的有根区 间。它包含在旧的有根区间(,)内,其区间长度是原区间的一半。对区间(,)施行同样的办法。即平分区间,求中点判断函数值乘积的符号,得到新的有根区间( ,),它包含在区间(,)内,其区间长度是(,)的,(,)的。如此重复n次,如果还没有找到方程的精确根,此时我们得到方程的有根区间序列: (,),(,),…,(),… 它满足 (,) (, ) …() … f()f()<0 -= ,n=1,2,… n-1 当n充分大时,()的长度缩小到充分小,此时 它的中点与夹在与之间,它们的距离也充分小,且序列{}满足 : 上式表明 =(2) 即 序 列{ }以等比数列的收敛速度收敛于。同时也表明序列{}是的一个 近似值序列。因此对任意给定的精度<0,总存在n, 使此时,我们可以取作为的近似值,即可满足 精度 。
例2 用二分法求方程 f(x)==0 在[1,2]内的一个实根,且要求满足精度
解 用二分法计算结果如表2-3:
| n | f() | |||
| 1 | 1.0 | 2.0 | 1.5 | 2.375 | 
| 2 | 1.0 | 1.5 | 1.25 | -1.79687 | 
| 3 | 1.25 | 1.5 | 1.375 | 0.16211 | 
| 4 | 1.25 | 1.375 | 1.3125 | -0.84839 | 
| 5 | 1.3125 | 1.375 | 1.34375 | -0.35098 | 
| 6 | 1.34375 | 1.375 | 1.359375 | -0.091 | 
| 7 | 1.359375 | 1.375 | 1. 3671875 | 0.03236 | 
| 8 | 1.359375 | 1.3671875 | 1.36328125 | -0.03215 | 
| 9 | 1.36328125 | 1.3671875 | 1.365234375 | 0.000072 | 
| 10 | 1.36328125 | 1.365234375 | 1.3257813 | -0.01605 | 
| 11 | 1.3257813 | 1.365234375 | 1.3746094 | -0.00799 | 
迭代11次,近似根 =1.3746094即 为所求,其误差这种方法的优点是简单,对 f(x) 只要求连续。它的收敛速度与 比值为的等比级数相同,它的局限性是只能用于求实根,不能用于求 复根及偶数重根。
迭代法的基本思想
由函数方程f(x)=0,构造一个等价方程:x=(1) 从某个近似根出发,令, n=0,1,2,… (2) 可得到序列{},若{}收敛,即 lim=只要连续,有 也即 从而可知是方程(1)的根,也就是f(x)=0的根。此时{}就是 方程(1)的一个近似解序列,n越大,的近似程度就越好。若{}发散,则迭代 法失败。
例1用迭代法求方程f(x)=-10=0在[1,2 ]内的一个近似根,取初始近似值.
表2-4
| n | (1) | (2) | (3) | (4) | 
| 0 | 1.5 | 1.5 | 1.5 | 1.5 | 
| 1 | -0.875 | 0.8165 | 1.28695377 | 1.34839973 | 
| 2 | 6.732 | 2.9969 | 1.40254080 | 1.36737637 | 
| 3 | -469.7 | (-8.65 | 1.34545838 | 1.395701 | 
| 4 | 1.03 | 1.37517025 | 1.365275 | |
| 5 | 1.36009419 | 1.36522559 | ||
| 6 | 1.36784697 | 1.365223058 | ||
| 7 | 1.36388700 | 1.36522994 | ||
| 8 | 1.36591673 | 1.36523002 | ||
| 9 | 1.387822 | 1.36523001 | ||
| 10 | 1.36541006 | |||
| 15 | 1.36522368 | |||
| 20 | 1.36523024 | |||
| 23 | 1.36522998 | |||
| 25 | 1.36523001 | 
解原方程的等价方 程可以有以下不同形式: (1)(2) (3) (4) 对应的迭代公式有: (1) (2 ) (3) (4) 取,列表计算如表2-2。 与上节二分法比较,(3)、(4)都得到较好的结果 ,而用二分法达到同样的精度,需要迭代27次,同时也看出迭代函数构造不同,收敛速度也不尽相同,迭代函数构造不当(如(1),(2)),序列{}就不收敛。
二 迭代法的几何意义
以上可以看到迭代法可能收敛,也可能不收敛。一般来说从f(x)=0,构造不止一种,有的收敛,有的不收敛,这取决于的性态。方程x=的根,在几何上就是直线 y=x 与曲线y=交点的横坐标,如图2-3所示。
(a) (b)
(c) (d)
图2-3中(1)、(2)收敛,(3)、(4)发散。
三 迭代法收敛的条件
定义1 如果在根的某个邻域B= ∈B,迭代过程,n=0,1,2,…收敛,则 称迭代过程在附近局部收敛。
定理1 设=(),在的某个邻域B内连续,并且||≤q<1,则对任何 ∈B,由迭代公式决定的迭代序列{}收敛于。
且|-|≤(3)
|-|≤(4)
证:由拉格朗日中值定理,存在B,使 由已知 ||≤q ,从而得 |-|≤q||≤…≤|- |
所以 这样我们就证明了{}收敛于 。
再由拉格朗日中值定理,存在 ,使 ==()所以 ||≤q||≤…≤q|| (5)
又由于 ||=|( )+() +…+()| ≤||+||+…+||
所以||≤(q+q +…+q+1)||=||
令p→+∞,有 |-|≤| |
也即|-|≤| | 这样(4)式得证。
再由(5)得|-|≤ || 这样(3)式也得证。
这个定理是一个很实用的收敛定理。一方面它可以判定我们所构造的迭代函数是否收敛。另一方面(3)式还可以估计迭代次数。但结果偏保守,次数也偏大,实际中很少用。通常由(4)式,当 ||<(为给定精度)时,认为|-|< 就是满足精度的一个近似解了。
定理2〖HTSS〗对于方程 x=,如果满足 (1)对任意x∈[ a,b],有∈[a,b] (2)对任意x∈[a,b],有|(x) |≤q<1 则对任意x∈ [a,b],迭代x =(x)所决定的序列{x}收敛于x=(x)的根x,且( 3)、(4)式也都成立。证明与定理1相仿,故略去。以上两定理中的条件要严格验证都较 困难,实用时常用以下不严格的标准。 有根区间[a,b]较小,对某一x∈[a,b],| (x) |明显小于1,由(x)连续性知在的x某领域内|(x)|也小于1,则迭 代收敛。
例2 考察例1中四种迭代法在根附近的收敛情况,取根的近 似 值为x=。 解 (1)
17.75>1不收敛
(2) 5.128>1不收敛〖ZK〗〗 (3) 0.656<1 收敛
(4) 0.122<1收敛) 上例说明值越小,收敛速度就越快。
四 迭代法的收敛速度 用迭代法求方程的近似根,我们不仅要构造适当的要求它收敛,而且还需要知道它的收敛速度。关于收敛速度,有如下定义:
定义2 设序列{x}收敛于,令 = - x,若存在某实数p≥1 及正常数C, 使(6)
则称序列{x}阶收敛。如果序列{x}是由=(x) 产生的,且p阶收敛,则称这种迭代过程是p阶收敛的。
当p=1 ,且C <1时,称为线性收敛; 当p=2时,称为平方收敛(或二次收敛); 当1
同前面一样,设, =(x) ,=() 则有-=(- x) (在在与x之间) 所以=因而=||(n→∞) 若 0<<1,则迭代过程为线性收敛。 若=0,由泰勒 展开得 (x)=()+ 设() ≠0,则-=(x)-()=从而〖→>0 (n→∞) 此时迭代过程为二阶收敛。
定 理3 设在x=的根邻近有连续的p阶导数,当||<1,且 ()≠0 时,迭代过程=( x)为线性收敛;而当()=0, ()≠0时为二阶收敛。
一般来说,若()=()=…=()=0,而()≠0,则称=(x)在附近为p阶收敛。
第三节 迭代收敛的加速
从f(x)=0构造出的迭代格式x=(x)可能收敛也可能不收敛,在收敛的情形,收敛速度也取决于|(x)|的大小,当|(x)|接 近于1时,收敛可能很慢。后两种情形都影响迭代法的应用。能否从 x=(x) 出发构造出 新的迭代形式,使收敛速度加快呢?
一 松驰法 对x=(x)引入一个任意常数作为参数,并假设≠-1,在方程两边加上x,得(1+)x=x+(x) 于是 x=(x) (1)
显然方程 (1)与方程x=(x) 等价,若令(x)=(x),(1)可写成 x=(x) (2)
为了使得用x=(x)作迭代比用x=( x)作迭代收敛的更快,我们希望 |(x)|比|(x)|更小,又由于
(x)=(3)
若(x)连续,则当x在根x*附近时, (x)也在(x*)附近,为此选取=-(x*)。这样可以使 得 |(x)|较小。但在求解过程中x*未知,故用x来代替,只要-()≠-1 ,记,于是代入(1)有松弛法迭代公式: x (n=0,1,2,…) (4)
称为松弛因子。松弛法的加速效果是明显的,甚至不收敛的迭代函数经加速后一般也能获得收敛。
二 埃特金方法
用松弛法计算时,要先算(x),在使用时有时不太方便,假若在求 得x以后,先求出 和再利用和构造格式-由此得到埃特金(Altk en)公式:
= =() -
(n=0,1, 2,…) (5)
它的加速效果也十分明显。
例1 分别用松弛法、 埃特金法求方程-10=0在初 值附近的一个根,取迭代格式解用松弛法计算,取
因此松弛法的迭代公式为 n=0,1,2,…
列表计算如下:
表2- 3
| n | 0 | 1 | 2 | 3 | 
| 0.0803686 | 0.887123141 | 0.887130869 | ||
| 1.5 | 1.3953916 | 1.365230012 | 1.365230013 | 
用埃特金方法计 算,迭代格式为
n=0,1,2,…
列表计算如下:
表2-4
| n | 0 | 1 | 2 | 3 | 
| 0.0803686 | 0.887123141 | 0.887130869 | ||
| 1.5 | 1.3953916 | 1.365230012 | 1.365230013 | 
与上节例1中(3)与(4)相比收敛 速度明显加
第四节第四节 牛顿法
解非线性方程 f(x)=0 的牛顿(Newton) 法,就是将非线性方程线性化的一种方法。它是解代数方程和超越方程的有效方法之 一。
一 牛顿法的基本思想
把非线性函数f(x)在处展开成 泰勒级数
f(x)=f()+(x-)f′()+(x-)+ …
取其线性部分,作为非线性方程f(x)=0的近似方程,则有
f()+(x-) f′()=0
设 f′()≠0 ,则其解为 x=- (1)
再把f(x)在x处展开为泰勒级数,取其线性部分为f(x)=0的近似方程,若
f′(x) ≠0,则得x=-如此继续下去,得到牛顿法的迭代公式:x=- (n=0,1,2,…) (2)
例1 用牛顿法求方程f(x)=x+4x-10=0在[1,2]内一个实根,取初始近似值 x=1.5 。
解 f′(x)=3x+8x 所以迭代公式为:
x=- n=0,1, 2,…
列表计算如下:
| n | 0 | 1 | 2 | 3 | 
| 1.5 | 1.3733333 | 1.36526201 | 1.36523001 | 
二 牛顿法的几何意义
方程f(x)=0的根就是曲线y=f(x)与x轴交点的横坐标x*,当初始近似值选取后,过(,f())作切线,其切线方程为:y- f()=f′()(x-)
它与x轴交点的横坐标为x=-
一般地,设是x*的第n次近似值,过(,f()作y=f(x)的切线,其切线与x轴交点的横坐标为:x=-即用切线与 x轴交点的横坐标近似代
曲线与x轴交点的横坐标,如图2-4。
2-4
牛顿法正因为有此明显的几何意义,所以也叫切线法。
三 牛顿法的收敛性及收敛速度
定理 设f(x)在[a,b ]满足
(1)(1) f(a)·f(b)<0
(2) f(x)∈[a,b],f′(x),f″(x)均存在,且f′(x)与f″( x)的符号均保持不变。
(3) f()·f″(x)>0,、x∈[a,b],则方程f(x)=0在[a,b]上有且只有一个实根,由牛顿法迭代公式计算得到的近似解序列{}收敛于方 程f(x)=0的根x*。
由方程f(x)=0得到的牛顿迭代形式
x=x-= =1- = 由于f(x*)=0,所以当f′(x*)≠0时,(x* )= 0,牛顿法至少是二阶收敛的,即牛顿法在单根附近至少是二阶收敛的,在重根附近是线性收敛的。
牛顿法收敛很快,而且可求复根,缺点是对重根收敛较慢,要求函数的一阶导数存在。
四 牛顿二阶导数法
这里将简单介绍一下牛顿二阶导数法。对其几何意义及收敛性不作详细的叙述,读者可仿照牛顿法进行讨论,其基本思想是:
将f(x)在处展开泰勒级数
f(x)=f()+f′()(x-)+f″()(x-)+…
取右端前三项近似代替 f(x),于是得f(x)=0的近似方程为
f()+f′()(x-)+f″()(x-)=0
也即 f()+(x-)[f′()+f″()(x-)] =0 (3)
设其解为.利用(1),-=-,代入(3)中括号内- ,则得 f()+(-) [f′()+f″() ] =0
于是解出,得=-
重复以上过程得:=-
于是得牛顿二阶导数法的迭代公式为:
=- n=0,1,2,… (4)
上式与牛顿法迭代公式(2)相比,利用此公式求根收敛更快,迭代次数更少。其缺点是要求f(x)的二阶导数存在。
第五节 割线法
用牛顿方法解非 线性方程f(x)=0,虽然在单根附近有较高的收敛速度,但需要计算f′(x)。若f(x)比较复杂时,每次计算f′(x)带来很多不便;如果用不计算导数的迭代方法,往往只有线性收敛的速度。本节我们介绍割线法,采取在迭代过程中不仅用前一步处的函数值,而且还使用处的函数值来构造迭代函数。这样做能提高迭代的收敛速度。
一 割线法的基本思想
设非线性方程 f(x)=0,其中f(x)为[a,b]上的连续函数,且f(a)·f(b)<0。设,为f(x)=0的根x*的两个初始近似值,过(,f())和(,f())作一直线, 其方程为 :y=f()+(x-)
当 f()≠f()时,此直线与x轴交点为=-(-) (1) 作为f(x)=0根的第二次近似值,可以预期比, 更接近于x*。重复上述过程可得, ,…, , 从而可 得割线法的迭代公式 :
=- (-) (n=1,2,…) (2)
很明显,它也可由牛顿法用差商近似代替微商f′() 而 得。 若把(2)中的换为, 则得迭代公式=- (-) (n=1,2,…) (3)
显然,它也可由 牛顿法用差商 近似代替微商 f′() 而得。 以上两种迭代方法都称为割线法(或弦截法)。(2)称为双点割线法。也称为有记 忆割线法。(3)称为单点割线法。它们都需要x*邻近的两个初始近似值, 才能启动。
例1例1 用双点割线法求方程 x-3x+1=0在0.5附近的根。精确到小数点 后第六位。
解:令f(x)= x-3x+1
=-(-) (n=1,2,…)
即=-(-)
(n=1,2,… ) 取=0.5,=0.2 列表计算如下:
表2-6
| n | 1 | 2 | 3 | 4 | 5 | 
| 0.5 | 0.2 | 0.356322 | 0.347731 | 0.347295 | |
| 0.2 | 0.356322 | 0.347731 | 0.347295 | 0.347296 | 
二 割线法的几何意义
双点割线法是用过点 (,f())和(,f())两点的割线与x轴交点的横坐 标x2作为x*的新近似值。重复此过程,用过点(,f())和(,f())两点的割线法与x轴交点的横坐标来作为x*的下一新的近似值。如 图2-5。 单点迭代法则是用过点(,f())和(,f())两点的割线与x轴交点的横坐标 来作为x* 的近似值,如图2-6。
2-5 2-6
三 割线法收敛的速度
定理 设方程 f(x)=0 的根为 x* 。若f(x)在x*附近有连续的二阶导数,f′(x*)≠0,而初值, 充分接近x*, 则双点割线法的迭代过程收敛,收敛速度为|-x*|≈|-x*|
这说明它是超线性收敛的( p=1.618>1 )。而单点割线法在单根附近是线性收敛的。