- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
k4.1045
1/ 2
表 7.2.1 用不动点迭代法计算例7.2.1的结果
0 (a) 1.5 -0.625 6.447 -378.2 5.3697e7 -1.547e23 (b) 1.5 0.912871 2.454577 (c) (d) (e) 1.5 1.5 1.5 1.241638702 1.333333333 1.365079365 1.424290116 1.305205188 1.387624336 1.332682451 1.370291856 1.344991115 1.362217505 1.350582520 1.358732441 1.355350555 1.354767869 1.355301399 1.355384418 1.355301398 1.355288480 1.355303407 1.355301085 1.355301446 1.355301390
*
k
xk x L x0 x L max x0 a , b x0 ,
* k * k
从而 7.2.4 成立.
再由 7.2.3 , 对m k 1, 我们有
x m x k x m x m 1 x m 1 x m 2 x k 1 x k x m x m 1 x m 1 x m 2 x k 1 x k Lm 1 x1 x0 Lm 2 x1 x0 Lk x1 x0 Lk x1 x0 1 L L2 Lm k 1 .
(7.2.1)
其中 ( x )为连续函数,其取法不唯一,例如可取
方程(7.2.1)的解称为函数 ( x )的不动点, 求方程 (7.2.1)的解的问题称为不动点问题.
因此, 对于方程f ( x ) 0,为求出它的一个实根, 常 常将其化为求解等价的不动点问题,因为不动点 问题的形式往往更易于分析求解.
7.2
迭代法及其收敛性
本节主要内容
不动点迭代
不动点迭代的收敛性
不动点迭代的加速
非线性方程
f ( x) 0
可等价改写为
7.2.1 不动点迭代
非线性方程f ( x ) 0可等价改写为 x ( x ),
x x f ( x ), 或者 x x 5 f ( x ).
1/2
e.
x3 3 x2 8 x 5 x x . 2 3x 6x
取初始值x0 1.5,利用MATLAB编写如下m文件 Example7 _ 2 _1.m并运行,详细结果见表7.2.1.
%Example7 _ 2 _1 eps 1e 8; N 300;x0 1.5; phi1 = @(x)(x- x^ 3 - 3* x^ 2 + 8); phi 2 = @(x)((8 / x- 3* x) ^ 0.5); phi3 = @(x)(((1 / 3) * (8 - x^ 3)) ^ 0.5); phi 4 = @(x)((8 / (3 + x)) ^ 0.5); phi 5 = @(x)(x- (x^ 3 + 3* x^ 2 - 8) / (3* x^ 2 + 6 * x)); Hfun = @fixed p oint; [k, x] = feval(Hfun, phi 4, x 0,eps, N)
但对于情形(a ),迭代序列发散;在情形(b)中, 出现负数开根号,从而迭代不能继续下去.
因此, 迭代函数 ( x )的选取将会对迭代过程的收 敛性产生很大的影响.事实上, 要使迭代法产生的序 列 xk 收敛,则迭代函数 ( x )应满足一定的条件.
7.2.2 不动点迭代的收敛性
快.当L接近于1时, 收敛速度可能会较慢, 而且即使 xk 1 xk 很小, 误差 x * xk 也可能很大.
例7.2.2
1
对于例7.2.1中的选取1 x x x 3 3 x 2 8,
我们有1 1 5, 1 2 10, 因此1 x 不是从 1,2 到其自身内的映射.此外,1 ' x 1 3 x 2 6 x ,因此对 所有x [1,2], 均有 1 ' x 1.尽管定理7.2.2不能保证 算法一定失败, 但我们没有期望它收敛的理由 . 1/2 8 的选取, 易知 2 对于例7.2.1中 4 x 3 x
4 x 在[1,2] 的值域为[ 1.6, 2].此外
定理7.2.1
1如果函数 ( x )在区间 a , b 上连续,且对任意 x a , b 的有 ( x ) a , b , 则 x 在 a , b 上有
不动点.
2 进一步地, 如果 ( x )在(a, b)上存在, 且存在一个
if abs(x-x0)<eps return else x0=x; if k==N warning('算法超出最大迭代次数!') end end end
例 7.2.1
方程
f ( x) x3 3 x2 8 0
在[1, 2]内由唯一实根.有许多方法可以将方程转 化为不动点形式,例如 :
1 2 3 4 5 6 7 8 9 10 30 40 45
1.358484290 1.355301399 1.355302727 1.355301425 1.355301394
由上表数据可看出,若取迭代函数为(c ), (d )和 (e )三种情形,算法表现良好,均能较快得到方程 的近似根.
证明
g(a ) (a ) a 0, g(b) (b) b 0.
由零点定理可知, 存在p a , b 使得g ( p ) ( p) p 0, 进而有 ( p) p, 此说明p为的不动点.
2
进一步地, 假设 ( x ) L 1, x a , b .反证
k
连续, 于是
k k
x* lim xk lim xk 1 lim xk 1 x * ,
k
从而得到x *为函数 ( x )的不动点.上述迭代称为不 动点迭代, 迭代公式 7.2.2 称为不动点迭代公式,
( x )又称为迭代函数.
x k x * x k 1 x * L x k 1 x * L x k 2 x L x0 x .
* k *
2
7.2.3
由0 L 1可得 lim Lk 0,因此对上式取极限可得
k
lim xk x * lim Lk x0 x * 0
法假设p, q均为 a , b 上的不动点, 且p q, 则由中值 定理可知, 存在一个介于p, q之间的数 , 使得
( p) (q )
因此
pq
( )
p q ( p ) (q ) '( ) p q L p q p q ,
由定理7.2.2可知, lim xm x * ,因此
m
x * xk lim xm xk lim Lk x1 x0
m m
m k 1
i 0
Li
Lk x1 x0 . 1 L 此式说明 7.2.5 成立.
由上述推论可知, L越小, 序列 xk 收敛得越
2.3 令k : k 1.
2.4 令x0 : x .
步骤3 输出信息“算法超出最大迭代次数!”, 算法终止.
算法7.2的Matlab程序如下:
算法7.2的MATLAB程序
%fixed _ point.m function k, x fixed _ point(phi, x0,eps, N) %功能:用不动点解方程x = (x) fprintf ('kx \ n '); fork 1: N x phi(x0); fprintf ('%3d,%10.9f \ n ',k, x)
* x 收敛 到 a , b 中唯一的不动点 x . k
证明 由定理7.2.1可知, x 在 a , b 中有唯一不动 点x .由于 x 将 a , b 映射到其本身,因此序列 xk
*
是有定义的, 且xk [a , b], k 0.由条件⑵, 结合中值 定理可知
这是一个矛盾, 从而有p q, 此说明 a , b 上的不动 点是唯一的.
定理7.2.1的 ( x ) a, b
x
在 a , b 上连续
定理7.2.2 若函数 x 在区间 a , b 上连续,且满足
正的常数L 1使得 ( x ) L, x a , b ,
则 ( x )在 a , b 上的不动点是唯一的.
1 如果 (a ) a或者 (b) b, 则 在端点处有 不动点.否则,由 ( x ) a , b , x a , b 可知, (a ) a 且 (b) b.因此,函数g( x ) ( x ) x在 a , b 上连续, 且
下面讨论用迭代的方法求 ( x )的不动点x * .取 方程(7.2.1)解的初始近似值x0 , 通过如下迭代
xk xk 1 , k 1,2,, 产生迭代序列 xk . (7.2.2)
如果序列 xk 收敛到x * ,即 lim xk x * ,因 ( x )
a. x 1 x x x 3 3 x 2 8; 1/2 8 x 2 x 3 x ; x
b.
1 3 c. x 3 x 8 x ; 3 1/2 8 d . x 4 x ; 3 x