雅可比,高斯-赛德尔以及SOR迭代法

合集下载

高斯—塞德尔迭代法

高斯—塞德尔迭代法
(2)按行弱对角占优:
上式至少有一个不等号严格成立。
*定义 每行每列只有一个元素是1,其余 元素是零的方阵称为置换阵(或排列阵).
定理8(对角占优定理)若矩阵A按行(或列)严格对角占优 或按行(或列)弱对角占优且不可约;则矩阵A非奇异。
定理9 若矩阵A按行(或列)严格对角占优,或按行(或列) 对角占优不可约;则Jacobi迭代、Gauss-Seidel迭代都 收敛。
高斯—塞德尔迭代法又等价于:对k=0,1,…,
三、逐次超松驰(SOR)迭代法
SOR迭代法的计算公式:对k=0,1,…,
说明:1)ω=1,GS; 2)ω>1超松驰,ω<1低松驰;
3)控制迭代终止的条件: 例3 用上述迭代法解线性代数方程组
初值x(0)=0,写出计算格式。
四、三种迭代法的收敛性
定理7 对线性方程组Ax=b,A,D非奇异,则 Jacobi迭代法收敛的充要条件是 GS迭代法收敛的充要条件是 SOR迭代法收敛的充要条件是 定义6 (1)按行严格对角占优:
证明 若矩阵A按行严格对角占优,或按行(或列)弱对角占优不可
则GS迭代收敛。假若不然,ρ(BG)≥1,即迭代矩阵BG的某一特征 值λ使得|λ|≥1,并且
类似地,若矩阵A按行严格对角占优,或按行(或列)弱对角占优不
可约,则Jacobi迭代收敛。假若不然,ρ(BJ)≥1,即迭代矩阵BJ 的某一特征值λ使得|λ|≥1,并且
定理10 对线性方程组Ax=b,若A为对称正定矩阵,则 1)GS迭代法收敛. 2)若2D-A也是对称正定矩阵,则Jacobi迭代法收敛。
例8 见书上
定理12 对于线性方程组Ax=b,若A为对称正定矩阵,则
当0<ω<2时,SOR迭代收敛. 证明 只需证明λ<1(其中λ为Lω的任一特征值) .

线性方程组的几种求解方法

线性方程组的几种求解方法

线性方程组的几种求解方法1.高斯消元法高斯消元法是求解线性方程组的一种常用方法。

该方法的基本思想是通过对方程组进行一系列简化操作,使得方程组的解易于求得。

首先将方程组表示为增广矩阵,然后通过一系列的行变换将增广矩阵化为行简化阶梯形,最后通过回代求解出方程组的解。

2.列主元高斯消元法列主元高斯消元法是在高斯消元法的基础上进行改进的方法。

在该方法中,每次选取主元时不再仅仅选择当前列的第一个非零元素,而是从当前列中选取绝对值最大的元素作为主元。

通过选取列主元,可以避免数值稳定性问题,提高计算精度。

3.LU分解法LU分解法是一种将线性方程组的系数矩阵分解为一个下三角矩阵L 和一个上三角矩阵U的方法。

首先进行列主元高斯消元法得到行阶梯形矩阵,然后对行阶梯形矩阵进行进一步的操作,得到L和U。

最后通过回代求解出方程组的解。

4.追赶法(三角分解法)追赶法也称为三角分解法,适用于系数矩阵是对角占优的三对角矩阵的线性方程组。

追赶法是一种直接求解法,将系数矩阵分解为一个下三角矩阵L和一个上三角矩阵U,然后通过简单的代数运算即可求得方程组的解。

5.雅可比迭代法雅可比迭代法是一种迭代法,适用于对称正定矩阵的线性方程组。

该方法的基本思想是通过不断迭代求解出方程组的解。

首先将方程组表示为x=Bx+f的形式,然后通过迭代计算不断逼近x的解。

6.高斯-赛德尔迭代法高斯-赛德尔迭代法是雅可比迭代法的改进方法。

该方法在每一次迭代时,使用已经更新的解来计算新的解。

相比于雅可比迭代法,高斯-赛德尔迭代法的收敛速度更快。

7.松弛因子迭代法松弛因子迭代法是一种对高斯-赛德尔迭代法的改进方法。

该方法在每一次迭代时,通过引入松弛因子来调节新解与旧解之间的关系。

可以通过选择合适的松弛因子来加快迭代速度。

以上是一些常用的线性方程组求解方法,不同的方法适用于不同类型的线性方程组。

在实际应用中,根据问题的特点和要求选择合适的求解方法可以提高计算的效率和精度。

计算方法3_线性方程组迭代解法

计算方法3_线性方程组迭代解法

计算方法3_线性方程组迭代解法线性方程组的迭代解法是解决线性方程组的一种常见方法,常用于大规模的线性方程组求解。

该方法通过不断迭代更新解的近似值,直到满足一定的收敛准则为止。

线性方程组的迭代解法有很多种,其中最经典的是雅可比迭代法、高斯-赛德尔迭代法和超松弛迭代法。

本文将分别介绍这三种迭代解法及其计算方法。

雅可比迭代法是一种比较简单的线性方程组迭代解法,它的基本思想是先将线性方程组转化为对角占优的形式,然后通过迭代求解逐渐接近精确解。

雅可比迭代法的迭代公式为:其中,x^(k+1)是第k+1次迭代的近似解,n是未知数的个数,a_ij 是系数矩阵A的元素,f_i是方程组的右端向量的元素。

雅可比迭代法的计算步骤如下:1.将线性方程组转化为对角占优的形式,即保证矩阵A的对角元素绝对值大于其它元素的绝对值。

2.初始化向量x^(0),设定迭代终止准则。

3.根据雅可比迭代公式,计算x^(k+1)。

4.判断迭代终止准则是否满足,如果满足,则停止迭代,返回近似解x^(k+1);否则,继续进行下一次迭代。

高斯-赛德尔迭代法是雅可比迭代法的改进方法,它的基本思想是在每次迭代计算x^(k+1)时,利用已经计算出的近似解作为x的一部分。

高斯-赛德尔迭代法的迭代公式为:其中,x^(k+1)_i是第k+1次迭代的近似解中第i个未知数的值,x^(k)_i是第k次迭代的近似解中第i个未知数的值。

高斯-赛德尔迭代法的计算步骤如下:1.将线性方程组转化为对角占优的形式。

2.初始化向量x^(0),设定迭代终止准则。

3.根据高斯-赛德尔迭代公式,计算x^(k+1)。

4.判断迭代终止准则是否满足,如果满足,则停止迭代,返回近似解x^(k+1);否则,继续进行下一次迭代。

超松弛迭代法是对高斯-赛德尔迭代法的一种改进方法,它引入了松弛因子ω,通过调整参数ω的值,可以加快迭代的收敛速度。

超松弛迭代法的迭代公式为:其中,0<ω<2,x^(k+1)_i是第k+1次迭代的近似解中第i个未知数的值,x^(k)_i是第k次迭代的近似解中第i个未知数的值。

雅可比,高斯-赛德尔以及SOR迭代法

