第三节 雅克比迭代法和高斯-塞德尔迭代法


非负实值 函数
➢常用的几种向量范数:
n
设
x
(
x1 ,
x2 ,
, xn )T
1-范数: x 1
xi
i 1
❖ 2-范数:
n
x ( 2
xi2
)
1 2
(x, x)
i 1
-范数:
x
max
1 i n
xi
上述3种向量范数统称为P-范数
n
x ( p
xi p ) 1 p
1 p
i 1
二、 矩阵范数
定义:设 f ( A是) Rnn的一个R 映射,若对
1 3 10 x3 14
x(k 1) 1
(14 3x2(k )
x3(k ) ) 10
雅克比迭代格式
x(k 1) 2
(5
2 x1(k )
3x3(k ) ) (10)
x(k 1) 3
(14
x(k) 1
3x2(k ) ) 10
高斯-塞德尔 迭代格式
x(k 1) 1
(14
3x2(k )
x3(k ) ) 10
A Rnn,存在唯一实数 A与之对应,且满足
非负性:A 0, A Rnn且 A 0 A 0
❖齐次性: A A , A Rnn , R
三角不等性: A B A B , A, B Rnn AB A B A, B Rnn
则称 A为 R中n矩n 阵 的范A数。
➢常用的几种矩阵范数: 记 A (aij )nn
n
列范数:
A 1
max 1 jn
i 1
aij
n
❖行范数:
A
max
1 i n
j 1
aij
谱半径
( A)
max
1 i n
i
1
谱范数: A 2
1 ( AT A) 2
其中
是
1
A的T A最大特征值
第四节 解线性方程det( A) 0
迭代法
从一个初始向量出发,按照一定的递推 格式,产生逼近方程组的近似解序列。
一、雅克比迭代法
设方程组 Ax b; A (aij )nn , b (bi )1n;det( A) 0
将系数矩阵分裂为: A D L U
其中 D diag(a11, a22 ,
0
a21 0
L a31 a32 0
, ann )
0 a12 a13
0 a23
U
0
an1 an2
0 an,n1 0
• 10、你要做多大的事情,就该承受多大的压力。12/11/
2020 8:34:28 AM08:34:282020/12/11
• 11、自己要先看得起自己,别人才会看得起你。12/11/
谢 谢 大 家 2020 8:34 AM12/11/2020 8:34 AM20.12.1120.12.11
第三节 向量范数和矩阵范数
一、 向量范数
定义:设 f ( x是) Rn的一R个映射,若对
x Rn
存在唯一实数 x与之对应,且满足
非负性: x 0,x Rn 且 x 0 x 0
❖齐次性: x x ,x Rn , R
三角不等性:x y x y ,x, y Rn
则称 x为 中Rn向量 的x范数。
思 路
与不动点迭代相似 , 将方程组
形式x , B从x而建f立迭代格式
A
x
等b价改写成
x(k1) B x(k) f ,从 x(出0) 发,生成迭代序列 { x(k) }
迭代法是一种逐次逼近的方法,与直接法比较, 具有: 程序简单,存储量小的优点。特别适用于求解系数 矩阵为大型稀疏矩阵 的方程组。
高斯-塞德尔迭代法是雅克比迭代法的一种改进。
➢ 高斯-塞德尔迭代法的分量形式:
i 1
n
bi
aij
x(k 1) j
aij x(jk )
x(k 1) i
j 1
ji 1
a ii
;i 1, 2, , n
例1:利用雅克比和高斯-塞德尔迭代法求解方程组
10 3 1 x1 14
2 10 3 x2 5
解:
•
5、知人者智,自知者明。胜人者有力 ,自胜 者强。 20.12.1 120.12. 1108:3 4:2808: 34:28D ecembe r 11, 2020
•
6、意志坚强的人能把世界放在手中像 泥块一 样任意 揉捏。 2020年 12月11 日星期 五上午 8时34 分28秒0 8:34:28 20.12.1 1
x(k 1) 2
(5
2 x1(k 1)
3x3(k ) ) (10)
x(k 1) 3
(14
x(k 1) 1
3x2(k1) ) 10
雅克比迭代法 取初值 x (0 0 0)T
方程组的近似解
计算结果
计算结果
高斯-塞德尔迭代法
取初值 x (0 0 0)T
方程组的近似解
•
1、有时候读书是一种巧妙地避开思考 的方法 。20.1 2.1120. 12.11Fr iday, December 11, 2020
•
7、最具挑战性的挑战莫过于提升自我 。。20 20年12 月上午 8时34 分20.12. 1108:3 4December 11, 2020
•
8、业余生活要有意义,不要越轨。20 20年12 月11日 星期五 8时34 分28秒0 8:34:28 11 December 2020
•
9、一个人即使已登上顶峰,也仍要自 强不息 。上午 8时34 分28秒 上午8时 34分08 :34:282 0.12.11
分量形式:
i 1
n
bi
aij
x(k) j
aij
x
(k j
)
x(k 1) i
j 1
ji 1
a ii
;i 1, 2, , n
二、高斯-塞德尔迭代法
在雅克比迭代公式中,计算xi(k1) 时,利用已经算
出来的新的 x1(k1) , x2(k1) ,
,
x(k 1) i 1
值,从而得到
高斯-塞德尔迭代法。
a1n
a2n
0 an1,n 0
如果aii 0(i 1, 2, , n) 原方程组可化为 x D1(L U )x D1b Bx f
其中 B D1( L U ); f D1b
相应的迭代格式 x(k1) Bx(k) f ;k 0,1, 2,
上述方法称为雅克比迭代法,简称J法或简单迭代法
•
2、阅读一切好书如同和过去最杰出的 人谈话 。08:3 4:2808: 34:2808 :3412/ 11/2020 8:34:28 AM
•
3、越是没有本领的就越加自命不凡。 20.12.1 108:34: 2808:3 4Dec-20 11-Dec-20
•
4、越是无能的人,越喜欢挑剔别人的 错儿。 08:34:2 808:34: 2808:3 4Friday , December 11, 2020
合集下载

