#数值计算_第4章 解线性方程组的迭代法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定理4.5若方程组系数矩阵A为列或行对角优时,则高斯塞德尔迭代收敛。
定理4.6若方程组系数矩阵A为对称正定阵,则高斯塞德尔迭代收敛。
例4.3方程组 中, ,
证明当 时Gauss-Seidel法收敛,而Jacobi迭代法只在 时才收敛。
解:对 法,因为 是对称矩阵,因此只要证 时 正定即可,由顺序主子
雅可比迭代的核心部分:
WHILE
for(u:=1;u<=n,u++) x1[u]:=x2[u]
for(i:=1;j<=n;j++)
{ s:=g[i];
for(j:=1;i<=n;i++)
{ s:=s+b[i] x2[j]} //注意x2[j]
}
ENDWHILE
在高斯-赛德尔迭代计算中并不需要形成迭代矩阵 ,由式(4.5)可知在计算中只要形成矩阵 在程序中令向量
第4章解线性方程组的迭代法
用迭代法求解线性方程组 和第4章非线性方程求根的方法相似,对方程组 进行等价变换,构造同解方程组 (对 可构造各种等价方程组,如分解 , 可逆,则由 得到 ),以此构造迭代关系式
(4.1)
任取初始向量 ,代入迭代式中,经计算得到迭代序列 。
若迭代序列 收敛,设 的极限为 ,对迭代式两边取极限
int main( )
{ int n;
int I, j, k;
double err;
static double a [MAX-N] [MAX-N],b[MAX-N] [MAX-N],c[MAX-N],g [MAX-N];
static double x[MAX-N],nx[MAX-N];
printf(〃\nInput n value(dim of Ax=c):〃); //输入方程的维数
。它的核心部分是计算迭代式 ,计算中只需及时将 放到 的位置上。
高斯-塞德尔迭代的核心部分:
WHILE
for(u:=1;u<=n;u++) x1[u]:=x2[u]
for(i:=1;j<=n;j++)
{ s:=g[i];
for(j:=1;j<=n;j++)
{ s:=s+b[i] x2[ j ]} //注意x2[j]
scanf(〃%d〃,&n);
if(n>MAX-N)
{
printf(〃The input n is larger then MAX-N,please redefine the MAX-N.\n〃);

不难看出, 正是迭代式(4.3)的迭代矩阵, 是常数项向量。于是式(4.3)可写成矩阵形式:
(4.4)
ቤተ መጻሕፍቲ ባይዱ其中:
雅可比迭代算法
下面描述解线性方程组 的雅可比迭代算法,为了简单起见,在算法中假定矩阵 满足雅可比迭代要求,即 ,并设由系数矩阵 构造迭代矩阵 是收敛的。
1.定义和输入系数矩阵 和常数项向量 的元素。
解:方程的迭代格式:
取初始值 有
时,
时,
计算结果如表4.2所示。
表4.2计算结果
0
1
2
3
4
000
-2.52.11.142.5
-0.882.0040.98761.62
-1.00421.99841.00060.1242
-1.00052.00021.00000.0037
高斯—塞德尔迭代矩阵

写成等价矩阵表达式:

得到
而 ,

由系数矩阵 构造的雅可比迭代矩阵收敛。
(如矩阵 既是行对角占优阵,也是列对角占优阵)
定理4.4若方程组系数矩阵 为对称正定阵,并且 也为对称正定,则雅可比迭代收敛。
4.2高斯-塞德尔(Gauss-Seidel)迭代法
高斯-赛德尔迭代计算
在雅可比迭代中,用 的值代入方程(4.2)中计算出 的值, 的计算公式是
-0.9575
1.9864
0.9847
0.0816
5
-1.01445
1.98844
0.99711
0.05695
6
-1.00722
2.00231
1.0026
0.01387
7
-0.997543
2.00197
1.00049
0.009687
方程组的准确解是
4.1.2雅可比迭代收敛条件
对于方程组 ,构造雅可比迭代格式 其中 , 。当迭代矩阵的谱半径 时,迭代收敛,这是收敛的充分必要条件。迭代矩阵的某范数 时,迭代收敛。要注意的是范数小于1只是判断迭代矩阵收敛的充分条件,当迭代矩阵的一种范数||B||>1,并不能确定迭代矩阵是收敛还是发散。例如, ,则 ,但它的特征值是0.9和0.8。 是收敛矩阵。
构造迭代形式:
有 (4.6)
则高斯-塞德尔迭代式(4.4)为
(4.7)
称为高斯-塞德尔迭代矩阵。
高斯-塞德尔迭代算法
高斯—塞德尔迭代的程序实现和雅可比迭代步骤大致相同,对于方程组 ,在前面的雅可比算法中,假定雅可比迭代矩阵为 表示 表示 ,其迭代核心部分是 。下面的算法给出由 和 计算 的过程,省略了形成迭代矩阵 和对 初始化的部分。
//x2[u]:=s;
ENDWHILE
5.输出方程组的解
例4.1用雅可比方法解下列方程组:
解:方程的迭代格式:

雅可比迭代收敛。
取初始值 ,计算结果由表4.1所示。
表4.1计算结果
0
1
1
1
1
-1.5
1.6
0.9
0.25
2
-1.25
2.08
1.09
0.48
3
-0.915
2.068
1.017
0.335
4
由逆矩阵的定义 令 ,有
化为 个方程组
j
是第 个分量为1,其余分量为0的 维向量。或记为: 。
用直接法或迭代法算出 也就完成了逆矩阵 计算。
如果依次对 用高斯若尔当消元法,组合起来看有(当然也能组合起来做):
这正是在线性代数中用初等变换计算逆矩阵的方法。
由此可见,计算一个 阶逆矩阵的工作量相当于解 个线性方程组。在数值计算中常常将计算矩阵逆的问题转化为解线性方程组的问题。
事实上,在计算 前,已经得到 的值,不妨将已算出的分量直接代入迭代式中,及时使用最新计算出的分量值。因此 的计算公式可改为:
即用向量 计算出 的值,用向量 计算出 的值 ,用向量 计算出 的值,这种迭代格式称为高斯—塞德尔迭代。
对于方程组AX=y,如果由它构造高斯-塞德尔迭代和雅可比迭代都收敛,那么,多数情况下高斯—塞德尔迭代比雅可比迭代的收敛效果要好,但是情况并非总是如此。

而 得 于是得到 时 故 对称正定, 法收敛。
对 法,可根据定理4.2,由于迭代矩阵

是 法收敛的充要条件,故 法只在 时才收敛。
当 时, 法收敛,而 , 法不收敛,此时 不是正定的。
4.3
逐次超松弛迭代计算
方程组 的雅可比迭代形式 记 其中 是下三角矩阵, 是上三角矩阵。
得高斯-塞德尔的迭代形式:
当方程组的系数矩阵 具有某些性质时,可直接判定由它生成的雅可比迭代矩阵是收敛的。
定理4.3若方程组 的系数矩阵 ,满足下列条件之一,则其雅可比迭代法是收敛的。
(1) 为行对角占优阵,即
(2) 为列对角占优阵,即
证明:(1)雅可比迭代矩阵 其中
(2) 为列对角优阵,故 为行对角占优阵,由系数矩阵 构造的迭代矩阵 为行对角占优阵,则有
2.FOR i:=1,2,…,n
{ //假定 ,形成常数项向量
FOR j:=1,2,…,n
} //形成迭代矩阵元素
3.
//赋初始值,x1和x2分别表示 和
4.WHILE
x1:=x2
x2:=B*x1+g// FOR u:=1,2,…,n
//s:= g[u];
// FOR v:=1,2,…,ns:=s+b[u][v]*x1[v];
雅可比迭代计算
元线性方程组
(4.2)
写成矩阵形式为 。若 将式(4.2)中每个方程的 留在方程左边,其余各项移到方程右边;方程两边除以 则得到下列同解方程组:
记 ,构造迭代形式

(4.3)
迭代计算式(4.3)称为简单迭代或雅可比迭代。任取初始向量 ,由式(4.3)可得到迭代向量序列
雅可比迭代矩阵

由 ,得到等价方程:
即 是方程组 的解,此时称迭代法收敛,否则称迭代法发散。我们将看到,不同于非线性方程的迭代方法,解线性方程组的迭代收敛和否完全决定于迭代矩阵的性质,和迭代初始值的选取无关。迭代法的优点是占有存储空间少,程序实现简单,尤其适用于大型稀疏矩阵;不尽人意之处是要面对判断迭代是否收敛和收敛速度的问题。
可以证明迭代矩阵的和谱半径 是迭代收敛的充分必要条件,其中 是矩阵 的特征根。事实上,若 为方程组 的解,则有
取初始值:
如果用高斯-赛德尔迭代法 迭代72次得:
用SOR迭代法 ,只须迭代25次即得:
逐次超松弛迭代算法
下列算法假定迭代矩阵收敛,否则要在WHILE循环中增加判断条件。
1.定义和输入系数矩阵 和常数项向量 的元素,输入松弛因子 的值。
2.FOR i:=1,2,…,n
//假定 ,形成常数项向量
FOR
//Purpose:雅可比迭代求解线性方程组//
/////////////////////////////////////////
#include<stdio.h>
#include<stdio.h>
#define MAX-N 20 //方程的最大维数
#define MAXREPT 100
#define epsilon 0.00001 //求解精度
通常,把 的迭代称为亚松弛迭代,把 的迭代称为高斯-塞德尔迭代,而把 的迭代称为松弛迭代。
4.4
在线性代数中逆矩阵是按其伴随矩阵定义的,若 则方阵 可逆,且 ,其中 为 的伴随矩阵。要计算 个 阶的列式才能得到一个伴随矩阵,在数值计算中因其计算工作量大而不被采用。通常对 做行的初等的效换,在将 化成 的过程中得到 。在数值计算中,这仍然是一种行之有效的方法。
构造方程组 的高斯-塞德尔迭代格式的步骤和雅可比类似,设 将式(4.1)中每个方程的 留在方程的左边,其余各项都移到方程的右边;方程两边除以 ,得到下列同解方程组:
记 ,对方程组对角线以上的 取第 步迭代的数值,对角线以下的 取第 步迭代的数值,构造高斯—塞德尔迭代形式:
(4.5)
例4.2用高斯-塞德尔方法解方程组:
记 ,有
这样 可视为 的修正量,而 恰是由 加修正量 而得,如果将 改为 )加上修正量 乘一个因子 ,迭代格改为:
整理得
(4.8)
这里 为修正因子,称为松弛因子,而式(4.8)称为松弛迭代。迭代的分量形式为
(4.9)
式(4.9)称为松弛迭代的计算格式。
例4.4给定方程组
用SOR法求解,取
解:用SOR迭代公式可得
}
3.
4. WHILE
;
}
ENDWHILE
5.输出 .
松弛迭代矩阵
将式(4.9)中含有 和 的项分别放在方程两边:
用 代入上式,有
则松弛因子为 的迭代矩阵为
其中
定理4.7逐次超松弛迭代收敛的必要条件 。
定理4.8若 为正定矩阵,则当 时,逐次超松弛迭代恒收敛。
以上定理给出了逐次超松弛迭代因子的范围。对于每个给定的方程组,确定 究竟取多少为最佳,这是比较困难的问题,对某些特定的方程组,我们可以得到一些理论结果。
例如,已知方阵 和向量 有迭代关系式 ,在计算中不是先算出 ,再作 和 的乘积得到 ;而将 作为线性方程组系数矩阵,求解方程组 作为常驻数项解出 。
4.5
程序4.1用雅可比迭代求解方程组:
算法描述
输入系数矩阵 及常数项向量c。
按雅可比迭代公式:
求解 。
程序源码
/////////////////////////////////////////
于是,只要迭代矩阵 满足 或 ,就可以判断迭代序列 是收敛的。
要注意的是,当 或 时,可以有 ,因此不能判断迭代序列发散。
在计算中当相邻两次的向量误差的某种范数 小于给定精度时,则停止迭代计算,视 为方程组 的近似解(有关范数的详细定义请看3.3节。)
4.1雅可比(Jacobi)迭代法
4.1.1雅可比迭代格式
再由迭代式 可得到
由线性代数定理, 的充分必要条件 。
因此对迭代法(4.1)的收敛性有以下两个定理成立。
定理4.1迭代法 收敛的充要条件是 。
定理4.2迭代法 收敛的充要条件是迭代矩阵 的谱半径
因此,称谱半径小于1的矩阵为收敛矩阵。计算矩阵的谱半径,需要求解矩阵的特征值才能得到,通常这是较为繁重的工作。但是可以通过计算矩阵的范数等方法简化判断收敛的工作。前面已经提到过,若||A||p矩阵 的范数,则总有 。因此,若 ,则 必为收敛矩阵。计算矩阵的1范数和 范数的方法比较简单,其中
x2[i]:=s }
ENDWHILE
上列算法是在假定迭代收敛的前提下,使用当型(WHILE)结构控制循环。更一般地,可将上列算法中WHILE循环改为FOR循环,通过控制循环次数和观测计算误差终止循环。届将上列算法中WHILE语句改为
WHILE 循环次数
这时在程序中要增加循环变量的设定和运算。
判断高斯塞德尔迭代收敛的方法和判断雅可比迭代收敛类似,一方面从高斯-塞德尔迭代矩阵 获取信息,当 或 的某种范数 时,迭代收敛;另一方面,直接根据方程组系数矩阵的特点作出判断。
相关文档
最新文档