雅可比,高斯-赛德尔以及SOR迭代法
for(i=1;i<n+1;i++)
{
float t=0.0;
for(j=1;j<n+1;j++)
{
if(j==i)
continue;
t=t+a[i][j]*xk[j];
}
xl[i]=(b[i]-t)/a[i][i];
}
t=0.0;
for(i=1;i<n+1;i++)
{
tt=fabs(xl[i]-xk[i]);
if(t>p)
{
k++;
SOR(xk);
}
else
{
printf("\nReach the given precision!\n");
printf("\nCount number is %d\n",k);
}
}
for(i=1;i<n+1;i++)
xk[i]=xl[i];
if(k+1>c)
{
if(t<=p)
printf("\nReach the given precision!\n");
else
printf("\nover the maximal count!\n");
printf("\nCount number is %d\n",k);
t=t+a[i][j]*xl[j];
for(j=i+1;j<n+1;j++)
tt=tt+a[i][j]*xk[j];

类矩阵两种迭代法的收敛性比较

类矩阵两种迭代法的收敛性比较

类矩阵两种迭代法的收敛性比较引言:在科学计算中,线性方程组的求解是很普遍的问题。

尤其是在大型科学计算中,线性方程组的求解是最重要的任务之一。

线性方程组的求解有很多种方法,例如高斯消元法、LU分解法、迭代法等等,其中迭代法是一种高效的方法。

迭代法的思想是从一个初值解开始,逐步改进解的准确度,直到满足误差要求。

在本文中,我们将讨论两种类矩阵迭代法的收敛性比较,即雅可比迭代法和高斯-赛德尔迭代法。

1.雅可比迭代法(Jacobi Iterative Method):雅可比迭代法是最简单的迭代法之一。

它是基于线性方程组的矩阵形式 Ax=b,将 A 分解成 A=D-L-U(D为A的对角线元素,L为A的下三角矩阵,U为A的上三角矩阵),其中 D 为对角线元素,L为严格下三角矩阵,U 为严格上三角矩阵。

则有如下迭代关系式: x^{(k+1)}=D^{-1}(L+U)x^{(k)}+D^{-1}b (1)其中,x^{(k)} 为 k 次迭代后的解,x^{(0)} 为初始解。

雅可比迭代法的迭代矩阵为M = D^{-1}(L+U)。

以下是雅可比迭代法的收敛性分析:定理1:若矩阵 A 为对称正定矩阵,则雅可比迭代法收敛。

证明:由于 A 为对称正定矩阵,所以存在唯一的解。

假设迭代后得到的解为 x^{(k)},则我们可以用误差向量 e^{(k)} = x-x^{(k)} 表示剩余项,则有 Ax^{(k)}-b = e^{(k)}。

对 (1) 式两边同时乘以 A^-1,得:x^{(k+1)}=x^{(k)}-A^{-1}e^{(k)}。

(2)将 (2) 式代入 Ax^{(k)}-b = e^{(k)} 中,得:Ax^{(k+1)}-b = Ae^{(k)}.(3)由于 A 为对称正定矩阵,则存在 A=Q\\Lambda Q^{-1},其中Q 为正交矩阵,\\Lambda 为对角矩阵。

因此,我们可以将 (3) 式转化为:\\| x^{(k+1)}-x \\|_{A} =\\| Q^{-1}A^{-1}Qe^{(k)}\\|_{\\Lambda} \\leq \\rho (Q^{-1}A^{-1}Q)\\|e^{(k)}\\|_{A}。

数学实验“线性方程组的j迭代,gs迭代,sor迭代解法”实验报告(内含matlab程序代码)【最新精

数学实验“线性方程组的j迭代,gs迭代,sor迭代解法”实验报告(内含matlab程序代码)【最新精

西京学院数学软件实验任务书实验四实验报告一、实验名称:线性方程组的J-迭代,GS-迭代,SOR-迭代。

二、实验目的:熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法,编程实现雅可比方法和高斯-赛德尔方法求解非线性方程组12123123521064182514x x x x x x x x +=⎧⎪++=⎨⎪++=-⎩的根,提高matlab 编程能力。

三、实验要求:已知线性方程矩阵,利用迭代思想编程求解线性方程组的解。

四、实验原理:1、雅可比迭代法(J-迭代法):线性方程组b X A =*,可以转变为:迭代公式(0)(1)()k 0,1,2,....k k J XXB X f +⎧⎪⎨=+=⎪⎩ 其中b M f U L M A M I B J 111),(---=+=-=,称J B 为求解b X A =*的雅可比迭代法的迭代矩阵。

以下给出雅可比迭代的分量计算公式,令),....,()()(2)(1)(k n k k k X X X X =,由雅可比迭代公式有b XU L MXk k ++=+)()1()(,既有i ni j k i iji j k iij k iij b X aXa X a +--=∑∑+=-=+1)(11)()1(,于是,解b X A =*的雅可比迭代法的计算公式为⎪⎩⎪⎨⎧--==∑∑-=+=+)(1),....,(111)()()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k iTn X a X a b a X X X X X 2、 高斯-赛德尔迭代法(GS-迭代法):GS-迭代法可以看作是雅可比迭代法的一种改进,给出了迭代公式:⎪⎩⎪⎨⎧--==∑∑-=+=+++)(1),....,(111)1()1()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k iTn X a X a b a X X X X X 其余部分与雅克比迭代类似。

(完整版)第八节雅可比迭代法与高斯-塞德尔迭代法综述.doc

(完整版)第八节雅可比迭代法与高斯-塞德尔迭代法综述.doc