雅可比迭代法和高斯塞德尔迭代法对比

雅可比迭代法和高斯塞德尔迭代法对比

雅可比迭代法和高斯塞德尔迭代法对比引言雅可比迭代法和高斯塞德尔迭代法是数值分析中常用的迭代求解线性方程组的方法。

它们都是通过迭代更新变量的值,逐渐逼近方程组的真实解。

本文将详细讨论这两种迭代法的原理、特点和适用情况,并给出一些比较和应用实例。

雅可比迭代法(Jacobi Iteration)雅可比迭代法是一种逐个更新变量的值的迭代方法。

对于线性方程组Ax = b,雅可比迭代法的更新公式如下:x i(k+1)=1a ii(b i−∑a ijnj=1j≠ix j(k))其中,aii表示系数矩阵A的第i行第i列的元素,而bi表示方程组的第i个方程的右侧常数。

特点1.雅可比迭代法的计算过程简单,容易理解和实现。

2.每次迭代只更新一个变量的值,相邻两次迭代之间没有数据依赖关系,可以并行计算。

3.雅可比迭代法收敛的条件是系数矩阵A满足严格对角占优条件或对称正定条件。

优缺点•优点:简单易懂,在一些特定情况下收敛速度较快。

•缺点:收敛速度相对较慢,尤其是在系数矩阵A的条件数较大时;不适用于对角占优条件较弱的问题。

高斯塞德尔迭代法(Gauss-Seidel Iteration)高斯塞德尔迭代法是一种逐个更新变量的值,并立即使用最新的值进行下一个变量的更新的迭代方法。

对于线性方程组Ax = b,高斯塞德尔迭代法的更新公式如下:x i(k+1)=1a ii(b i−∑a iji−1j=1x j(k+1)−∑a ijnj=i+1x j(k))特点1.高斯塞德尔迭代法相较于雅可比迭代法,每次迭代可以使用当前迭代步骤中已更新的变量值,因此收敛速度更快。

2.如果系数矩阵A是严格对角占优或对称正定的,高斯塞德尔迭代法一定收敛。

优缺点•优点:相较于雅可比迭代法,收敛速度更快,对于条件数较大的问题也有较好的效果。

•缺点:实现稍微复杂一些,每次迭代的计算依赖于之前已更新的变量值,无法并行计算。

