非线性方程求根

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章 方程求根
本章主要内容:
二分法,不动点概念,迭代的整体收敛性,迭代的局部收敛性,迭代的收敛阶,埃特金迭代法,牛顿迭代法,改进的牛顿迭代法,弦截法与抛物线法。

教学目的及要求:
使学生了解不动点、整体收敛与局部收敛,收敛阶等概念,掌握二分法、牛顿迭代法、弦截法,会用这些方法计算非线性方程的根。

教学重点:
迭代的收敛性判定,牛顿迭代法。

教学难点:
迭代过程收敛的定理。

教学方法及手段:
非线性方程求根是数值分析中的一个经典内容,讲课中要注意结合几何图形,讲清讲透计算方法产生的来源,算法的设计,使学生学得懂、记得住、用得上。

对定理应给出完整的证明。

在实验教学中,通过具体实例,让学生掌握二分法、埃特金算法、牛顿法、弦截法等方法的编程。

教学时间:本章的教学的讲授时间为6学时,实验学时4学时。

教学内容:
本章主要研究单变量非线性方程
()0f x = (7.1)
的求根根问题,这里,()[,]f x C a b ∈。

对于这种连续函数方程,一般采用迭代法求根。

迭代法要求先给出根*
x 的一个近似,若()[,]f x C a b ∈,且()()0f a f b <,根据连续函数性质可知()0f x =在(a,b)内至少有一个实根,这时称[a,b]为方程(7.1)的有根区间。

通常可通过逐次搜索法求得方程(7.1)的有根区间。

一 二分法
考察有根区间[a,b],取中点0()/2x a b =+将它分为两半,假设中点0x 不是()f x 的零点,检查0()f x 与()f a 是否同号,若同号,说明所求根*
x 在0x 的右侧,这时令
10a x =,1b b =;否则,*x 必在0x 的左侧,这时令1a a =,10b x =。

不管出现哪一种情况,新的有根区间11[,]a b 的长度仅为[a,b]的一半。

对于有根区间11[,]a b ,又可再施行上述同样操作,即用中点111()/2x a b =+将区间11[,]a b 再分为两半,然后判定所求根在1x 的哪一侧,从而又确定了一个新的有根区间22[,]a b ,其长度是11[,]a b 的一半。

如此反复二分下去,即可得出一系列有根区间 1122[,][,][,][,]n n a b a b a b a b ⊃⊃⊃⊃⊃
其中每个区间都是前一个区间的一半,因此[,]n n a b 的长度
()/2n n n b a b a -=-
当n →∞时趋于零,就是说,如果二分过程无限地继续下去,这些区间最终必收缩
于一点*
x ,这点显然就是所求的根。

每次二分后,设取有根区间[,]n n a b 的中点
2
n n n a b x +=
作为根的近似值,则在二分过程中可以获得一个近似根的序列
12,,,,n x x x
该序列必以根*
x 为极限。

不过在实际计算时,我们不可能完成这个无限过程,其实也没有这种必要,因为数值计算的结果允许带有一个的误差。

由于
*2
n n n n b a
x x b a --≤-= 只要二分次数足够多(即n 充分大),便有
*n x x ε-<
这里ε为预先给定的精度。

具体算法如下
1 给出计算精度ε,有根区间左右端点a ,b ,取初始误差r b a =-。

2 当r ε≥时,反复做以下操作 (1)计算()/2c a b =+。

(2)若()0f c =,输出精确根c ,停止计算。

(3)若()()0f a f c <,取b c =,否则,取a c =。

(4)r b a =- 3 输出近似根c 。

上述二分法的优点是算法简单,且总是收敛的,缺点是收敛太慢,故一般不单独将其用于求根,只用来为根求得一个较好的近似值。

