非线性方程求根
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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阶收敛,单应用时需要选择较好的初始近似值才可以保证迭代收敛,为克服之一缺点,可以使用牛顿下山法。
斯特芬森法可以将一阶收敛的方法加速到二阶收敛,是很重要的加速方法。
弦截法和抛物线法属于插值方法,不需要求导数值,具有超线性收敛速度,也是比较常用的方法。