雅可比迭代法和高斯塞德尔迭代法的比较收敛速度在一些特定的问题中,雅可比迭代法可以比高斯塞德尔迭代法更快地收敛。

雅克比迭代法与高斯-赛德尔

雅克比迭代法与高斯-赛德尔

实验三 线性方程组的迭代法班级:**计本 ** 班 姓名:** 座号: ** 时间:2010/6/2一、 实验目的(1) 熟悉VC++开发平台和开发语言。

(2) 掌握雅可比及高斯-塞德尔迭代法解方程组的迭代法,并能根据给定的精度要求计算(包括迭代过程);比较两种方法的优劣。

(3) 培养编程和上机调试能力。

二、 实验设备一台PC 机,XP 操作系统,VC++软件三、 实验内容用雅可比迭代法和高斯-塞德尔迭代法解方程组1231231238322041133631236x x x x a x x x x x -+=⎧⎪+-=⎨⎪++=⎩,其精度为10-5。

四、 算法描述1. 雅克比迭代法公式:X[0][k+1] = ( 1 / a[0][0] )*[ b[0] –a[0][1]*X[1][k] – a[0][2]*X[2][k] ]; X[1][k+1] = ( 1 / a[1][1] )*[ b[1] –a[0][0]*X[0][k] – a[0][2]*X[2][k] ]; X[2][k+1] = ( 1 / a[2][2] )*[ b[2] –a[0][0]*X[0][k] – a[0][1]*X[1][k] ];2. 高斯-赛德尔迭代法公式:X[0][k+1] = ( 1 / a[0][0] )*[ b[0] –a[0][1]*X[1][k] – a[0][2]*X[2][k] ]; X[1][k+1] = ( 1 / a[1][1] )*[ b[1] –a[0][0]*X[0][k+1] – a[0][2]*X[2][k] ]; X[2][k+1] = ( 1 / a[2][2] )*[ b[2] –a[0][0]*X[0][k+1] – a[0][1]*X[1][k+1] ];3. 流程图雅克比流程图高斯-赛德尔流程图五、程序代码/*雅克比方法类Jacobi.h*/#ifndef A#define A#define MAX_SIZE 50class Jacobi{public:void Solve(int n,double a[MAX_SIZE][MAX_SIZE],double b[MAX_SIZE],intMAX_XunHuan,double e,int pre);};#endif/*雅克比方法类方法实现Jacobi.cpp*/#ifndef B#define B#include "Jacobi.h"#include "iostream"#include "math.h"#include "iomanip"using namespace std;double X[MAX_SIZE][MAX_SIZE]={0};double E[MAX_SIZE];void Jacobi::Solve(int n,double a[MAX_SIZE][MAX_SIZE],double b[MAX_SIZE],int MAX_XunHuan,double e,int pre){int i,j=1,z;double s=0;int flag=1;cout<<"请输入初始值X[i][0]:";for (i=0;i<n;i++){cin>>X[i][0];}for (j=1;j<MAX_XunHuan&&flag;j++){flag=0;for (i=0;i<n;i++){s=0;for (z=0;z<n;z++){if (i!=z){s+=a[i][z]*X[z][j-1];}}X[i][j]=1.0/a[i][i]*(b[i]-s);}E[j]=fabs(X[0][j]-X[0][j-1]);for (i=1;i<n;i++){if(fabs(X[i][j]-X[i][j-1])>E[j])E[j]=fabs(X[i][j]-X[i][j-1]);}if (E[j]>e){flag=1;}}if(flag==0){for (i=0;i<n;i++){cout<<" X"<<i<<"(k) ";}cout<<" 误差"<<endl;for (i=0;i<j;i++){cout<<setiosflags(ios::left)<<setiosflags(ios::fixed)<<setprecision(pre)<<X[0][i]<<" "<<X[1][i]<<" "<<X[2][i]<<" ";if(i>0){if(i!=j-1)cout<<E[i]<<endl;elsecout<<E[i]<<" < "<<e<<endl;}elsecout<<" ∞"<<endl;}}elsecout<<"没有结果,最大循环次数不够\n";cout<<"迭代次数为"<<j<<endl;}#endif/*/*高斯-赛德尔方法类Gauss.h*/#ifndef C#define C#define MAX_SIZEG 50class Gauss{public:void Solve(int n,double a[MAX_SIZEG][MAX_SIZEG],double b[MAX_SIZEG],int MAX_XunHuan,double e,int pre);};#endif/*高斯-赛德尔方法类方法实现Gauss.cpp*/#ifndef D#define D#include"Gauss.h"#include "math.h"#include "iostream"#include "iomanip"using namespace std;double XG[MAX_SIZEG][MAX_SIZEG]={0};double EG[MAX_SIZEG];void Gauss::Solve(int n,double a[MAX_SIZEG][MAX_SIZEG],double b[MAX_SIZEG],int MAX_XunHuan,double e,int pre){int i,j=1,z;double s=0;int flag=1;cout<<"请输入初始值XG[i][0]:";for (i=0;i<n;i++){cin>>XG[i][0];}for (j=1;j<MAX_XunHuan&&flag;j++){flag=0;for (i=0;i<n;i++){s=0;for (z=0;z<n;z++){if (i!=z){if(z>i)s+=a[i][z]*XG[z][j-1];elses+=a[i][z]*XG[z][j];}}XG[i][j]=1.0/a[i][i]*(b[i]-s);}EG[j]=fabs(XG[0][j]-XG[0][j-1]);for (i=1;i<n;i++){if(fabs(XG[i][j]-XG[i][j-1])>EG[j])EG[j]=fabs(XG[i][j]-XG[i][j-1]);}if (EG[j]>e){flag=1;}}if(flag==0){for (i=0;i<n;i++){cout<<" XG"<<i<<"(k) ";}cout<<" 误差"<<endl;for (i=0;i<j;i++){cout<<setiosflags(ios::left)<<setiosflags(ios::fixed)<<setprecision(pre)<<XG[0][i]<<" "<<XG[1][i]<<" "<<XG[2][i]<<" ";if(i>0){if(i!=j-1)cout<<EG[i]<<endl;elsecout<<EG[i]<<" < "<<e<<endl;}elsecout<<" ∞"<<endl;}}else cout<<"没有结果,最大循环次数不够\n";cout<<"迭代次数为"<<j<<endl;}#endif/*主函数Main*/#include "iostream"#include "Jacobi.h"#include "Jacobi.cpp"#include "Gauss.h"#include "Gauss.cpp"using namespace std;int main(){Jacobi J;Gauss G;int key;int i,j;int pre;double a[MAX_SIZE][MAX_SIZE]={0};double b[MAX_SIZE]={0};int n,MAX_XunHuan;double e;do{cout<<"请输入方程组的阶数:";cin>>n;cout<<"请输入系数矩阵A:";for (i=0;i<n;i++){for (j=0;j<n;j++){cin>>a[i][j];}}cout<<"请输入常数矩阵B:";for (i=0;i<n;i++){cin>>b[i];}cout<<"请输入最大循环次数:";cin>>MAX_XunHuan;cout<<"请输入最小误差:";cin>>e;cout<<"请输入精度输出控制(小数点后的位数)"; cin>>pre;cout<<"结束0:\n雅克比迭代法求解1:\n高斯-赛德尔求解2:";cin>>key;if (key==1){J.Solve(n,a,b,MAX_XunHuan,e,pre);}if (key==2){G.Solve(n,a,b,MAX_XunHuan,e,pre);}} while (key);return 0;}六、实验结果1.这次试验很简单,主要是公式问题,做得很顺利。

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 足够大时,此序列就可以作为线性方程组的近似解。