【例题1】对于给出的方程01)(3=--=x x x f
1 用二分法计算它在(0,2)之间的近似根,要求精确到小数点后四位;
2 给出每次两分后的有根区间;
3 画出每次两分的中点,直观描述两分法原理。

图7-1
二 迭代法及其收敛性
(一)不动点迭代法。

将方程()0f x =改写成等价的形式
()x x ϕ= (7.2)
若要求*
x 满足*()0f x =,则**()x x ϕ=;反之亦然,称*
x 为函数()x ϕ的一个不动点。

这表明,求()f x 的零点就等价于求()x ϕ的不动点。

求不动点一般采用逐次逼近法。

为了说明这种方法,我们重温一个经典例子。

我们知道,递推式
112
()(0,1,
)2n n n
x x n x +=+=
对于初值02x =,所产生的数列{}n x 单调下降且以lim n n x →∞
=
“温故知新”,这个例子给我们带来了以下几点“新知”。

1 如果记12
()()2x x x
ϕ=
+,递推式可表示成为1()n n x x ϕ+=。

将每个n x 代入到()x ϕ所得到的值1()n n x x ϕ+=变小了,即在“动”。

每个n x 不断地代入()x ϕ,意味着“迭代”。

2 有一个特殊值代入到()x ϕ后,所得到的值1
2ϕ==
生改变,即“不动”。

点*
x =12()()2x x x
ϕ=+的“不动点”。

3 这里的()x x ϕ=,实际上是方程2()20f x x =-=,这里的
从这个例子,我们可提炼出求不动点的方法。

选择一个初始近似值0x ,将它代入()x x ϕ= 右端,即可求得
10()x x ϕ=
可以如此反复迭代计算
1()n n x x ϕ+= (0,1,
n =) (7.3)
()x ϕ称为迭代函数。

如果对任何0[,]x a b ∈,由(7.3)得到的序列{}n x 有极限
*lim n n x x →∞
=
则称迭代式(7.3)收敛,且**
()x x ϕ=为()x ϕ的不动点,故称(7.3)为不动点迭代法。

(二)不动点迭代法的几何意义。

方程()x x ϕ=的求根根问题在xoy 平面上就是要确定曲线()y x ϕ=与直线y x
=的交点*
P (图7-2)。

对于*
x 的某个近似值0x ,在曲线()y x ϕ=上可确定一点0P ,
它以0x 为横坐标,而纵坐标为01()x x ϕ=,过0P 引平行x 轴的直线,设此直线交直线
y x =于点1Q ,然后过1Q 再作平行于y 直线,它与曲线()y x ϕ=的交点记作1P ,则
点1P 的横坐标为1x ,纵坐标则等于12()x x ϕ=。

按图7-2中箭头所示路径继续做下去,在曲线()y x ϕ=上得到点列12,,P P ,其横坐标分别为依公式1()n n x x ϕ+=求得迭代
值12,,
x x 。

如果点列{}n P 趋向于点*
P ,则相应的迭代值n x 收敛于所求的根*
x 。

图7-2
【例题2】研究用迭代法求方程01)(3=--=x x x f 在0 1.5x =附近的根*
x 。

1 方程等价形式为x =
,迭代公式1n x += 2 方程等价形式为211x x x =+,迭代公式1211
n n n
x x x +=+;
3 方程等价形式为3
1x x =-,迭代公式3
11n n x x +=-。

对于迭代3
11n n
x x +=-,其发散性显然。

而对于迭代1211
n n n
x x x +=
+,可以通过以下实验,观察出它的发散性。

图7-3
而对于迭代1n x +=
图7-4
例2表明原方程转化为不同形式的迭代,有的收敛,有的发散,只有收敛的迭代过程才
有意义,为此我们首先要研究()x ϕ的不动点存在性以及迭代法的收敛性。

(三)不动点的存在性与迭代法的收敛性。

【定理1】设()[,]x C a b ϕ∈满足以下两个条件 1 对任意[,]x a b ∈有()a x b ϕ≤≤。

2 存在正常数1L <,使对任意,[,]x y a b ∈都有
()()x y L x y ϕϕ-≤- (7.3)
则()x ϕ在[a,b]上存在着唯一的不动点*
x 。

证明 先证明不动点的存在性。

若()a a ϕ=或()b b ϕ=,显然()x ϕ在[a,b]上存在着不动点。

因()a x b ϕ≤≤,以下设()a a ϕ>及()b b ϕ<,定义函数
()()f x x x ϕ=-
显然()[,]f x C a b ∈,且满足()()0f a a a ϕ=->,()()0f b b b ϕ=-<,由连续函数性质可知存在*(,)x a b ∈,使得***()()0f x x x ϕ=-=,即**()x x ϕ=,*
x 即为()x ϕ的不动点。

再证明唯一性。

设*1x 及*2x 都是()x ϕ在[a,b]上的不动点,则
********
12121212()()x x x x L x x x x ϕϕ-=-≤-<-
引出矛盾,故()x ϕ的不动点只能是唯一的。

【定理2】设()[,]x C a b ϕ∈满足定理1中的两个条件,则对任意0[,]x a b ∈,由迭代式 1()(0,1,
)n n x x n ϕ+==得到的序列{}n x 收敛到()x ϕ的不动点*x ,
并有误差估计 *
101n n L x x x x L
-≤--
证明 设*
[,]x a b ∈是()x ϕ在[a,b]上唯一不动点,由条件1,可知[,]n x a b ∈,由条件2有
***11()()n n n x x x x L x x ϕϕ---=-≤-
递推下去,可得
**2**120n n n n x x L x x L x x L x x ---≤-≤-≤≤-
因01L <<,故当n →∞时序列{}n x 收敛到*
x 。


111()()n n n n n n x x x x L x x ϕϕ+---=-≤-
反复递推下下去,可得
110n n n x x L x x +-≤-
于是对任意正整数k ,有
1121n k n n k n k n k n k n n x x x x x x x x +++-+-+-+-≤-+-+
+-
1210()n k n k n L L L x x +-+-≤++
+-
101n L x x L
≤-- 在上式令k →∞,注意到*
lim n k k x x +→∞
=,即得
*
101n
n L x x x x L
-≤--
注:
1 误差估计式*
101n
n L x x x x L
-≤--用于误差估计并不方便,原因是因为参数L 难以确定。

实际进行误差估计时,我们往往采用事后估计方法。

1121n k n n k n k n k n k n n x x x x x x x x +++-+-+-+-≤-+-+
+-
121(1)k k n n L L x x --+≤++
+-
11
1n n x x L
+≤
-- 令k →∞,有 *
111n n n x x x x L
+-≤
-- 由此可见,只要相邻两次计算结果的偏差1n n x x +-充分小,就可以保证近似值n x 具有足够精度。

2 在许多情况下,定理1和定理2中的条件2往往用以下条件来替换 若1
()[,]x C a b ϕ∈,且对任意[,]x a b ∈有 ()1x L ϕ'≤<。

因为利用中值定理,对任意,[,]x y a b ∈,有
()()()()((,))x y x y L x y a b ϕϕϕξξ'-≤-≤-∈
这表明,条件2是成立的。

(四)局部收敛性。

上面给出了迭代序列{}n x 在区间[a,b]上的收敛性,通常称为全局收敛性。

在实际应用时,通常只在不动点*
x 的附近考察其收敛性,即局部收敛性。

【定义1】设()x ϕ有不动点*x ,如果存在*
x 的某个邻域*:R x x δ-≤,对任意0x R ∈,
迭代1()n n x x ϕ+=产生的序列{}n x R ∈,且收敛到*
x ,则称该迭代法局部收敛。

【定理3】设*x 为()x ϕ的不动点,()x ϕ'在*
x 的某个邻域连续,且*()1x ϕ'<,则迭
代法1()n n x x ϕ+=局部收敛。

证明 由连续函数的性质,存在*
x 的某个邻域*:R x x δ-≤,使对于任意x R ∈成立
()1x L ϕ'≤<
此外,对于任意x R ∈,总有()x R ϕ∈,这是因为
****()()()()()x x x x x x L x x ϕϕϕϕξ'-=-=-≤-
据定理2可以断定迭代过程1()n n x x ϕ+=对于任意初值0x R ∈均收敛。

(五)收敛速度。

【例题3】用不同方法求方程2
20x -=的根*
x =
解 这里2
()20f x x =-=可以改写为各种不同的等价形式()x x ϕ=,其不动点为
*x =
1 212n n n x x x +=+-,2
()2x x x ϕ=+-,()21x x ϕ'=+,*()11x ϕϕ''==>
2
12n n x x +=
,2()x x ϕ=,22()x x ϕ-'=,*
()1x ϕϕ''===- 3 211(2)4n n n x x x +=-
-,21()(2)4x x x ϕ=--,1()12
x x ϕ'=-
*()11
x ϕϕ''===< 4 112
()2n n n
x x x +=
+,12()()2x x x ϕ=+,22()2(1)x x ϕ'=-
*1()(102x ϕϕ''=== 取02x =,对上述4种迭代法,计算三步所得结果列表如下:
1.41421356237310≈,从计算结果看到迭代法1及2均不收敛,且它们不满足定理3中的局部收敛条件,迭代法3和4均满足局部收敛条件,且迭代法4比迭代法3收敛快。

为了衡量迭代法收敛速度的快慢,可给出如下定义。

【定义2】设迭代过程1()n n x x ϕ+=收敛于方程()x x ϕ=的根*
x ,如果迭代误差
*n n e x x =-满足下式
1
lim
n p
n n
e c e +→∞= (0c ≠)
则称该迭代过程是p 阶收敛的,特别地,p=1时称线性收敛,p>1时称超线性收敛, p=2时称平方收敛。

注:
收敛速度定义的意义剖析
*lim n n x x →∞
=,*lim lim()0n n n n e x x →∞
→∞
=-=
故n e 是n →∞时的无穷小量。

由1
lim
n p
n n
e c e +→∞=可知,当n 充分大时,有
1p n n e ce +≈
这表明,当p>1时,第n 次迭代的误差1n e +会远远小于第n-1次迭代的误差n e ,即迭代收敛变快了,这正是“收敛速度”的涵义所在。

【定理4】对于迭代过程1()n n x x ϕ+=,如果()
()p x ϕ
在所求根*x 的附近连续,并且
**(1)*()()()0p x x x ϕϕϕ-'''==
==,()*()0p x ϕ≠
则该迭代过程在点*
x 的附近是p 阶收敛的。

证明 由于*()0x ϕ'=,据定理3可以断定迭代过程1()n n x x ϕ+=具有局部收敛性。

再将()n x ϕ在根*
x 处做泰勒展开,利用上述条件,有
()*
*()
()()()!
p p n n x x x x p ϕξϕϕ=+
-,这里:ξ在n x 与*x 之间
注意到1()n n x x ϕ+=,**()x x ϕ=,由上式得
()*
*1()
()!
p p n n x x x x p ϕξ+-=
-
*()11*()
()!p n n p p
n n e x x e x x p ϕξ++-==- ()()*1()()
lim lim !!p p n p n n n
e x e p p ϕξϕ+→∞→∞==
这表明迭代过程确实为p 阶收敛的。

在例3中,迭代法3
中的0ϕ'=
≠,2)1ϕ'<,由定理3知,它是收敛的,由定理4知,它是线性收敛的。

在例4中,迭代法4
中的1(102ϕ'==
,0ϕ''=≠,由定理4知,该迭代法是2阶收敛的。

三 迭代收敛的加速方法
对于一些不收敛或者收敛速度较慢的迭代法,可以通过改造,使它成为收敛的或者收敛
速度较快的迭代法,埃特金给出了一个处理方法。

设0x 是根*
x 的某个近似值,用迭代公式先预报一次得
10()x x ϕ=
再预报一次得
11()x x ϕ=
据微分中值定理,有
***1010()()()()x x x x x x ϕϕϕξ'-=-=-
***1121()()()()x x x x x x ϕϕϕξ'-=-=-
其中,1ξ在0x 与*
x 之间,2ξ在分别1x 与*
x 之间。

假定()x ϕ'改变不大,近似地取某个近似值L ,则有
**10()x x L x x -≈- **11()x x L x x -≈-
将两式相除,有
*
*01**
11x x x x x x x x --≈--,由此可推出
****1110()()()()x x x x x x x x --≈--
2**2***2110110()2()()x x x x x x x x x x x -+≈--+ *2110011(2)()x x x x x x x -+≈-
*2110011010(2)(2)()x x x x x x x x x x -+≈-+-- 2
*
100110
()2x x x x x x x -≈-
-+ 将该值作为1x 的校正值,亦即
2
1010110
()2x x x x x x x -=--+
可以证明,一般情况下,如此得到的1x 比原迭代式所计算出的1x 要好得多。

上述方法可归纳出一般情形: 对于给定的n x , 预报 1()n n x x ϕ+= 预报 11()n n x x ϕ++=
校正 2
1111()2n n n n n n n
x x x x x x x ++++-=--+ (0,1,
n =) (7.4)
(7.4)式称为埃特金加速方法。

【例题4】求2
20x -=
的根*
x =
212n n n x x x +=+-,(02x =)
进行改造,并给出五次计算的结果。

经过埃特金加速之后,原发散的迭代被改造成为收敛的。

四 牛顿法
设方程()0f x =有根*x ,且()0f x '≠,根据函数的几何图象(见图7-5),我们可以给出一种求*
x 的方法。

步1 在*x 附任取一点0x ,作曲线()y f x =在点0x 处的切线 000()()()y f x f x x x '-=-
令0y =,可得到切线与x 轴的交点0100()()
f x x x f x =-'。

图7-5
步2 再作曲线()y f x =在点1x 处的切线
111()()()y f x f x x x '-=-
令0y =,可得到切线与x 轴的交点1211()()
f x x x f x =-
'。

从几何上看,1x ,2x 越来越接近*x 。

由此,不难归纳出一般的迭代公式 1()()
n n n n f x x x f x +=-', 0x 为初值 这就是牛顿法(也称切线法)。

如果*
x 是方程()0f x =的一个单根,亦即*()0f x =,而*()0f x '≠,则牛顿迭代法收敛且收敛速度是2阶的。

事实上,迭代函数为()()()f x x x f x ϕ=-',222
[()]()()()()()1[()][()]f x f x f x f x f x x f x f x ϕ'''''-'=-='' 而*()0x ϕ'=,故牛顿法在根*
x 的附近是平方收敛的。

这表明:牛顿迭代法至少具有局部收敛性。

对某些函数来说,这种迭代还具有整体收敛性。

牛顿迭代算法:
步1 选定初值0x ,计算00()f f x =,'00()f f x '=。

步2 迭代'1000/x x f f =-,计算11()f f x =,'11()f f x '=。

步3 如果1x 满足1δε<或12f ε<,以1x 作为所求根近似值,终止迭代;否则转步4。

这里,1ε,2ε是允许误差(一般可取12εε=),而 1011011/x x x C x x x x C δ⎧-<⎪=⎨-≥⎪⎩,C 是绝对误差或相对误差的控制常数,一般可取C=1。

步 4 如果迭代次数达到预先指定的次数N ,或者'10f =,显示方法失败信息;否则,用'111(,,)x f f 代替'000(,,)x f f ,转步2继续迭代。

【例题5】设方程为
020102)(23=-++=x x x x f
1 给出用牛顿法求方程根的程序;
2 该迭代的收敛性与初值0x 的选取是否有关,通过数值试验来回答这个问题;
3 迭代收敛的快慢与初值0x 的选取是否有关,通过数值试验来回答这个问题;
4 适当地对程序作少量修改,求01)(341=++=x x x f 在10-=x 附近的实根,精度要求取为8102
1-⨯=ε;并说明初值是否可随意取? 五 弦截法
牛顿法有一个缺点:每步除计算()n f x 外还要算()n f x ',许多情况下,计算()n f x '往往较困难。

为了解决这个问题,我们可以利用已求得的函数值1(),(),n n f x f x -,来回避导数值()n f x '的计算。

下面介绍两种常用的方法。

(一)弦截法。

对于牛顿法
1()()
n n n n f x x x f x +=-' 中的()n f x ',用差商00
()()n n f x f x x x --来代替,从而得到下列迭代式 100()()()()
n n n n n f x x x x x f x f x +=--- (0,1,n =) 这一迭代式是()0f x =的又一种等价形式
00()()()()()
f x x x x x x f x f x ϕ=--=- 弦截法的几何意义见图7-6。

图7-6
曲线()y f x =上横坐标为1x 的点记为1p ,作弦01p p ,该弦的方程为
101010
()()()()f x f x y f x x x x x -=+-- 令0y =可求得它与x 轴的交点
1211010()()()()
f x x x x x f x f x =--- 若记曲线()y f x =上横坐标为2x 的点记为2p ,作弦02p p ,该弦的方程为
202020
()()()()f x f x y f x x x x x -=+-- 令0y =可求得它与x 轴的交点
2322020()()()()
f x x x x x f x f x =--- 从图中可以看出,如此产生的序列{}n x 是收敛于()0f x =的根*x 。

下面,考察弦截法的收敛性。

对迭代函数
00()()()()()
f x x x x x f x f x ϕ=-
-- 求导知 ***
*0*00*0()()()1()1()()()
f x f x x x x f x f x f x x x ϕ''=+-=--- 当0x 充分接近*
x 时,0()1x ϕ'<<,故弦截法是线性收敛
【例题6】取初值04x =,1 3.8x =,用弦截法求方程 052)(3=--=x x x f
在[1,4]之间的根,并给出弦截过程的演示。

图7-7
(二)快速弦截法。

为了提高收敛速度,用差商00
()()n n f x f x x x --作为()n f x '的近似,将牛顿法进行改造,得 111()()()()
n n n n n n n f x x x x x f x f x +--=--- 这种迭代法称之为快速弦截法。

快速弦截法的几何意义见图7-8。

曲线()y f x =上横坐标为1n x -的点记为1n p -,横坐标为n x 的点记为n p ,作弦1n n p p -,该弦的方程为
11()()()()n n n n n n
f x f x y f x x x x x ---=+-- 令0y =可求得它与x 轴的交点
111()()()()
n n n n n n n f x x x x x f x f x +--=---
图7-8
可以证明:如果()f x 在零点*x 的附近具有二阶连续导数,且()0f x ≠,则快速弦截法迭代式所得到的序列{}n x 收敛于*x ,且收敛速度是超线性的,其收敛阶为p=1.618。

快速弦截法算法
步1 选定初始近似值0x ,1x ,精度ε,允许迭代的最大次数N ,迭代次数0k =,
计算00()f f x =,11()f f x =;
步2 迭代2111010()/()x x f x x f f =---,1k k =+,计算22()f f x =;
步3 如果21x x ε-<或2f ε<,输出*2x x ≈,终止迭代;否则,转步4
步4 如果k N =,给出快速弦截法失败信息,停止计算,否则,01x x =,12x x =,01f f =,12f f =,返回步2继续迭代。

【例题7】取初值04x =,1 3.8x =,用快速弦截法求方程
052)(3=--=x x x f
在[1,4]之间的根,通过数值试验,比较快速弦截法与弦截法这两种迭代数列的收敛速度。

小结
f x 的迭代法及其理论,不动点迭代、
本章主要介绍了求解单变量的非线性方程()0
局部收敛性及收敛阶等基本概念是非常重要的,它很容易推广至非线性方程组。

在迭代法中,牛顿法最实用,它在单根附近具有2阶收敛,单应用时需要选择较好的初始近似值才可以保证迭代收敛,为克服之一缺点,可以使用牛顿下山法。

斯特芬森法可以将一阶收敛的方法加速到二阶收敛,是很重要的加速方法。

弦截法和抛物线法属于插值方法,不需要求导数值,具有超线性收敛速度,也是比较常用的方法。

相关文档
最新文档