第八节 雅可比迭代法与高斯 —塞德尔迭代法一 雅可比迭代法设线性方程组Ax b(1)的系数矩阵 A 可逆且主对角元素 a 11,a 22,...,ann 均不为零 ,令D diag a 11 ,a 22 ,...,a nn并将 A 分解成AA D D(2)从而 (1) 可写成Dx D A x b令x B 1 xf 1其中 B 1I D 1 A, f 1 D 1b .(3)以B 1为迭代矩阵的迭代法(公式 )xk 1B 1 x kf 1(4)称为雅可比 (Jacobi) 迭代法 ( 公式 ), 用向量的分量来表示,(4) 为x i( k 1)1 n(j k )b ia i j xaiij 1j ii 1,2,...n,k 0,1,2,...(5)T其中 xx 1 0 ,x 20 ,...x n 0为初始向量 .由此看出 , 雅可比迭代法公式简单 , 每迭代一次只需计算一次矩阵和向量的乘法. 在电算时需要两组存储单元 , 以存放 x k及 x k 1 . 例1例1 用雅可比迭代法求解下列方程组10 x 1x 2 2x 3 7.2x 1 10x 22x 3 8.3x 1x 2 5x 34.2解将方程组按雅可比方法写成x 10.1x 20.2x 3 0.72 x 2 0.1x 1 0.2x 30.83x 30.2x 10.2x 20.84取初始值 xx 1 0 ,x 20 , x 3 0TT0,0,0, 按迭代公式x 1 k 10.1x 2 k0.2x 3k 0.72 x 2k 1 0.1x 1 k0.2x 3 k0.83 x 3k 1 0.2x 1 k 0.2x 2k0.84进行迭代,其计算结果如表1 所示表 1k 0 1 2 34 56 7x 1 k 00.720.9711.0571.08531.09511.0983x 2 k0.831.0701.157 1.18531.19511.19831x 3 k0.841.1501.248 1.28281.29411.29802二 高斯 — 塞德尔迭代法由雅可比迭代公式可知 , 在迭代的每一步计算过程中是用x k的全部分量来计算xk 1 的所有分量 , 显然在计算第 i 个分量 x ik 1时 , 已经计算出的最新分量 x 1 k 1 ,...,x i 1 k 1 没有被利 用,从直观上看 , 最新计算出的分量可能比旧的分量要好些. 因此,对这些最新计算出来的第 k 1的分量 xjk 1加以利用 , 就得到所谓解方程组的高斯— 塞德( Gauss-Seidel )次近似 xk 1迭代法 .把矩阵 A 分解成A DL U(6)其中Ddiag a 11 ,a 22 ,...,a nn,L , U分别为 A 的主对角元除外的下三角和上三角部分 , 于是 , 方程组 (1) 便可以写成DL x Ux b即x B 2 x f 2其中B 2 D L 1f 2U , 以B 2为迭代矩阵构成的迭代法( 公式 )xk1B x kf1D L b(7)2 2称为高斯 — 塞德尔迭代法 ( 公式 ), 用 量表示的形式为x i( k 1 )1i 1(j k 1 )b ia ij x n(8)a ij x (j k )a iij1j i 1i 1,2,n,k 0,1,2,...(9)由此看出 , 高斯 — 塞德尔迭代法的一个明显的优点是 , 在电算时 , 只需一组存储单元 ( 计算出k 1kk 1kx i后 x i 不再使用 , 所以用 x i 冲掉 x i, 以便存放近似解 .例 2 例 2 用高斯 —— 塞德尔迭代法求解例 1.取初始值x 0x 1 0 ,x 20 , x 3T解0,0,0, T,按迭代公式x 1 k 10.1x 2k0.2x 3 k 0.72 x 2k 1 0.1x 1 k 10.2x 3k0.83x 3 k 1 0.2x 1 k 10.2x 2 k 10.84进行迭代,其计算结果如下表2表 2k0 1 23456 7 x 1 k0.721.04308 1.093 1.099131.099891.099991.113x 2 k0.902 1.167191.1951.199471.199931.199991.272x 3 k1.164 1.28205 1.2971.299721.299961.31.3477从此例看出 , 高斯 — 塞德尔迭代法比雅可比迭代法收敛快( 达到同样的精度所需迭代次数少 ), 但 这个结论 , 在一定条件下才是对的 , 甚至有这样的方程组 , 雅可比方法收敛,而高斯 — 塞德尔迭代法却是发散的 .三 迭代收敛的充分条件定理 1在下列任一条件下, 雅可比迭代法 (5) 收敛 .B 1 max na ij1a iiij j1i①;B 1naij11maxaiiji 1②j i;I D 1ATmax naij1ji 1 a jj③i j定理 2设 B 1,B 2 分别为雅可比迭代矩阵与高斯 — 塞德尔迭代矩阵 , 则B 2B 1(10)从而,当B1naij1maxa iiijj 1i时,高斯 — 塞德尔迭代法 (8) 收敛 .证明由 B 1,B 2的定义 ,它们可表示成B 1D 1 L UB 21D L 1U I D 1L D 1U用 e 表示 n 维向量e1,1,...,1 T , 则有不等式B 1 e B 1 eB 1D 1 LD 1U这里 , 记号|·|表示其中矩阵的元素都取绝对值, 而不等式是对相应元素来考虑的, 于是D 1U eB 1 D 1L eID 1 L1B 1Ie容易验证nnD 1LD 1 L所以,ID1L 及ID 1L 可逆,且ID 1L 1I D 1 L ...n 1D 1 LID 1 Ln11... D 1LI D 1LID 1L1I从而有B 2 e ID 1L 1D 1U eID 1L1I D 1L 1 B I e1I1 B 1IID 1 L 1eB 1 e因此必有B 2B 1因为已知B 1 1所以 B 2 1 .即高斯 — 塞德尔迭代法收敛 .若矩阵 A 为对称,我们有 定理 3 若矩阵 A 正定 , 则高斯 — 塞德尔迭代法收敛 . 证明把实正定对称矩阵 A 分解为A D LL TUL T, 则 D 为正定的 , 迭代矩阵B 2D L 1 L T设 是B 2的任一特征值 , x 为相应的特征向量 , 则D L 1xxL T以 D L 左乘上式两端 , 并由 A D L L T 有1 L T x Ax 用向量 x 的共轭转置左乘上式两端 , 得1x T L T xx T Ax(11)求上式左右两端的共轭转置, 得1x T L x x T Ax以1和1分别乘以上二式然后相加, 得1 1 x T L TL x2x T Ax由 AD L L T ,得11x T D A x2x T Ax即221x T L x1x T Ax(12)因为 A 和 D 都是正定的 , 且 x 不是零向量 , 所以由 (11) 式得1, 而由 (12) 式得12, 即1, 从而B 21, 因而高斯 — 塞德尔迭代法收敛 .定义 1 设 Aa ijn n为 n 阶矩阵 .① ①如果na ij ,i 1,2,...na iij ij i(13)即 A 的每一行对角元素的绝对值都严格大于同行其他元素绝对值之和, 则称 A 为严格对角优势矩阵.② ②如果na ij ,aiii 1,2,...nj ij i且至少有一个不等式严格成立 , 则称 A 为弱对角优势矩阵 .2 1 0 1 1 0 13 1 1 2 1例如13 是严格对角优势矩阵,13 是弱对角优势矩阵 .A 11A 12定义 2设 A a ijn n是 n 阶矩阵,如果经过行的互换及相应列的互换可化为 0A22,即存在 n 阶排列矩阵 P, 使P T APA 11 A 120 A 22其中A 11,A22 为方阵,则称A 是可约的 , 否则称 A 为不可约的 .A 是可约矩阵 , 意味着Ax b 可经过若干次行列重排, 化为两个低阶方程组 ,事实上 ,Ax b 可化为 P T AP P T x P T b , 记P T y1 , d x y2 P T b dy d12于是,求解 Ax b 化为求解 A 11 y1A 12 y2 dA 22 y 2d1 2可以证明 , 如果 A 为严格对角优势矩阵或为不可约弱对角优势矩阵 , 则 A 是非奇异的 .定理 4 如果 A 为严格对角优势矩阵或为不可约弱对角优势矩阵, 则对任意 x 0 , 雅可比迭代 法(4) 与高斯 — 塞德尔迭代法 (8) 均为收敛的 .证明 下面我们以 A 为不可约弱对角优势矩阵为例, 证明雅可比迭代法收敛, 其他证明留给 读者 .要证明雅可比迭代法收敛,只要证 B 11,B 1是迭代矩阵 .用反证法 , 设矩阵B 1有某个特征值, 使得1, 则 det IB 10,由于 A 不可约,且具有弱对角优势,所以D 1 存在,且I B 1IID 1AD 1D A D从而det D A D另一方面,矩阵DAD与矩阵 A 的非零元素的位置是完全相同的,所以D AD也是不可约的 , 又由于1, 且 A 弱对角优势,所以na iia iia ij ,i 1,2,...nj ij i并且至少有一个 i 使不等号严格成立. 因此 , 矩阵D AD弱对角优势,故DA D为不可约弱对角优势矩阵 . 从而det D A D 0矛盾,故B1的特征值不能大于等于1,定理得证 .。

线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法

线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法

西京学院数学软件实验任务书【实验课题】雅克比迭代、高斯—赛德尔迭代、超松弛迭代 【实验目的】学习和掌握线性代数方程组的雅克比迭代、高斯—赛德尔迭代、超松弛迭代法,并且能够熟练运用这些迭代法对线性方程组进行求解。

【实验内容】 1、问题重述:对于线性方程组A b X =,即:1111221n 12112222n 21122nn n n n n n n a x a x a x b a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩ (1),其中,111212122111 0 - - 0 - 0 0 () - - - 0 n ij n nn n nn nn a a a a a a a a a a ⨯--⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥A ==--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 0n D L U ⎡⎤⎢⎥⎢⎥≡--⎢⎥⎢⎥⎣⎦()1,n b b b T=如何运用雅克比迭代、高斯—赛德尔迭代、超松弛迭代法对线性方程组进行求解。

2、方法原理: 2.1雅克比迭代迭代思想:首先通过A b X =构造形如()x f x =的等式,然后给定一个初值(0)(0)(0)(0)12(,,)n x x x X =,再通过(1)()()k k f +X =X 进行迭代。

step1 :对(1)相应第i 行中的i x 用其它元素表示为:11111121111122,12211111()()11()()11()()n nj j j j j j n ni i ij ji j j j i j i j iin nn n nj j n n nj j j j nn nn x b a x x b a x a a x b a x x b a x a a x b a x x b a x a a ===≠=-==⎧=-=+-⎪⎪⎪⎪⎨=-=+-⎪⎪⎪=-=+-⎪⎩∑∑∑∑∑∑即:()D b L U X =-+XStep 2 :进行迭代(0)(0)(0)(0)12(1)11()(,,)()n k k x x x D b D L U +--⎧X =⎨X=-+X ⎩,0,1,2k =,取它的判断条件为()(1)k k -X -X 小于一个确定的误差值ε,跳出循环。

38第八节 雅可比与高斯—塞德尔迭代法

38第八节 雅可比与高斯—塞德尔迭代法
| aii | | aij | | aij |
ji j 1 i 1 j i 1
| aij |
n
( i 1 , 2 , , n )
数学学院 信息与计算科学系
数学学院 信息与计算科学系
由 ② 下面证明Gauss—Seidel 迭代法收敛. BG ( D L) 1U ,得
det( I BG ) det[ I ( D L) 1U ]
1
det[( D L) ] det[ ( D L) U ] 0
det[ ( D L) U ] 0 (1) 这说明(D-L)-U是奇异矩阵. 下面证明| |<1. 若不然, 即有 使| |1, 则
0 a21 1 BJ D ( L U ) a 22 a n1 a nn
a12 a11 0 an 2 ann
a1n a11 a2 n a22 0
数学学院 信息与计算科学系
x ( k 1) ( D L) 1Ux ( k ) ( D L) 1 b 其G-S迭代矩阵为
B2 = BG =(D-L)-1U
数学学院 信息与计算科学系
例如 已知线性方程组 Ax=b 的矩阵为
2 1 A 1 1.5
其G-S迭代矩阵为
2 0 0 1 1 BG ( D L) U 3 1 2 0 0 1 3 0 1 2 0 0 1 2 1 3 1 2 0 0 0 3
取 x(0)=(0,0,0)T 计算如下:
k 1 … 8
x1(k) 0.72 … 1.099998
x2(k) 0.902 … 1.199999

雅克比迭代法和高斯赛德尔迭代法的算法描述

雅克比迭代法和高斯赛德尔迭代法的算法描述

雅克比迭代法和高斯赛德尔迭代法的算法描述一. 雅克比迭代法雅克比迭代法(Jacobi Iteration)是计算数值解的一种迭代方法,它遵循一个简单的步骤:给定问题的初始值,按照一定的规则,用求出某一个矩阵元素,替换当前值,得到下一个矩阵值,重复这个步骤,直到满足某一个条件,即为所求解的结果。

雅克比迭代法求解矩阵问题的一般步骤为:(1)给定初始矩阵A和右端值矩阵B,将第i行第j列的元素表示为aij,bi;(2)第i行其它元素之和定义为s(i) =∑(j≠i)|a(i, j)|,亦即∑|aij|;(3)如果s(i)不等于0,则第i行第i列元素的值更新为xi=1 (b(i) ∑(j≠i)[a(i, j)x(j)])/a(i, i)(4)重复步骤3,直到满足|X(i)X(i)|<ε(ε为设定的误差),此时x即为所求解的结果。

二. 高斯-赛德尔迭代法高斯-赛德尔迭代法(Gauss-Seidel Iteration)是另一种迭代方法,算法的基本思想也是:通过迭代,计算出当前矩阵的第i行第j列的元素xi;然后更新第i行第j列元素的值,继续迭代,直到某种条件满足,即可求出矩阵的解。

高斯-赛德尔迭代法的基本步骤为:(1)给定初始矩阵A和右端值矩阵B,将第i行第j列的元素表示为aij,bi;(2)第i行其它元素之和定义为s(i) =∑(j≠i)|a(i, j)|,亦即∑|aij|;(3)如果s(i)不等于0,则第i行第i列元素的值更新为xi=1 (b(i) ∑(j<i)[a(i, j)x(j)]∑(j>i)[a(i,j)x(j)] )/a(i, i)(4)重复步骤3,直到满足|X(i)X(i)|<ε(ε为设定的误差),此时x即为所求解的结果。

总结从上面的对比来看,雅克比迭代法和高斯赛德尔迭代法的步骤基本一致,均采用迭代的方式求解矩阵A的解X,不同的是,高斯赛德尔迭代法在更新矩阵A的第i行第i列元素时,采用把小于i的j元素的值替换成当前迭代求得的值来计算,而雅克比迭代法采用把全部j元素的值替换成当前迭代求得的值来计算。

线性方程组的迭代法雅可比高斯塞德尔和超松弛迭代ppt课件

线性方程组的迭代法雅可比高斯塞德尔和超松弛迭代ppt课件

a11x1 a12 x2 a1n xn b1
a21 x1
a22 x2
a2n xn
b2
an1x1 an2 x2 ann xn bn
写据成此建立n 迭ai代j x公j 式 bi
i 1,2,, n
上若xi式(xkai称1ii)为0ja1解a11i(iiii方((bb程1ii,2组,jj的njn,1i n1Jaa)aijcxio,j分(jxbk)ij离)迭) 代出公i变i式量1,。21x,,2i , n , n
j=1
j ≠i
称A为严格对角占优阵。
2.如果A的元素满足
∑n
ai,i ≥ ai, j ,i = 1,2,..., n
j=1 j≠i
且至少一个不等式严格成立,称A为弱对角占优阵。 16
定义:设 A = (ai,j )n×n ,n ≥ 2
如果存在置换矩阵P,使得
PT
AP

A11 0
A12
A22
1
§6.1 迭代法的基本思想
迭代法的基本思想是将线性方程组转化 为便于迭代的等价方程组,对任选一组初始 值 xi(0) (i 1,2,, n) ,按某种计算规则,不断地 对所得到的值进行修正,最终获得满足精度 要求的方程组的近似解。
2
设 A Rnn 非奇异,b Rn,则线性方程组
Ax b 有惟一解 x A1b ,经过变换构造
x (k 1) 1
x (k 1) 2
x1(k 2x1(k)
)

x(k) 2
4x2(k )
3 3

x (0) 1

x (0) 2

0
计算得

线性方程组解法 (雅可比 高斯赛德尔 SOR)

线性方程组解法 (雅可比 高斯赛德尔 SOR)

实验作业(一)本章实验内容:实验题目:Jacobi 迭代法,Gauss-Saidel 迭代法,SOR 迭代法。

实验内容:利用MATLAB ,编制求Ax=b 的各迭代计算方法的程序。

实验目的:了解迭代法的运用性,进行各迭代法数值结果的比较,并找出一个计算量小的,使迭代法加速收敛的迭代方法。

编程要求:①利用迭代法,初始向量为x (0)②同时利用Jacobi 法和Gauss-Seidel 法来进行对比。

③利用SOR 迭代法来进行对比。

计算算法:①Jacobi 迭代法的算法为:()()⎪⎪⎪⎩⎪⎪⎪⎨⎧==-==∑≠=+.,1,0,,2,1/)(),,()(1)1()0()0(1)0(表示迭代次数k n i a x a b x x x xii k j n i j j ij i k i T n ②Gauss-Saidel 迭代法的算法为:()()⎪⎪⎩⎪⎪⎨⎧==--==∑∑+=-=++.,1,0,,1/)(),,()(111)1()1()0()0(1)0( k n i a x a x a b x x x x ii k j n i j ij i j k j ij i k i Tn ③SOR 迭代法的算法为:()⎪⎪⎪⎩⎪⎪⎪⎨⎧==--+==∑∑-==++.1,0;,,2,1/)(,),,(11)()1()()1()0()0(1)0(为松弛因子ωωk n i i j n i j ii k j ij k j ij i k i k i T n a x a x a b x x x x x 例1 利用Jacobi 方法求方程组⎪⎩⎪⎨⎧=+--=-+-=--2.453.82102.7210321321321x x x x x x x x x 的近似解。

程序源代码及程序实现一jacobi程序:function x=Jacobi(A,b,x0,delta,N)% A:系数矩阵;% b:常数向量;% x0:初值向量(列);% delta:误差条件;% N:N取适当大值,限制迭代次数;%============================% error:第k次迭代误差;% k:迭代次数;% B:迭代矩阵;n=length(b);for k=1:Nfor i=1:ns=0;for j=1:nif j~=is=s+A(i,j)*x0(j);endendx(i)=(b(i)-s)/A(i,i);enderror=abs(norm(x'-x0));x0=x';if(error<delta)break;endendE=eye(n,n);D=diag(diag(A));B=E-inv(D)*A;x0x=x';k,errorB命令:>> A=[10 -1 -2;-1 10 -2;-1 -1 5];b=[7.2 8.3 4.2]';>> x=Jacobi(A,b,[0 0 0]',1e-4,100)结果:x0 =1.10001.20001.3000k =10error =7.7813e-005B =0 0.1000 0.20000.1000 0 0.20000.2000 0.2000 0x =1.10001.20001.3000二Gauss_Seidel程序:function x=Gauss_Seidel(A,b,x0,delta,N)% A:系数矩阵;% b:常数向量;% x0:初值向量(列);% delta:误差条件;% N:N取适当大值,限制迭代次数;%============================ % error:第k次迭代误差;% k:迭代次数;n=length(b);for k=1:Nfor i=1:ns1=0;s2=0;%--------x0为第k次迭代的值---------for j=i+1:ns1=s1+A(i,j)*x0(j);end%--------x为第k+1次迭代的值--------for j=1:i-1s2=s2+A(i,j)*x(j);end%---------------------------------x(i)=(b(i)-s1-s2)/A(i,i);enderror=abs(norm(x'-x0));x0=x';if(error<delta)break;endendx=x';k,error命令:>> A=[10 -1 -2;-1 10 -2;-1 -1 5];b=[7.2 8.3 4.2]'; x0=[0 0 0]'; >> Gauss_Seidel(A,b,x0,1e-4,50)结果:k =7error =1.4669e-005ans =1.10001.20001.3000三SOR程序:function x=SOR(A,b,x0,omiga,delta,N)% A:系数矩阵;% b:常数向量;% x0:初值向量(列);% omiga:松弛因子;% delta:误差条件;% N:N取适当大值,限制迭代次数;%============================% error:第k次迭代误差;% k:迭代次数;n=length(b);for k=1:Nfor i=1:ns1=0;s2=0;%--------x0为第k次迭代的值---------for j=i:ns1=s1+A(i,j)*x0(j);end%--------x为第k+1次迭代的值--------for j=1:i-1s2=s2+A(i,j)*x(j);end%---------------------------------x(i)=x0(i)+omiga*(b(i)-s1-s2)/A(i,i);enderror=abs(norm(x'-x0));x0=x';if(error<delta)break;endendx=x';k,error命令:>> A=[10 -1 -2;-1 10 -2;-1 -1 5];b=[7.2 8.3 4.2]';x0=[0 0 0]'; >> SOR(A,b,x0,1.1,1e-4,100)结果:k =6error =3.2604e-005ans =1.10001.20001.3000总结:选择恰当的收敛因子,SOR法收敛最快。

雅可比迭代法和高斯超松弛迭代

雅可比迭代法和高斯超松弛迭代
(63)
雅可比迭代法分量形式(63)式也可改写为
(64)
(64)式更方便于编程求解。
雅可比迭代法公式简单,迭代思路明确。每迭代一次只需计算n个方程的向量乘法,程序编制时需设二个数组分别存放xk和xk+1便可实现此迭代求解。
2、高斯-赛德尔(Gauss-seidel)迭代法
由雅可比迭代法可知,在计算xk+1的过程中,采用的都是上一迭代步的结果xk。考察其计算过程,显然在计算新分量xik+1时,已经计算得到了新的分量, 。有理由认为新计算出来的分量可能比上次迭代得到的分量有所改善。希望充分利用新计算出来的分量以提高迭代解法的效率,这就是高斯-赛德尔迭代法(简称G-S迭代法)对(64)式进行改变可以得到G-S迭代法的分 量形式
(75)
其中ω称为松弛因子。
式(75)是迭代公式(74)的一个改进,可以选择松弛因子ω加速迭代过程的收敛。 式(75)的分量形式为
(76)
若对上述改进的迭代公式,按高斯-赛德尔迭代法尽量利用最新迭代得到的分量的原则,又可得到新的迭代公式
(77)
当线性方程组的系数矩阵A具有非零主元(aii≠0,i=1,2,3,…n)的特点时,可 以得到主元为1的方程组形式
雅可比迭代法和高斯-赛德尔迭代法以及超松弛迭代
对于给定的方程 用下式逐步代入求近似解的方法称为迭代法。如xk(当 )的极限存在,此极限即方程组的真正解,此迭代法收敛,否则称迭代法收敛。
1、雅可比(Jacobi)迭代法
设有方程组
Ax=b (56)
其展开形式为
(57)
系数矩阵A为非奇异阵,且 (i=1-n)A可分解为
高斯-赛德尔迭代的矩阵形式可表达为
(69)
高斯-赛德尔迭代法每步迭代的计算量与雅可比迭代相当,但在计算机进行计算时,只需存放x一个数组。

雅可比迭代法,高斯迭代法,松弛迭代法

雅可比迭代法,高斯迭代法,松弛迭代法

10 1
10 2
5
同样取初始向量x(0)=(0,0,0)T, 计算结果为
k
x1(k)
0
0
x2(k) 0
x3(k) 0
‖x(k)-x*‖
1
1
1.4
0.78
1.026
0.4
2 1.0634 1.02048 0.987516 0.0634
3 0.9951044 0.99527568 1.00190686 0.0048956


0

若记 g ( b1 , b2 ,, bn )T ,则J迭代法可写成
a11 a22x(k+1a)=nnBx(k)+g
k=0,1,2,…
§3.2.2 高斯-赛德尔 (Gauss-Seidel) 迭代法
若在J迭代法中,充分利用新值, 则可以得到如下的迭
代公式

x1(
k

x1(
k
1)

a12 a11
x(k) 2

a13 a11
x(பைடு நூலகம்) 3

a1n a11
x(k) n

b1 a11

x
(k
2
1)
a21 a22
x(k) 1

a23 a22
x(k) 3

a2n a22
x(k) n

b2 a22


方程组的精确解为x*=(1,1,1)T.
解 J迭代法计算公式为
x (k 1) 1


3 10
x(k) 2
x 1 (k ) 10 3

Jacobi 迭代法与Gauss-Seidel迭代法算法比较

Jacobi 迭代法与Gauss-Seidel迭代法算法比较

Jacobi 迭代法与Gauss-Seidel迭代法算法比较目录1 引言 (1)1.1Jacobi迭代法 (2)1.2Gauss-Seidel迭代法 (2)1.3逐次超松弛(SOR)迭代法 (3)2算法分析 (3)3 结论 (5)4 附录程序 (5)参考文献 (8)Jacobi 迭代法与Gauss-Seidel 迭代法比较1 引言解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。

这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。

对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。

迭代法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。

即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。

因此迭代法存在收敛性与精度控制的问题。

迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。

设n 元线性微分方程组b Ax = (1)的系数矩阵A 非奇异,右端向量0≠b ,因而方程组有唯一的非零解向量。

而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi 迭代法、Gauss —Seidel 迭代法,逐次超松弛迭代法(SOR 法),这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 分解成两个矩阵N 和P 的差,即P N A -=;其中N 为可逆矩阵,线性方程组(1)化为:b x P N =-)(b Px Nx +=b N Px N x 11--+=可得到迭代方法的一般公式:d Gx xk k +=+))1(( (2)其中:P N G 1-=,b N d 1-=,对任取一向量)0(x 作为方程组的初始近似解,按递推公式产生一个向量序列)1(x ,)2(x ,...,)k x(,...,当k 足够大时,此序列就可以作为线性方程组的近似解。

(完整版)第八节雅可比迭代法与高斯-塞德尔迭代法综述

(完整版)第八节雅可比迭代法与高斯-塞德尔迭代法综述

第八节 雅可比迭代法与高斯—塞德尔迭代法一 雅可比迭代法设线性方程组b Ax = (1) 的系数矩阵A 可逆且主对角元素nn a ,...,a ,a 2211均不为零,令()nna ,...,a ,a diag D 2211=并将A 分解成()D D A A +-= (2)从而(1)可写成 ()b x A D Dx +-=令11f x B x +=其中b D f ,A D I B 1111--=-=. (3) 以1B 为迭代矩阵的迭代法(公式)()()111f x B x k k +=+ (4)称为雅可比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为⎩⎨⎧[],...,,k ,n ,...,i x a ba xnij j )k (j j i iii)k (i21021111==∑-=≠=+ (5)其中()()()()()Tn x ,...x ,x x 002010=为初始向量.由此看出,雅可比迭代法公式简单,每迭代一次只需计算一次矩阵和向量的乘法.在电算时需要两组存储单元,以存放()k x 及()1+k x . 例1 例1 用雅可比迭代法求解下列方程组⎪⎩⎪⎨⎧=+--=-+-=--2453821027210321321321.x x x .x x x .x x x解 将方程组按雅可比方法写成⎪⎪⎩⎪⎪⎨⎧++=++=++=8402020830201072020*******2321.x .x .x .x .x .x .x .x .x取初始值()()()()()()T T ,,,x ,x ,x x 0000302010==按迭代公式()()()()()()()()()⎪⎪⎩⎪⎪⎨⎧++=++=++=+++840202083020107202010211331123211.x .x .x .x .x .x .x .x .x k k k k k k k k k进行迭代,其计算结果如表1所示表1二 高斯—塞德尔迭代法由雅可比迭代公式可知,在迭代的每一步计算过程中是用()k x的全部分量来计算()1+k x的所有分量,显然在计算第i 个分量()1+k i x 时,已经计算出的最新分量()()1111+-+k i k x ,...,x 没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第1+k 次近似()1+k x的分量()1+k jx 加以利用,就得到所谓解方程组的高斯—塞德(Gauss-Seidel )迭代法.把矩阵A 分解成U L D A --= (6)其中()nn a ,...,a ,a diag D 2211=,U ,L --分别为A 的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成 ()b Ux x L D +=-即 22f x B x +=其中()()b L D f ,U L D B 1212---=-= (7)以2B 为迭代矩阵构成的迭代法(公式)()()221f x B x k k +=+ (8)称为高斯—塞德尔迭代法(公式),用 量表示的形式为⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++Λ (9)由此看出,高斯—塞德尔迭代法的一个明显的优点是,在电算时,只需一组存储单元(计算出()1+k ix 后()k ix 不再使用,所以用()1+k i x 冲掉()k ix ,以便存放近似解.例2 例2 用高斯——塞德尔迭代法求解例1.解 取初始值()()()()()()TT,,,x ,x ,x x 0000302010==,按迭代公式()()()()()()()()()⎪⎩⎪⎨⎧++=++=++=++++++840202083020107202010121113311123211.x .x .x .x .x .x .x .x .x k k k k k k k k k进行迭代,其计算结果如下表2从此例看出,高斯—塞德尔迭代法比雅可比迭代法收敛快(达到同样的精度所需迭代次数少),但这个结论,在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯—塞德尔迭代法却是发散的.三 迭代收敛的充分条件定理1 在下列任一条件下,雅可比迭代法(5)收敛.①111<∑=≠=∞nij j iiij ia a max B ;②1111<∑=≠=nij i iiij ja a max B ;③ 111<∑=-≠=∞-nji i jjij jTa a max AD I定理2 设21B B ,分别为雅可比迭代矩阵与高斯—塞德尔迭代矩阵,则∞∞≤12B B (10)从而,当111<∑=≠=∞nij j iiij ia a max B时,高斯—塞德尔迭代法(8)收敛. 证明 由21B B ,的定义,它们可表示成()U L D B +=-11()()U D L D I U L D B 11112-----=-=用e 表示n 维向量()T,...,,e 111=,则有不等式eB e B ∞≤11UD L D B 111--+=这里,记号|·|表示其中矩阵的元素都取绝对值,而不等式是对相应元素来考虑的,于是()()()Ie B L D I eL D B e U D ∞------≤-=111111容易验证()11==--nnL D L D所以,L D I 1--及L D I 1--可逆,且()()()1111111111-----------=++≤+++=-L D I LD ...L D I L D ...L D I LD I n n()I L D I ≥---11从而有()()((){}e I B L D I L D I eU D LD I e B ∞----------≤⋅-≤111111121{()()}eB eL D I I B I ∞--∞≤-⋅--=11111因此必有∞∞≤12B B因为已知11<∞B 所以12<∞B .即高斯—塞德尔迭代法收敛.若矩阵A 为对称,我们有定理3 若矩阵A 正定,则高斯—塞德尔迭代法收敛.证明 把实正定对称矩阵A 分解为T L L D A --=()TL U =,则D 为正定的,迭代矩阵()T L L D B 12--=设λ是2B 的任一特征值,x 为相应的特征向量,则()()x x L L D T λ=--1以L D -左乘上式两端,并由TL L D A --=有()Ax x L T λλ=-1用向量x 的共轭转置左乘上式两端,得()Ax x x L xTTT--=-λλ1 (11)求上式左右两端的共轭转置,得Ax x x L x T T ----=⎪⎭⎫ ⎝⎛-λλ1以λ--1和λ-1分别乘以上二式然后相加,得()()Axx x L L x T T T -----⎪⎭⎫ ⎝⎛-+=+⎪⎭⎫ ⎝⎛--λλλλλλ211 由TL L D A --=,得()()Axx x A D x T T -----⎪⎭⎫ ⎝⎛-+=-⎪⎭⎫ ⎝⎛--λλλλλλ211即()Ax x x L x TT---=-λλλ2211 (12)因为A 和D 都是正定的,且x 不是零向量,所以由(11)式得1≠λ,而由(12)式得012>-λ, 即1<λ,从而()12<B ρ,因而高斯—塞德尔迭代法收敛.定义1 设)nn ij a A ⨯=为n 阶矩阵.① ①如果n,...,i ,a a nij i j ij ii 21=∑>≠= (13)即A 的每一行对角元素的绝对值都严格大于同行其他元素绝对值之和,则称A 为严格对角优势矩阵.② ②如果n,...,i ,a a nij i j ij ii 21=∑≥≠=且至少有一个不等式严格成立,则称A 为弱对角优势矩阵.例如⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-310131012是严格对角优势矩阵,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--310121011是弱对角优势矩阵. 定义2 设()nn ij a A ⨯=是n 阶矩阵,如果经过行的互换及相应列的互换可化为⎥⎦⎤⎢⎣⎡2212110A A A ,即存在n 阶排列矩阵P,使⎥⎦⎤⎢⎣⎡=2212110A A A AP P T其中2211A ,A 为方阵,则称A 是可约的,否则称A 为不可约的.A 是可约矩阵,意味着b Ax =可经过若干次行列重排,化为两个低阶方程组,事实上,b Ax =可化为 ()b P x P AP P TT T =,记()()()()⎥⎦⎤⎢⎣⎡==⎥⎦⎤⎢⎣⎡==2121d d d b P ,y y y x P TT于是,求解b Ax =化为求解()()()()()⎪⎩⎪⎨⎧=+=+22221212111d y A d y A y A可以证明,如果A 为严格对角优势矩阵或为不可约弱对角优势矩阵,则A 是非奇异的.定理4 如果A 为严格对角优势矩阵或为不可约弱对角优势矩阵,则对任意()0x ,雅可比迭代法(4)与高斯—塞德尔迭代法(8)均为收敛的.证明 下面我们以A 为不可约弱对角优势矩阵为例,证明雅可比迭代法收敛,其他证明留给读者.要证明雅可比迭代法收敛,只要证()11<B ρ,1B 是迭代矩阵.用反证法,设矩阵1B 有某个特征值μ,使得1≥μ,则()01=-B I det μ,由于A 不可约,且具有弱对角优势,所以1-D 存在,且 ()()D A D D A D I I B I -+=--=---μμμ111从而()0=-+D A D detμ另一方面,矩阵()D A D -+μ与矩阵A 的非零元素的位置是完全相同的,所以()D A D -+μ也是不可约的,又由于1≥μ,且A 弱对角优势,所以n,...,i ,a a a nij i j ij ii ii 21=∑≥≥≠=μ并且至少有一个i 使不等号严格成立.因此,矩阵()D A D -+μ弱对角优势,故()D A D -+μ为不可约弱对角优势矩阵.从而()0≠-+D A D det μ矛盾,故1B 的特征值不能大于等于1,定理得证.。

数值分析课程设计 雅克比迭代、高斯赛德尔迭代、超松弛迭代

数值分析课程设计 雅克比迭代、高斯赛德尔迭代、超松弛迭代

数值分析课程设计雅克比迭代、高斯赛德尔迭代、超松弛迭代求解线性方程组的雅克比迭代法、高斯-赛德尔迭代法和超松弛迭代法的算法实现学院:数学科学学院学号: 11111111111姓名: hhhhhhhhhh班级: 计算 0901实验报告一实验目的与要求(实验题目)1(分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组5,2,1,,12xxx,123 ,,1x,4x,2x,20,123 , 2x,3x,10x,3123,,4 使得误差不超过 102.用超松弛迭代法求解方程方程组:(=1.1) ,4x,x,1,12 ,,x,4x,x,4 ,123, ,x,4x,,323, ,65,10 使得误差不超过二计算公式1. 雅可比迭代法n1,1(k)(k)x,b,ax,,,iiijj,,1jaii,ji,i,1,2,...n,k,0,1,2,..., T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.2.高斯-塞德尔迭代法i,1n1(k,1)(k,1)(k),,x,b,ax,ax,,,iiijjijjj,,11j,iaii,i,1,2,?n,k,0,1,2,...,T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.3.超松弛迭代法in,1,kkkk(,1)()(,1)()xx(baxax)/a,,,,,,,,,iiiijjijjii ,jj,,11,i1,2,n,k0,1,,?,?,T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.三、实验过程(算法程序)1. 雅可比迭代法#include "stdio.h"#include "math.h"#include "string.h"void main(){int i,j,k;float m1=0.0,m2=0.0;float a[3][4]={5,2,1,-12,-1,4,2,20,2,-3,10,3};float x[3]={0.0,0.0,0.0}; for(k=1;k<=10;){for(i=0;i<=2;i++){for(j=0;j<i;j++)m1=m1+a[i][j]*x[j];for(j=i+1;j<=2;j++)m2=m2+a[i][j]*x[j];x[i]=(a[i][3]-m1-m2)/a[i][i];m1=0,m2=0;}k++;}printf("雅可比迭代法计算结果为:\n");for(i=0;i<=2;i++)printf("x[%2d]=%8.9f\n",i+1,x[i]); }程序二:#include "stdio.h"#include "math.h"#include "string.h"#define n 3void main(){int i,j,k;float m1=0.0,m2=0.0;float a[n][n+1];printf("请输入方程组的增广矩阵:");for(i=0;i<n;i++)for(j=0;j<n+1;j++)scanf("%f",&a[i][j]); float x[n]={0.0,0.0,0.0}; for(k=1;k<=10;) {for(i=0;i<=n-1;i++){for(j=0;j<i;j++)m1=m1+a[i][j]*x[j];for(j=i+1;j<=n-1;j++)m2=m2+a[i][j]*x[j];x[i]=(a[i][n]-m1-m2)/a[i][i];m1=0,m2=0;}k++;}printf("雅可比迭代法计算结果为:\n");for(i=0;i<=n-1;i++)printf("x[%2d]=%8.9f\n",i+1,x[i]);}2高斯-塞德尔迭代法#include<stdio.h>#include<math.h># define n 3void main(){int i,j,k=1;float x[n]={0,0,0},m[n]={0,0,0},s=1;float a[n][n]={5,2,1,-1,4,2,2,-3,10},d[n]={-12,20,3}; /* float a[n][n],d[n];printf("请输入方程组系数矩阵");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("请输入方程组右端向量");for(i=0;i<n;i++)scanf("%f",&d[i]); */printf("高斯-塞德尔迭代法运算结果为:\n");for(k=0;fabs(s-x[0])>1e-6;k++){s=x[0];for(i=0;i<n;i++){m[i]=0;for(j=0;j<n;j++) m[i]=m[i]-a[i][j]*x[j];m[i]=m[i]+d[i]+a[i][i]*x[i];x[i]=m[i]/a[i][i];}printf("Y1=%f Y2=%f Y3=%f\n",x[0],x[1],x[2]);}getchar() ;}3超松弛迭代法#include <iostream>#include <cmath>using namespace std;float *one_array_malloc(int n); //一维数组分配float **two_array_malloc(int m,int n); //二维数组分配float matrix_category(float* x,int n); int main() {const int MAX=100; //最大迭代次数int n,i,j,k;float** a;float* x_0; //初始向量float* x_k; //迭代向量float precision; //精度float w; //松弛因子cout<<"输入精度e:";cin>>precision;cout<<endl<<"输入系数矩阵的阶数,N:";cin>>n;a=two_array_malloc(n,n+1);cout<<endl<<"输入增广矩阵的各值:\n";for(i=0;i<n;i++){for(j=0;j<n+1;j++){cin>>a[i][j];}}x_0=one_array_malloc(n);cout<<endl<<"输入初始向量:\n";for(i=0;i<n;i++){cin>>x_0[i];}x_k=one_array_malloc(n);cout<<"输入松弛因子w (1<w<2):\n"; cin>>w;float temp; //迭代过程for(k=0;k<MAX;k++){for(i=0;i<n;i++){temp=0;for(j=0;j<i;j++){temp=temp+a[i][j]*x_k[j];}x_k[i]=a[i][n]-temp;temp=0;for(j=i+1;j<n;j++){temp=temp+a[i][j]*x_0[j];}x_k[i]=(x_k[i]-temp)/a[i][i];x_k[i]=(1-w)*x_0[i]+w*x_k[i];} //求两解向量的差的范数for(i=0;i<n;i++){x_0[i]=x_k[i]-x_0[i];}if(matrix_category(x_0,n)<precision) {break;}else{for(i=0;i<n;i++){x_0[i]=x_k[i];}}} //输出过程if(MAX==k){cout<<"迭代不收敛\n";}cout<<"迭代次数为:"<<k<<endl;cout<<"解向量为:\n";for(i=0;i<n;i++){cout<<"x"<<i<<": "<<x_k[i]<<endl;}return 0;}float *one_array_malloc(int n) //一维数组分配 {float *a;a=(float *)malloc(sizeof(float)*n);return a;}float **two_array_malloc(int m,int n) //二维数组分配 { float **a;int i;a=(float **)malloc(m*sizeof(float *));for (i=0;i<m;i++){a[i]=(float *)malloc(n*sizeof(float));}return a;}float matrix_category(float* x,int n){int i;float temp=0;for(i=0;i<n;i++){temp=temp+fabs(x[i]); }return temp;}四(实验结果:1.雅可比迭代法:2.高斯-塞德尔迭代法:.3.超松弛迭代法:五(实验小结通过这次上机,我学会了用J迭代法,G-S迭代法和SOR迭代法求解线性方程组,巩固了C语言程序设计算法编写,对这几种迭代方法有了更好的理解,并能通过编程和调试实现算法,完成了实验内容,收获颇丰。

matlab Jacobi迭代法Gauss-seidel和SOR迭代

matlab Jacobi迭代法Gauss-seidel和SOR迭代

1.Jacobi迭代法例1 用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4)其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。

解:编写jacobi迭代法的函数文件,保存为jacobi.mfunction [x,k]=jacobi(A,b,x0,eps,N)% 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数% 输出x为近似解;k为迭代次数n=length(A);x=zeros(n,1);for k=1:Nfor i=1:n―――――――endif norm(x-x0,inf)<eps % 迭代终止条件% if (max(abs(x-x0)))<epsbreak;endx0=x;end编写主程序如下format longclearA=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3];x0=[0.125; 0.4 ;-0.6 ]; % x0为初始列向量N为最大迭代次数err=1e-4; % err为误差容限N=25; % N为最大迭代次数[x,k]=jacobi(A,b,x0,err,N)得到结果如下x =0.224923156250000.30561995000000-0.49388680000000k =62.Gauss-seidel迭代法例2 用Gauss-seidel迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。

解:编写Gauss-seidel迭代法的函数文件,保存为gaus.mfunction [x,k]=gaus(A,b,x0,eps,N)% 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数% 输出x为近似解;k为迭代次数n=length(A);x=zeros(n,1);for k=1:Nfor i=1:n――――――endif norm(x-x0,inf)<eps % 迭代终止条件% if (max(abs(x-x0)))<epsbreak;endx0=x;end编写主程序如下format longclearA=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3];x0=[0.125; 0.4 ;-0.6 ]; % x0为初始列向量N为最大迭代次数err=1e-4; % err为误差容限N=25; % N为最大迭代次数[x,k]=gaus(A,b,x0,err,N)输出结果为x =0.224939378906250.30562326171875-0.49388747187500k =53.SOR迭代法例3 用SOR迭代法求解代数线性代数方程组,松驰因子w=1.005,其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。

雅克比迭代法和高斯-塞德尔迭代法(经典实用)

雅克比迭代法和高斯-塞德尔迭代法(经典实用)

雅克比迭代法和高斯-塞德尔迭代法(经典实用)雅克比迭代法和高斯-塞德尔迭代法都是求解线性方程组的经典方法,它们的基本思路是将矩阵分解为对角、上三角或下三角矩阵,然后通过迭代求解方程组。

以下将详细介绍这两种方法的原理和实现。

1. 雅克比迭代法雅克比迭代法是一种通过逐步迭代来求解线性方程组的方法。

假设有一个n*n的线性方程组Ax=b,其中A是一个对称正定矩阵。

将A分解为对角矩阵D、上三角矩阵U和下三角矩阵L的乘积,即A=D-L-U。

则可得到方程组的迭代格式如下:X_(k+1)=D^(-1)(L+U)X_k+D^(-1)b其中X_k为第k次迭代的解向量,D为A的对角矩阵,L为A的下三角矩阵,U为A的上三角矩阵。

雅克比迭代法的收敛条件为,当矩阵A是对称正定矩阵时,若其对角线元素都不为0,则Jacobi迭代法收敛。

此外,当矩阵A为对称正定矩阵时,雅克比迭代法还具有收敛速度快、实现简单等优点。

2. 高斯-塞德尔迭代法高斯-塞德尔迭代法是雅克比迭代法的改进。

其思路是每次计算时,直接用已知的最新值来更新解向量中未知量的值,从而加快迭代的速度。

具体来说,设有一个n*n的线性方程组Ax=b,方程组的迭代格式为:X_i+1= (b_i-a_i,i*X_i+1-a_i,i+1*X_i,+...-a_i,n*X_n) /a_i,i其中i表示求解方程组的第i个未知量,它的值是通过其他已知量的最新值来计算的。

3. 实用在实际应用中,雅克比迭代法和高斯-塞德尔迭代法在求解某些特定的线性方程组时往往比直接求解更具有优势。

例如,在求解非常大型的线性方程组时,直接求解的计算量很大,求解时间也很长。

而使用迭代法则可以大幅减少计算量和求解时间,提高求解效率。

此外,由于迭代法可以直观地呈现方程组的解向量随着迭代步数的变化情况,因此可以更快地检查迭代结果的趋势和误差范围。

总之,雅克比迭代法和高斯-塞德尔迭代法是求解线性方程组的两种有效方法,具有应用广泛、易于实现和迭代收敛速度快的优点。

三种迭代法雅克比、高斯赛贝尔、超松弛求解方程组实验报告

三种迭代法雅克比、高斯赛贝尔、超松弛求解方程组实验报告
end
if norm(x-x0,inf)<ep,break;end
x0=x;k=k+1;
end
if k==N,Warning('已达到迭代次数上限');end
disp(['迭代次数k=',num2str(k)])
2.利用Gauss-Seidel迭代法求解:
编制名为maseidel.m的文件,内容如下:
if i==1
x(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);
else if i==n
x(n)=(b(n)-A(n,1:n-1)*x(1:n-1))/A(n,n);
else
x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
4.深刻体会到了MATLAB功能的强大之处;
5.在做本次实验的过程中,也学到了很多新的知识,比如MATLAB的.m文件等知识;
关键词:Jacobi、Gauss-Seidel、SOR迭代法线性方程组
实验方法和步骤(包括数值公式、算法步骤、程序):
1.利用Jacobi迭代法求解:
编制名为majacobi.m的文件,内容如下:
function x=majacobi(A,b,x0,ep,N)
n=length(b);
if nargin>5,Warning('传递的参数个数错误');end
if nargin<5,N=500;end
if nargin<4,ep=1e-6;end
if nargin<3,x0=zeros(n,1);end
x=zeros(n,1);k=0;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(t>p)
{
k++;
SOR(xk);
}
else
{
printf("\nReach the given precision!\n");
printf("\nCount number is %d\n",k);
}
}
for(j=i;j<n+1;j++)
tt=tt+a[i][j]*xk[j];
xl[i]=xk[i]+w*(b[i]-t-tt)/a[i][i];
}
t=0.0;
for(i=1;i<n+1;i++)
{
tt=fabs(xl[i]-xk[i]);
tt=tt*tt;
t+=tt;
}
t=sqrt(t);
for(i=1;i<n+1;i++)
printf("\nCount number is %d\n",k);
}
else
if(t>p)
{
k++;
Jacobi(xk);
}
else
{
printf("\nReach the given precision!\n");
printf("\nCount number is %d\n",k);
}
}
/**********高斯-赛德尔迭代法**********/
t=t+a[i][j]*xl[j];
for(j=i+1;j<n+1;j++)
tt=tt+a[i][j]*xk[j];
xl[i]=(b[i]-t-tt)/a[i][i];
}
t=0.0;
for(i=1;i<n+1;i++)
{
tt=fabs(xl[i]-xk[i]);
tt=tt*tt;
t+=tt;
}
t=sqrt(t);
for(i=1;i<n+1;i++)
{
float t=0.0;
for(j=1;j<n+1;j++)
{
if(j==i)
continue;
t=t+a[i][j]*xk[j];
}
xl[i]=(b[i]-t)/a[i][i];
}
t=0.0;
for(i=1;i<n+1;i++)
{
tt=fabs(xl[i]-xk[i]);
xk[i]=xl[i];
if(k+1>c)
{
if(t<=p)
printf("\nReach the given precision!\n");
else
printf("\nover the maximal count!\n");
printf("\nCount number is %d\n",k);
}
else
void Gauss_Siedel(float xk[])
{
int i,j;
float t=0.0;
float tt=0.0;
float *xl;
xl=(float *)malloc(sizeof(float)*(n+1));
for(i=1;i<n+1;
for(j=1;j<i;j++)
}
else
if(t>p)
{
k++;
Gauss_Siedel(xk);
}
else
{
printf("\nReach the given precision!\n");
printf("\nCount number is %d\n",k);
}
}
/**********SOR迭代法**********/
void SOR(float xk[])
昨天闲来无事,就把雅可比,高斯-赛德尔和SOR迭代法解方程组的程序写了.
把主要程序发了,可能有谁用的着.
/**********雅可比迭代法**********/
void Jacobi(float xk[])
{
int i,j;
float t=0.0;
float tt=0.0;
float *xl;
xl=(float *)malloc(sizeof(float)*(n+1));
for(i=1;i<n+1;i++)
xk[i]=xl[i];
if(k+1>c)
{
if(t<=p)
printf("\nReach the given precision!\n");
else
printf("\nover the maximal count!\n");
printf("\nCount number is %d\n",k);
tt=tt*tt;
t+=tt;
}
t=sqrt(t);
for(i=1;i<n+1;i++)
xk[i]=xl[i];
if(k+1>c)
{
if(t<=p)
printf("\nReach the given precision!\n");
else
printf("\nover the maximal count!\n");
{
int i,j;
float t=0.0;
float tt=0.0;
float *xl;
xl=(float *)malloc(sizeof(float)*(n+1));
for(i=1;i<n+1;i++)
{
t=0.0;
tt=0.0;
for(j=1;j<i;j++)
t=t+a[i][j]*xl[j];
相关文档
最新文档