分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组

分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组

分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组【jacobi 迭代法和 gauss-seidel 迭代法分别应用于方程组的求解】1. 引言在数学领域中,方程组的求解一直是一个重要的课题。

为了解决复杂的线性方程组,人们提出了各种迭代方法,其中 jacobi 迭代法和gauss-seidel 迭代法是两种常见的方法。

本文将探讨这两种迭代方法在求解方程组中的应用。

2. jacobi 迭代法的原理和应用jacobi 迭代法是一种基于逐次逼近的迭代方法。

对于线性方程组AX=B,其中 A 是系数矩阵,X 是未知数向量,B 是已知向量。

我们可以通过以下公式进行逐次逼近:X(k+1) = D^(-1)*(B - (L+U)X(k))其中,D、L、U 分别是 A 的对角线、下三角和上三角矩阵。

jacobi 迭代法的优点在于易于理解和实现,但在收敛速度上较慢,需要进行多次迭代才能得到精确解。

在实际应用中,需要根据实际情况选择合适的迭代次数。

3. gauss-seidel 迭代法的原理和应用与 jacobi 迭代法类似,gauss-seidel 迭代法也是一种基于逐次逼近的迭代方法。

不同之处在于,gauss-seidel 迭代法在计算 X(k+1) 时利用了已经得到的 X(k) 的信息,即:X(k+1)_i = (B_i - Σ(A_ij*X(k+1)_j,j≠i))/A_ii这种方式使得 gauss-seidel 迭代法的收敛速度较快,通常比 jacobi 迭代法更快,尤其是对于对角占优的方程组。

