数值计算-迭代法求解线性方程组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五、参考文献
[1]曹德欣,曹璎珞编. 计算方法(第二版),中国矿业大学出版社 [2]李海涛,邓樱. MATLAB 程序设计教程,高等教育出版社
六、附件
雅克比迭代法 clear A=input('请输入 A\n'); b=input('请输入 b\n'); x0=input('请输入初值\n'); D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); M=D\(L+U); x=M*x0+D\b; n=1;
if max(abs(eig(M)))<1 while norm(x-x0)>=0.000001 x0=x; x=M*x0+D\b; n=n+1; end disp('迭代次数为 ') n disp('解为')
x else
disp('雅克比迭代不收敛') return end
高斯赛德尔迭代法 clear A=input('请输入 A\n'); b=input('请输入 b\n'); x0=input('请输入初值\n'); D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); M=(D-L)\U; x=M*x0+(D-L)\b; n=1;
∑ x ( k +1) i
=
1 aii
⎡ ⎢⎢bi ⎢⎣
−
n
⎤
aij
x(jk
)
⎥ ⎥
j =1 j≠i
⎥⎦
i = 1,2,K, n, k = 0,1,2,K
(5)其中
x(0)
=
(
x(0) 1
,
x(0) 2
,L,
x(0) n
)T
为初始向量。
由此可以看出雅克比迭代公式比较简单,每迭代一次只需计算一次矩
阵和向量的乘法,在电算时需要在两组存储单元,以存放 x(k) 及 x(k+1) 。
⎡10 -1 - 2⎤ A = ⎢⎢-1 10 - 2⎥⎥
⎢⎣-1 -1 5 ⎥⎦ ⎡7.2⎤
b = ⎢⎢8.3⎥⎥ 求解 Ax = b 的解。
⎢⎣4.2⎥⎦
迭代法是解线性方程组的另外一种方法,由于它能充分避免系数矩阵 中零元的存贮与计算,因此特别适用于解系数矩阵阶数很高而非零元 极少(即大型稀疏)的线性方程组。 解线性方程组的迭代法思路与一元方程求根的迭代法类似,首先将方 程 Ax = b 转化为等价方程组 xk+1 = Mxk + g ,取初始向量 x(0) ,按下述格
即 x = B2 x + f2
其中 B2 = (D − L)−1U , f2 = (D − L)−1b
(7)
以 B2 为迭代矩阵构成的迭代法(公式) x(k+1) = B2 x(k) + f2
(8)
称 为 高 斯 赛 德 尔 迭 代 法 ( 公 式 ), 用 分 量 的 形 式 表 示 为 :
∑ ∑ x(k+1) i
迭代法
————求解线性方程组
摘要:本文分别介绍了迭代法求解线性方程组的两种方法:雅克比迭 代和高斯赛德尔迭代。通过两种不同方法的求解得出结果,并将得出 的结果进行对比,分析两种方法的优劣。 关键字:迭代法 雅克比迭代法 高斯赛德尔迭代法 线性方程组 系 数矩阵 一、问题描述与分析 使用雅克比迭代法和高斯赛德尔迭代法求解线性方程组。 例如:
迭代过程收敛,否则发散。
雅克比迭代:首先将方程组中的系数矩阵 A 分解成三部分,即:A = L+D+U,其中 D 为对角阵,L 为下三角矩阵,U 为上三角矩阵。之后确 定迭代格式, xk+1 = Mxk + g ,其中 M 称为迭代矩阵,雅克比迭代法中 一般记为 J。(k = 0,1,......) 再选取初始迭代向量 X^(0), 开始逐次迭代。 设 Ax = b ,其中 A=D+L+U 为非奇异矩阵,且对角阵 D 也非奇异,则当 迭代矩阵 J 的谱半径 p(J) < 1 时,雅克比迭代法收敛。 考虑线性方程组 Ax =b 时,一般当 A 为低阶稠密矩阵时,用主元消去 法解此方程组是有效方法。但是,对于由工程技术中产生的大型稀疏 矩阵方程组(A 的阶数很高,但零元素较多,例如求某些偏微分方程 数值解所产生的线性方程组),利用迭代法求解此方程组就是合适的, 在计算机内存和运算两方面,迭代法通常都可利用 A 中有大量零元素 的特点。雅克比迭代法就是众多迭代法中比较早且较简单的一种,其 命名也是为纪念普鲁士著名数学家雅可比。
能收敛的更快。据这种想法构造的迭代方法称为高斯赛德尔迭代法。
把矩阵 A 分解成 A = D − L −U
(6)
其中 D = diag(a11, a22,L, ann ) , - L,−U 分别为 A 的主对角元除外的下三角 和上三角部分,于是,方程组(1)便可以写成: (D − L)x = Ux + b
冲掉
x(k) i
,以
便存放近似解。
三、调试过程和运行结果
1.计算机配置 下面是试验时的计算机配置:
安装内存:2.00GB CPU:2.1GHz 系统类型:32 位 Matlab 版本:7.12.0.635(R2011a)
2.雅克比迭代法
请输入 A [10,-1,-2;-1,10,-2;-1,-1,5] 请输入 b [7.2;8.3;4.2] 请输入初值 [0;0;0] 迭代次数为
2.高斯赛德尔迭代法
是在雅克比迭代的基础上做了一部分相应的变化。雅可比迭代的优
点是公式简单,但在求
x(i k
来自百度文库
+1)时,前面已求出的最新分量
x1(
k
+1)
,L,
x(k +1) i −1
未
被利用,从直观上看,应用迭代所得的新值应比旧值好。因此,如果
没计算出一个新的分量便立即用它取代对应的旧的分量进行迭代,可
为高斯赛德尔迭代法。
二、算法设计思路与描述
1.雅克比迭代法
设线性方程组 Ax = b
(1)
的 系 数 矩 阵 A 可 逆 且 主 对 角 元 素 a11, a22,L, ann 均 不 为 零 , 令
D = diag(a11, a22 ,L, ann )
并将 A 分解成 A = (A − D) + D
n=
15
解为
x=
1.1000 1.2000 1.3000
3.高斯赛德尔迭代法
请输入 A [10,-1,-2;-1,10,-2;-1,-1,5] 请输入 b [7.2;8.3;4.2] 请输入初值 [0;0;0] 迭代次数为
n=
9
解为
x=
1.1000 1.2000 1.3000
四、总结
由上面例子的求解结果可以看出,虽然两种方法所解出的答案是相同 的,但是高斯赛德尔迭代法的迭代次数要小于雅克比迭代法的迭代次 数,也就是说高斯赛德尔迭代法很可能比雅克比迭代法收敛的快,计 算效率更高。雅克比迭代法的优点明显,计算公式简单,每迭代一次 只需计算一次矩阵和向量的乘法,且计算过程中原始矩阵 A 始终不 变,比较容易并行计算。然而这种迭代方式收敛速度较慢,而且占据 的存储空间较大,所以工程中一般不直接用雅克比迭代法,而用其改 进方法。即可改用高斯赛德尔迭代法,这样能提高求解速度。
=
1 an
⎡ ⎢bi ⎣
−
i−1 j=1
a x(k+1) ij j
−
n
aij
x(k+1) j
⎤ ⎥
j=i+1
⎦
i =1,2,L,n,k =0,1,2,K
(9)
由此看出,高斯赛德尔迭代法的一个明显的优点是,在电算时,只需
一组存储单元计算出 xi(k+1) 后 xi(k) 不再使用,所以用
x(k +1) i
if max(abs(eig(M)))<1 while norm(x-x0)>=0.000001
x0=x; x=M*x0+(D-L)\b; n=n+1; end disp('迭代次数为 ') n disp('解为') x else disp('高斯-赛德尔迭代不收敛') return end
式迭代 xk+1 = Mxk + g 生成向量序列 x(1) , x(2) ,L, x(k) ,L, 若此序列收敛于 x* , 则有 x* = Mx* + g ,即 x* 为原方程组之解。因此,可根据精度要求选择 一个合适的 x(k) 作为近似解,这就是解线性方程组的迭代法。
x* = Mx* + g 为迭代格式,M 为迭代矩阵,若序列 {x(k)}极限存在,称此
(2)
从而(1)可写成 Dx = (D − A)x + b
令 x = B1x + f1 ,其中 B1 = I − D−1A, f1 = D−1b
(3)
以 B1 为迭代矩阵的迭代法(公式) x(k+1) = B1x(k) + f1 (4)
称 为 雅 克 比 迭 代 法 ( 公 式 ), 用 向 量 分 量 来 表 示 为 ,
高斯赛德尔迭代法:是在雅克比迭代的基础上做了一部分相应的变
化。雅可比迭代的优点是公式简单,但在求 x(i k+1)时,前面已求出的最
新分量 x1(
k
+1)
,L,
x(k +1) i −1
未被利用,从直观上看,应用迭代所得的新值应
比旧值好。因此,如果没计算出一个新的分量便立即用它取代对应的
旧的分量进行迭代,可能收敛的更快。据这种想法构造的迭代方法称
[1]曹德欣,曹璎珞编. 计算方法(第二版),中国矿业大学出版社 [2]李海涛,邓樱. MATLAB 程序设计教程,高等教育出版社
六、附件
雅克比迭代法 clear A=input('请输入 A\n'); b=input('请输入 b\n'); x0=input('请输入初值\n'); D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); M=D\(L+U); x=M*x0+D\b; n=1;
if max(abs(eig(M)))<1 while norm(x-x0)>=0.000001 x0=x; x=M*x0+D\b; n=n+1; end disp('迭代次数为 ') n disp('解为')
x else
disp('雅克比迭代不收敛') return end
高斯赛德尔迭代法 clear A=input('请输入 A\n'); b=input('请输入 b\n'); x0=input('请输入初值\n'); D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); M=(D-L)\U; x=M*x0+(D-L)\b; n=1;
∑ x ( k +1) i
=
1 aii
⎡ ⎢⎢bi ⎢⎣
−
n
⎤
aij
x(jk
)
⎥ ⎥
j =1 j≠i
⎥⎦
i = 1,2,K, n, k = 0,1,2,K
(5)其中
x(0)
=
(
x(0) 1
,
x(0) 2
,L,
x(0) n
)T
为初始向量。
由此可以看出雅克比迭代公式比较简单,每迭代一次只需计算一次矩
阵和向量的乘法,在电算时需要在两组存储单元,以存放 x(k) 及 x(k+1) 。
⎡10 -1 - 2⎤ A = ⎢⎢-1 10 - 2⎥⎥
⎢⎣-1 -1 5 ⎥⎦ ⎡7.2⎤
b = ⎢⎢8.3⎥⎥ 求解 Ax = b 的解。
⎢⎣4.2⎥⎦
迭代法是解线性方程组的另外一种方法,由于它能充分避免系数矩阵 中零元的存贮与计算,因此特别适用于解系数矩阵阶数很高而非零元 极少(即大型稀疏)的线性方程组。 解线性方程组的迭代法思路与一元方程求根的迭代法类似,首先将方 程 Ax = b 转化为等价方程组 xk+1 = Mxk + g ,取初始向量 x(0) ,按下述格
即 x = B2 x + f2
其中 B2 = (D − L)−1U , f2 = (D − L)−1b
(7)
以 B2 为迭代矩阵构成的迭代法(公式) x(k+1) = B2 x(k) + f2
(8)
称 为 高 斯 赛 德 尔 迭 代 法 ( 公 式 ), 用 分 量 的 形 式 表 示 为 :
∑ ∑ x(k+1) i
迭代法
————求解线性方程组
摘要:本文分别介绍了迭代法求解线性方程组的两种方法:雅克比迭 代和高斯赛德尔迭代。通过两种不同方法的求解得出结果,并将得出 的结果进行对比,分析两种方法的优劣。 关键字:迭代法 雅克比迭代法 高斯赛德尔迭代法 线性方程组 系 数矩阵 一、问题描述与分析 使用雅克比迭代法和高斯赛德尔迭代法求解线性方程组。 例如:
迭代过程收敛,否则发散。
雅克比迭代:首先将方程组中的系数矩阵 A 分解成三部分,即:A = L+D+U,其中 D 为对角阵,L 为下三角矩阵,U 为上三角矩阵。之后确 定迭代格式, xk+1 = Mxk + g ,其中 M 称为迭代矩阵,雅克比迭代法中 一般记为 J。(k = 0,1,......) 再选取初始迭代向量 X^(0), 开始逐次迭代。 设 Ax = b ,其中 A=D+L+U 为非奇异矩阵,且对角阵 D 也非奇异,则当 迭代矩阵 J 的谱半径 p(J) < 1 时,雅克比迭代法收敛。 考虑线性方程组 Ax =b 时,一般当 A 为低阶稠密矩阵时,用主元消去 法解此方程组是有效方法。但是,对于由工程技术中产生的大型稀疏 矩阵方程组(A 的阶数很高,但零元素较多,例如求某些偏微分方程 数值解所产生的线性方程组),利用迭代法求解此方程组就是合适的, 在计算机内存和运算两方面,迭代法通常都可利用 A 中有大量零元素 的特点。雅克比迭代法就是众多迭代法中比较早且较简单的一种,其 命名也是为纪念普鲁士著名数学家雅可比。
能收敛的更快。据这种想法构造的迭代方法称为高斯赛德尔迭代法。
把矩阵 A 分解成 A = D − L −U
(6)
其中 D = diag(a11, a22,L, ann ) , - L,−U 分别为 A 的主对角元除外的下三角 和上三角部分,于是,方程组(1)便可以写成: (D − L)x = Ux + b
冲掉
x(k) i
,以
便存放近似解。
三、调试过程和运行结果
1.计算机配置 下面是试验时的计算机配置:
安装内存:2.00GB CPU:2.1GHz 系统类型:32 位 Matlab 版本:7.12.0.635(R2011a)
2.雅克比迭代法
请输入 A [10,-1,-2;-1,10,-2;-1,-1,5] 请输入 b [7.2;8.3;4.2] 请输入初值 [0;0;0] 迭代次数为
2.高斯赛德尔迭代法
是在雅克比迭代的基础上做了一部分相应的变化。雅可比迭代的优
点是公式简单,但在求
x(i k
来自百度文库
+1)时,前面已求出的最新分量
x1(
k
+1)
,L,
x(k +1) i −1
未
被利用,从直观上看,应用迭代所得的新值应比旧值好。因此,如果
没计算出一个新的分量便立即用它取代对应的旧的分量进行迭代,可
为高斯赛德尔迭代法。
二、算法设计思路与描述
1.雅克比迭代法
设线性方程组 Ax = b
(1)
的 系 数 矩 阵 A 可 逆 且 主 对 角 元 素 a11, a22,L, ann 均 不 为 零 , 令
D = diag(a11, a22 ,L, ann )
并将 A 分解成 A = (A − D) + D
n=
15
解为
x=
1.1000 1.2000 1.3000
3.高斯赛德尔迭代法
请输入 A [10,-1,-2;-1,10,-2;-1,-1,5] 请输入 b [7.2;8.3;4.2] 请输入初值 [0;0;0] 迭代次数为
n=
9
解为
x=
1.1000 1.2000 1.3000
四、总结
由上面例子的求解结果可以看出,虽然两种方法所解出的答案是相同 的,但是高斯赛德尔迭代法的迭代次数要小于雅克比迭代法的迭代次 数,也就是说高斯赛德尔迭代法很可能比雅克比迭代法收敛的快,计 算效率更高。雅克比迭代法的优点明显,计算公式简单,每迭代一次 只需计算一次矩阵和向量的乘法,且计算过程中原始矩阵 A 始终不 变,比较容易并行计算。然而这种迭代方式收敛速度较慢,而且占据 的存储空间较大,所以工程中一般不直接用雅克比迭代法,而用其改 进方法。即可改用高斯赛德尔迭代法,这样能提高求解速度。
=
1 an
⎡ ⎢bi ⎣
−
i−1 j=1
a x(k+1) ij j
−
n
aij
x(k+1) j
⎤ ⎥
j=i+1
⎦
i =1,2,L,n,k =0,1,2,K
(9)
由此看出,高斯赛德尔迭代法的一个明显的优点是,在电算时,只需
一组存储单元计算出 xi(k+1) 后 xi(k) 不再使用,所以用
x(k +1) i
if max(abs(eig(M)))<1 while norm(x-x0)>=0.000001
x0=x; x=M*x0+(D-L)\b; n=n+1; end disp('迭代次数为 ') n disp('解为') x else disp('高斯-赛德尔迭代不收敛') return end
式迭代 xk+1 = Mxk + g 生成向量序列 x(1) , x(2) ,L, x(k) ,L, 若此序列收敛于 x* , 则有 x* = Mx* + g ,即 x* 为原方程组之解。因此,可根据精度要求选择 一个合适的 x(k) 作为近似解,这就是解线性方程组的迭代法。
x* = Mx* + g 为迭代格式,M 为迭代矩阵,若序列 {x(k)}极限存在,称此
(2)
从而(1)可写成 Dx = (D − A)x + b
令 x = B1x + f1 ,其中 B1 = I − D−1A, f1 = D−1b
(3)
以 B1 为迭代矩阵的迭代法(公式) x(k+1) = B1x(k) + f1 (4)
称 为 雅 克 比 迭 代 法 ( 公 式 ), 用 向 量 分 量 来 表 示 为 ,
高斯赛德尔迭代法:是在雅克比迭代的基础上做了一部分相应的变
化。雅可比迭代的优点是公式简单,但在求 x(i k+1)时,前面已求出的最
新分量 x1(
k
+1)
,L,
x(k +1) i −1
未被利用,从直观上看,应用迭代所得的新值应
比旧值好。因此,如果没计算出一个新的分量便立即用它取代对应的
旧的分量进行迭代,可能收敛的更快。据这种想法构造的迭代方法称