第六章 逐次逼近法 6.5 迭代法的加速§ 6.5 迭代法的加速§ 无论是解线性方程组的 Jacobi迭代法和 G— S迭代法 还是解非线性方程 Newton系列迭代法 都涉及到收敛速度问题 如何加快迭代法的速度呢 ? 也涉及到初值的选取问题 如何改善迭代法的适用范围呢 ? i ii n ij k jij ii i j k jij ii k i baxaaxaax 111 1 )( 1 1 )1()1( +??= ∑∑ += ? = ++ 一 、 线性方程组迭代法的加速 考虑解线性方程组的 Gauss-Seidel迭代法 ∑∑ += ? = + ??= n ij k jij ii i j k jij ii i ii xaaxaaba 1 )( 1 1 )1( 111 )()( 1 1 )1( 111 k i n ij k jij ii i j k jij ii i ii xxaaxaaba +??= ∑∑ = ? = + )(1 )( 1 1 )1()( ∑∑ = ? = + ??+= n ij k jij i j k jiji ii k i xaxabax ------(1) 令 )()1()( kikiki xxr ?= + )(1 )( 1 1 )1( ∑∑ = ? = + ??= n ij k jij i j k jiji ii xaxaba 的改变量次迭代时为第 xkr ki 1)( + )()()1( k i k i k i rxx += +因此 得前加一个因子在改变量 ),20(,)( << wwkir )()()1( k i k i k i rxx w+= + )( )( 1 1 )1()( ∑∑ = ? = + ??+= n ij k jij i j k jiji ii k i xaxabax w ------(2) 得在上式中合并 ,)( kix )()1( 1 )( 1 1 )1()()1( ∑∑ += ? = ++ ??+?= n ij k jij i j k jiji ii k i k i xaxabaxx ww LL ,2,1,0,,2,1 == kni ------(3) 上式称为 逐次超松弛法 (SOR迭代法 ), 称为松弛因子w G k G k fxBx +=+ )()1( bLDUxLD k 1)(1 )()( ?? ?+?= bUxxLD kk +=? + )()1()( 由 G-S迭代法的矩阵形式 ------(4) )()1()( kkk xxr ?= + )()()1( kkk rxx w+=+ bUxLxDx kkk ++= ++ )()1()1( bDUxDLxDx kkk 1)(1)1(1)1( ??+?+ ++= bDUxDLxDxx kkkk 1)(1)1(1)()( ??+? +++?= bDUxDLxDx kkk 1)(1)1(1)( ??+? +++?= )()1( 1)(1)1(1)( bDUxDLxDx kkk ??+? +++?= ww ------(5) 的改变量次迭代时第 xk 1+ w前加上因子在 )( kr )()1( )()1()()1( bUxLxDxDx kkkk +++?= ++ ww bxUDxLD kk wwww ++?=? + )()1( ))1(()( bLDxUDLDx kk 1)(1)1( )())1(()( ??+ ?++??= wwwww ----(6) 上式为逐次超松弛法 (SOR迭代法 )的矩阵形式 ))1(()( 1 UDLDB wwww +??= ? bLDf 1)( ??= www 令 ww fxBx kk +=+ )()1( ----(7) 法的迭代矩阵为 SORBw ,1时当 =w SOR法化为 bLDUxLDx kk 1)(1)1( )()( ??+ ?+?= G-S迭代法 G-S法为 SOR法的特例 , SOR法为 G-S法的加速 例 1. 用 G-S法和 SOR法求下列方程组的解 , 45.1=w取 ?? ? ? ? ?? ? ? ? ?? ?? ?? 321 242 124 ?? ? ? ? ?? ? ? ? 3 2 1 x x x ?? ? ? ? ?? ? ? ? ?= 3 2 0 要求精度 1e-6 解 : (1)G-S迭代法 GB ULD 1)( ??= 1 321 042 004 ? ?? ? ? ? ?? ? ? ? ?? ?= ?? ? ? ? ?? ? ? ? 000 200 120 ?? ? ? ? ?? ? ? ? = 5.03/10 625.025.00 25.05.00 f bLD 1)( ??= 1 321 042 004 ? ?? ? ? ? ?? ? ? ? ?? ?= ??? ? ? ?? ? ? ? ? 3 2 0 ?? ? ? ? ?? ? ? ? ?= 3/2 5.0 0 )',0,0()0( 0取初值 =x gauss_seidel.m [x,k]=gauss_seidel(a,b,[1,1,1]',1e-6) 1 1 1 0.7500000 0.3750000 1.5000000 0.5625000 0.5312500 1.5416667 0.6510417 0.5963542 1.6145833 0.7018229 0.6582031 1.6727431 ………………………………………. 0.9999933 0.9999923 1.9999926 0.9999943 0.9999935 1.9999937 0.9999952 0.9999944 1.9999946 k = 71 x= 0.999995 0.999994 1.999995 满足精度的解 迭代次数为 71次 (1)SOR迭代法 1 1 1 0.6375000 0.0121875 1.3199063 0.2004270 0.3717572 1.3122805 0.6550335 0.5340119 1.6922848 0.7058468 0.7733401 1.7771932 ……………………………………….. 0.9999990 0.9999976 1.9999991 0.9999984 0.9999993 1.9999989 0.9999998 0.9999994 1.9999998 0.9999996 0.9999998 1.9999997 k = 24 x= 1.000000 1.000000 2.000000 满足精度的解 迭代次数为 24次 bLDxUDLDx kk 1)(1)1( )())1(()( ??+ ?++??= wwwww sor.m SOR法的收敛速度比 G-S法要快得多,w选取适当的 SOR法都收敛吗 ? 1.SOR迭代法收敛的充要条件是 对于 SOR迭代法 (7),有如下结论 1)( <wr B ----(8) |1|)( ?≥ wr wB由于 (此结论的证明较复杂 ), 因此有 法收敛的必要条件是即 SOR20,1|1|.2 <<<? ww ,,20,.3 )0(xA 对任意初值且为对称正定矩阵若矩阵 << w 法均收敛SOR 收敛对任意初值为对称正定矩阵若矩阵 )0(,.4 xSGA ? 另外 ,松弛因子的选取是很困难的 ,一般采用试算进行 二 、 非线性方程迭代法的加速 对于迭代法 )(1 kk xx j=+ )(1 kkkk xxxx j+?=?+ kkk xxr ?= +1 kkkk rxx w+=+1 ))(( kkkk xxx jw +?+= )()1(1 kkkkk xxx jww +?=+ )( kk xx j+?= 上式的迭代函数 )()1()( xxx wjwy +?= )()1()( xx jwwy ′+?=′ 0= 令 迭代改变量 kw加入因子 即 的加权平均 与 )( kk xx j 求导并令 ----(9) )(1 1 xjw ′?= )(1 1 k k xjw ′?= )()1(1 kkkkk xxx jww +?=+ 得 因此有 松弛迭代法 : --------(10) ?? ? 从后面的例子可以看出 ,加速效果是明显的 甚至一些不收敛的迭代法经过松弛加速后也能收敛 ),( kxj′要计算松弛法的每一步迭代都 不方便 *,)( xxx 的精确解为假设方程 j= 0x初值为 )( 01 xx j= )( 12 xx j= 22 ** xxxx ?+= )(*)( 12 xxx jj ?+= )*)(( 12 xxx ?′+= xj 中值定理 )*()()( 1 01 01 2 xxxx xxx ? ? ?+≈ jj 差商近似代替导数 )*(* 1 01 12 2 xxxx xxxx ? ? ?+≈ 即 得解出 *,x 012 2 12 2 2 )(* xxx xxxx +? ??≈ 于是可以得到迭代格式 : )( 01 xx j= )( 12 xx j=其中 )()1( kk xx j= )( )1()2( kk xx j= kkk kk kk xxx xxxx +? ??= + )1()2( 2)1()2( )2( 1 2 )( L,2,1,0=k ?? ? -------(11) 上组公式称为 Altken公式或 Altken加速 将 (11)式综合后可得一个解析式表示的迭代法 : kkk kk kk xxx xxxx +? ??= + )(2))(( )]())(([))(( 2 1 jjj jjjjj ----(12) 上式称为 Steffensen迭代法 Altken公式与 Steffensen公式是等价的 加速效果也是很明显的 例 2中将比较不同加速方法 例 2. 对迭代格式 3 1 3 1 += + k k xx 进行加速解方程组 0133 =+? xx 6 0 10,5.0 ?= 精确到初值 x 解 : x0 = 0.5 x1 = 0.375 x2 = 0.3509115 x3 = 0.3477369 x4 = 0.3473496 x5 = 0.3473028 x6 = 0.3472971 x7 = 0.3472964 3 13 1 += + k k xx (1)直接使用迭代格式 迭代 7次 ,得到满足精度的解 347296.0=x (2)对迭代格式进行松弛加速 21 1 k k x?=w )1(3 13 2 23 k kk x xx ? +?= 3 1)( 3 += xxj 2)( xx =′j )()1(1 kkkkk xxx jww +?=+ x0 = 0.5 x1 = 0.3333333 x2 = 0.3472222 x3 = 0.3472964 x4 = 0.3472964 迭代 4次 ,得到满足精度的解 347296.0=x (3)对迭代格式进行 Altken加速 (11)式 3 13)1( += k k xx x0 = 0.5 x1 = 0.3451613 x2 = 0.3472961 x3 = 0.3472964 迭代 3次 ,得到满足精度的解 347296.0=x 从以上 3种结果可见 ,迭代法加速技术效果比较明显 5.1)4( 0 =x如果将初值改为 3 13 1 += + k k xx迭代格式 显然不收敛 3 1)( 3)1()2( += k k xx kkk kk kk xxx xxxx +? ??= + )1()2( 2)1()2( )2( 1 2 )( x0 = 1.5 x1 = 1.5350706 x2 = 1.5321124 x3 = 1.5320889 x4 = 1.5320889 迭代 4次 ,得到满足精度的解 532089.1=x 对迭代格式进行松弛加速 x = 1.5x = 1.5333333 x = 1.5320906 x = 1.5320889 x = 1.5320889 迭代 4次 ,得到满足精度的解 532089.1=x 对迭代格式进行 Altken加速 可见加速技术可能将不收敛的迭代法加速为收敛 希望同学们好好复习 争取考出水平 , 考出好成绩 !