4. 分别用 jacobi 迭代法和 gauss-seidel 迭代法求解方程组为了更具体地说明 jacobi 迭代法和 gauss-seidel 迭代法的应用,我们分别用这两种方法来求解以下方程组:2x1 + x2 = 9x1 + 3x2 = 11我们将该方程组写成矩阵形式 AX=B:|2 1| |x1| |9||1 3| * |x2| = |11|我们根据 jacobi 迭代法和 gauss-seidel 迭代法的原理,依次进行迭代计算,直到满足收敛条件。

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组
5
x1=x2; x2=G*x2+d; N=N+1; end x=x2; 程序结果
(1)
(2)
6
for i=1:n d=A(i,i); if abs(d)<e warning('矩阵 A 输入有误'); return; end sum=0; for j=1:n if j~=i sum=sum+A(i,j)*x0(j); end end x1(i)=(b(i)-sum)/A(i,i);
end k=k+1; r=max(abs(x1-x0)); x0=x1; fprintf('第%d 次迭代:',k) fprintf('\n 与上次计算结果的距离:%f \n',r) disp(x1); if k>100
warning('不收敛'); end end x=x0;
2
程序结果
(1)
3
(2)
4
Gauss-Seidel 迭代法:
程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3];
A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵 A 不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解 A=D+L+U,D 是对角阵,L 是下三角阵,U 是上三角阵 U=zeros(n); D=zeros(n);
= (2)
= Jacobi 迭代法:
流程图 开
始
判断 b 中的最大值 有没有比误差大

雅可比迭代法和高斯-塞德尔迭代法求解线性方程组

雅可比迭代法和高斯-塞德尔迭代法求解线性方程组

实验报告内容一 实验目的与要求(实验题目)1.分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组使得误差不超过 2.用不动点迭代法求方程的实根:02010223=-++x x x二 模型建立(相关主要计算公式)1. 雅可比迭代法⎩⎨⎧[],...,,k ,n ,...,i x a b a x n i j j )k (j j i i ii )k (i 21021111==∑-=≠=+ 其中()()()()()T n x ,...x ,x x 002010=为初始向量.2.高斯-塞德尔迭代法⎩⎨⎧[],...,,k ,n ,,i x a x a b a x i j n i j )k (j ij )k (j ij i ii )k (i 21021111111==∑∑--=-=+=++3.不动点迭代法• ...1,0),(1==+k x xk k ϕ三、 实验过程、步骤(程序)1. 雅可比迭代法#include "stdio.h"#include "math.h"#include "string.h"main(){⎪⎩⎪⎨⎧=++=-+=+-3612363311420238321321321x x x x x x x x x 410-int i,j,k;float m1=0.0,m2=0.0;float a[3][4]={8,-3,2,20,4,11,-1,33,6,3,12,36};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]);}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]={8,-3,2,4,11,-1,6,3,12},d[n]={20,33,36}; 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 <stdio.h>#include <math.h>double f( double x ){return x * x * x + 2 * x * x + 10 * x - 20;}double fdx( double x ){return 3 * x * x + 18.4 * x + 16.7;}int main( ){int t1 = 0, t2 = 1;double x[ 2 ], ep = 1e-8;x[ 0 ] = 0;do{t1 = 1 - t1;t2 = 1 - t2;x[ t1 ] = x[ t2 ] - f( x[ t2 ] ) / fdx( x[ t2 ] );}while( fabs( x[ t1 ] - x[ t2 ] ) > ep );printf("解得x=%lf\n", x[ t1 ]);return 0;}四.实验结果:1.雅可比迭代法:2.高斯-塞德尔迭代法:.3.不动点迭代法:五.实验小结通过这次上机,学会了用Jacobis迭代法,高斯-塞德尔迭代法求解线性方程组,算法程序比较复杂,特别是要多次使用数组条件及for循环语句。

电力系统三种潮流计算方法的比较

电力系统三种潮流计算方法的比较 一、高斯-赛德尔迭代法:以导纳矩阵为基础,并应用高斯--塞德尔迭代的算法是在电力系统中最早得到应用的潮流计算方法,目前高斯一塞德尔法已很少使用。

将所求方程 改写为 不能直接得出方程的根,给一个猜测值 得 又可取x1为猜测值,进一步得:反复猜测 则方程的根 优点:1. 原理简单,程序设计十分容易。

2. 导纳矩阵是一个对称且高度稀疏的矩阵,因此占用内存非常节省。

3. 就每次迭代所需的计算量而言,是各种潮流算法中最小的,并且和网络所包含的节点数成正比关系。

缺点:1. 收敛速度很慢。

2. 对病态条件系统,计算往往会发生收敛困难:如节点间相位角差很大的重负荷系统、包含有负电抗支路(如某些三绕组变压器或线路串联电容等)的系统、具有较长的辐射形线路的系统、长线路与短线路接在同一节点上,而且长短线路的长度比值又很大的系统。

3. 平衡节点所在位置的不同选择,也会影响到收敛性能。

二、牛顿-拉夫逊法:求解 设 ,则按牛顿二项式展开:当△x 不大,则取线性化(仅取一次项)则可得修正量对 得:作变量修正: ,求解修正方程牛顿法是数学中求解非线性方程式的典型方法,有较好的收敛性。

自从20世纪60年代中期采用了最佳顺序消去法以后,牛顿法在收敛性、内存要求、计算速度方面都超过了其他方法,成为直到目前仍被广泛采用的方法。

优点:1. 收敛速度快,若选择到一个较好的初值,算法将具有平方收敛特性,一般迭代4—5次便可以收敛到一个非常精确的解。

而且其迭代次数与所计算网络的规模基本无关。

2. 具有良好的收敛可靠性,对于前面提到的对以节点导纳矩阵为基础的高斯一塞德尔法呈病态的系统,牛顿法均能可靠地收敛。

3. 牛顿法所需的内存量及每次迭代所需时间均较前述的高斯一塞德尔法为多,并与程序设计技巧有密切关系。

缺点:()0f x =10()x x ϕ=迭代 0x 21()x x ϕ=1()k k x x ϕ+=()x x ϕ=()0f x =0x x x =+∆1k k k x x x +=+∆牛顿法的可靠收敛取决于有一个良好的启动初值。

用雅可比迭代法和高斯赛德尔迭代法解线性方程组

西安财经学院本科实验报告学院(部)统计学院实验室数学专业实训基地课程名称大学数学实验学生姓名董童丹(编程)杨媚(实验报告)学号0804280125 0804280126专业数学与应用数学0801教务处制二0一一年五月四日《用雅可比迭代法和高斯赛德尔迭代法解线性方程组》实验报告开课实验室:实验室313 2011年5月 4日 学院 统计学院年级、专业、班数学与应用数学0801班姓名 董童丹 杨媚成绩课程 名称大学数学实验实验项目 名 称 用雅可比迭代法和高斯赛德尔迭代法解线性方程组指导教师严惠云教师评语教师签名:年 月 日一、实验目的:1)掌握用MATLAB 软件求微分方程初值问题数值解的方法; 2)通过实例学习用线性方程组模型解决简化的实际问题; 3)了解用雅可比迭代法和高斯赛德尔迭代法解线性方程组。

二、实验环境:本次上机实践所使用的平台和相关软件Matlab 。

三、实验内容:*题目1、分别用雅可比迭代法和高斯-赛德尔迭代法计算下列方程组,均取相同的初值T x )1,1,1()0(=,观察其计算结果,并分析其收敛性.⎪⎩⎪⎨⎧=++=++-=--4780591109321321321x x x x x x x x x2、定义矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------=321412132141412132141412132141213A*算法设计1、雅可比迭代法:原线性方程组可等价地写为:⎪⎩⎪⎨⎧+--=-=++=.478,59,1109213312321x x x x x x x x x (1)利用线性方程组(1)可以进行如下形式的迭代:⎪⎩⎪⎨⎧+--=-=++=+++.478,59,1109)(2)(1)1(3)(3)(1)1(2)(3)(2)1(1k k k k k k k k k x x x x x x x x x (2) 对选定的初始解Tx x x x ),,()0(3)0(2)0(1)0(=,可由(2)式迭代计算.,,)2()1( x x 如果迭代一定次数后,所得到的结果相同或非常接近,并与方程组的精确解相等或非常接近,则认为得到的结果为所求解.高斯-赛德尔迭代法: 利用高斯-赛德尔迭代公式:⎪⎩⎪⎨⎧+--=-=++=++++++478,59,1109)1(2)1(1)1(3)(3)1(1)1(2)(3)(2)1(1k k k k k k k k k x x x x x x x x x 进行迭代,如果迭代一定次数后,所得到的结果相同或非常接近,并与方程组的精确解相等或非常接近,则认为得到的结果为所求解.2、该矩阵为稀疏矩阵,主对角线元素为3,次对角线为-1/2,再次对角线为-1/4,用sparse 命令就可以定义出所需的矩阵. 程序为:高斯—赛德尔迭代法求解:程序为:四.实验结果分析:用雅可比迭代法解,由已知条件给定初始解T x )1,1,1()0(=,计算至=k 200时,可得)0.5575 1.1637,- 0.0985,- ()200(=x已经与原线性方程组的精确解非常接近.即用雅可比迭代法得到解.由高斯-赛德尔迭代法,计算至=k 20时,可得)5574.0,1639.1,0984.0()20(--=x ,已经与原线性方程组的精确解非常接近.即用雅可比迭代法得到解.对原线性方程组用以上两种迭代公式计算的结果进行比较,可以发现高斯-赛德尔迭代法比雅可比迭代法收敛要快.对原线性方程组雅可比迭代法和高斯-赛德尔迭代法的计算结果,雅可比迭代公式简单,特别适合并行计算;高斯-赛德尔迭代计算出的)1(+k i x 可立即存入)(k i x 的位置,只需一个向量存储单元,是典型的串行计算,一般情况下收敛会快一些.通过本次实验,学会用MA TLAB 软件数值求解线性代数方程组,分别用雅可比迭代法和高斯-赛德尔迭代法对线性方程组进行迭代求解,通过对比结果,对迭代法的收敛性和解的稳定性作初步分析, 对两种方法有了进一步的认识.学会了用命令定义稀疏矩阵.。

用雅克比迭代法和高斯-赛德迭代法解方程组

解:由x=[1;2;3],算出b=[-3; 7;6]知:X1=(2*X3-3)/3X2=(-X3+7)/2X3=(2X1-X2+6)/21.雅克比法:X1(1)=0;X2(1)=0;X3(1)=0;for i=1:50X1(i+1)= (2*X3(i)-3)/3;X2(i+1)=(-X3(i)+7)/2;X3(i+1)=(2*X1(i)-X2(i)+6)/2;End迭代50次结果如下:X1 =Columns 1 through 110 -1.0000 1.0000 -0.8333 1.0000 -0.6806 1.0000 -0.5405 1.0000 -0.4121 1.0000Columns 12 through 22-0.2945 1.0000 -0.1866 1.0000 -0.0877 1.0000 0.0029 1.0000 0.0860 1.0000 0.1622Columns 23 through 331.0000 0.2320 1.0000 0.2960 1.0000 0.3547 1.0000 0.4085 1.0000 0.4577 1.0000Columns 34 through 440.5029 1.0000 0.5444 1.0000 0.5823 1.0000 0.61711.0000 0.6490 1.0000 0.6783Columns 45 through 511.0000 0.7051 1.0000 0.7297 1.0000 0.7522 1.0000X2 =Columns 1 through 110 3.5000 2.0000 3.3750 2.0000 3.2604 2.0000 3.1554 2.0000 3.0591 2.0000Columns 12 through 222.9708 2.0000 2.8899 2.0000 2.8158 2.0000 2.7478 2.0000 2.6855 2.0000 2.6284Columns 23 through 332.0000 2.5760 2.0000 2.5280 2.0000 2.4840 2.0000 2.4437 2.0000 2.4067 2.0000Columns 34 through 442.3728 2.0000 2.3417 2.0000 2.3133 2.0000 2.2871 2.0000 2.2632 2.0000 2.2413Columns 45 through 512.0000 2.2212 2.0000 2.2027 2.0000 2.1859 2.0000X3 =Columns 1 through 110 3.0000 0.2500 3.0000 0.4792 3.0000 0.6892 3.0000 0.8818 3.0000 1.0583Columns 12 through 223.0000 1.2201 3.0000 1.3684 3.0000 1.5044 3.0000 1.6290 3.0000 1.7433 3.0000Columns 23 through 331.8480 3.0000 1.9440 3.00002.03203.0000 2.1127 3.0000 2.1866 3.0000 2.2544Columns 34 through 443.0000 2.3165 3.0000 2.3735 3.0000 2.4257 3.0000 2.4736 3.0000 2.5174 3.0000Columns 45 through 512.55763.0000 2.5945 3.0000 2.6283 3.0000 2.6593 2.高斯-赛德法:XX1(1)=0;XX2(1)=0;XX3(1)=0;for i=1:50XX1(i+1)= (2*X3(i)-3)/3;XX2(i+1)=(-X3(i)+7)/2;XX3(i+1)=(2*X1(i+1)-X2(i+1)+6)/2;End迭代50次结果如下:X1 =Columns 1 through 110 -1.0000 1.0000 -0.8333 1.0000 -0.6806 1.0000 -0.5405 1.0000 -0.4121 1.0000Columns 12 through 22-0.2945 1.0000 -0.1866 1.0000 -0.0877 1.0000 0.0029 1.0000 0.0860 1.0000 0.1622Columns 23 through 331.0000 0.2320 1.0000 0.2960 1.0000 0.3547 1.0000 0.4085 1.0000 0.4577 1.0000Columns 34 through 440.5029 1.0000 0.5444 1.0000 0.5823 1.0000 0.61711.0000 0.6490 1.0000 0.6783Columns 45 through 511.0000 0.7051 1.0000 0.7297 1.0000 0.7522 1.0000X2 =Columns 1 through 110 3.5000 2.0000 3.3750 2.0000 3.2604 2.0000 3.1554 2.0000 3.0591 2.0000Columns 12 through 222.9708 2.0000 2.8899 2.0000 2.8158 2.0000 2.7478 2.0000 2.6855 2.0000 2.6284Columns 23 through 332.0000 2.5760 2.0000 2.5280 2.0000 2.4840 2.0000 2.4437 2.0000 2.4067 2.0000Columns 34 through 442.3728 2.0000 2.3417 2.0000 2.3133 2.0000 2.2871 2.0000 2.2632 2.0000 2.2413Columns 45 through 512.0000 2.2212 2.0000 2.2027 2.0000 2.1859 2.0000X3 =Columns 1 through 110 3.0000 0.2500 3.0000 0.4792 3.0000 0.6892 3.0000 0.8818 3.0000 1.0583Columns 12 through 223.0000 1.2201 3.0000 1.3684 3.0000 1.5044 3.0000 1.6290 3.0000 1.7433 3.0000Columns 23 through 331.8480 3.0000 1.9440 3.00002.03203.0000 2.1127 3.0000 2.1866 3.0000 2.2544Columns 34 through 443.0000 2.3165 3.0000 2.3735 3.0000 2.4257 3.0000 2.4736 3.0000 2.5174 3.0000Columns 45 through 512.55763.0000 2.5945 3.0000 2.6283 3.0000 2.6593结果分析:从上面的雅可比迭代法和高斯—赛德尔迭代法这两种方法所得的实验结果可知,对于同样的矩阵,对于同样的精度,雅可比迭代法要比高斯-赛德尔迭代法慢。

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

雅克比迭代法和高斯赛德尔迭代法的算法描述一. 雅克比迭代法雅克比迭代法(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元素的值替换成当前迭代求得的值来计算。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档