第三节 雅克比迭代法和高斯-塞德尔迭代法
雅可比迭代法和高斯塞德尔迭代法对比
雅可比迭代法和高斯塞德尔迭代法对比引言雅可比迭代法和高斯塞德尔迭代法是数值分析中常用的迭代求解线性方程组的方法。
它们都是通过迭代更新变量的值,逐渐逼近方程组的真实解。
本文将详细讨论这两种迭代法的原理、特点和适用情况,并给出一些比较和应用实例。
雅可比迭代法(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迭代法算法比较目录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 迭代法分别应用于方程组的求解】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迭代法求解线性方程组
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.雅可比迭代源代码A=[6,-2,-1,-1;-2,18,-1,-1;-1,-1,6,-2;-1,-1,-1,12];b=[-16;6;9;43];x0=[0;0;0;0];it_max=500;eps=1e-6;[x,k]=jacobi(A,b,x0,eps,it_max)function [x,n]=jacobi(A,b,x0,eps,it_max)% 求线性方程组的Jacobi迭代法,调用格式为% [x, k] = jacobi(A,b,x0,eps,it_max)% 其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-6, % it_max 为最大迭代次数,默认为200% x 为线性方程组的解,k迭代次数if nargin ==3eps = 1.0e-6;M = 200;elseif nargin<3disp('输入参数数目不足3个');returnelseif nargin ==5M = it_max;endD = diag(diag(A));%求A的对角矩阵L = -tril(A,-1);%求A的下三角矩阵U = -triu(A,1);%求A的上三角矩阵B = D\(L+U);f = D\b;x = B*x0+f;n = 1;%迭代次数while norm(x-x0)>=epsx0 = x;x = B*x0+fn = n+1;if(n>=M)disp('Warning:迭代次数太多,可能不收敛!')return;endEnd2.高斯赛德尔迭代源代码A=[6,-2,-1,-1;-2,18,-1,-1;-1,-1,6,-2;-1,-1,-1,12];b=[-16;6;9;43];x0=[0;0;0;0];it_max=500;eps=1e-6;[x,k]=jacobi(A,b,x0,eps,it_max)function [x,n] = guaseidel(A,b,x0,eps,it_max)% 求线性方程组的Gauss-Seidel迭代法,调用格式为% [x, k] = guaseidel(A,b,x0,eps,it_max)% 其中, A 为线性方程组的系数矩阵,b 为常数项,eps 为精度要求,默认为1e-5, % it_max 为最大迭代次数,默认为100% x 为线性方程组的解,k迭代次数if nargin == 3eps = 1.0e-6it_max= 200elseif nargin == 4it_amx = 200elseif nargin <3disp('输入参数个数不足3个');return;endD = diag(diag(A));%求A的对角矩阵L = -tril(A,-1);%求A的下三角矩阵,不带对角线U = -triu(A,1);%求A的上三角矩阵G = (D-L)\U;f = (D-L)\b;x = G*x0+f;n=1; %迭代次数while norm(x-x0)>=epsx0 = x;x = G*x0+f;n = n+1;if(n>=it_max)disp('Warning:迭代次数太多,可能不收敛');return;endEnd3.方程组A=[6,-2,-1,-1;-2,18,-1,-1;-1,-1,6,-2;-1,-1,-1,12]; b=[-16;6;9;43];即4.MATLAB运行结果截图jacobi运行结果guaseidel运行结果jacobi迭代和guaseidel迭代从以上的运行结果比较来看,guaseidel的收敛性和收敛速度更快。
雅可比迭代法与高斯-塞德尔迭代法
线性方程组的迭代法一、实验目的及要求掌握解线性方程组的雅可比迭代法,培养编程与上机调试能力。
二、相关理论知识1、雅可比迭代计算b Ax =,将系数矩阵分解U L D A --=,雅可比迭代格式为f Jx x k k +=+)()1(其中)(1U L D J +=-,b D f 1-=。
Matlab 相关函数:D=diag (diag (A ))n=norm(a,inf) 表示求向量a 的无穷范数。
2、高斯-塞德尔迭代法计算b Ax =,将系数矩阵分解U L D A --=,雅可比迭代格式为f Gx x k k +=+)()1(其中U L D G 1)(--=,b L D f 1)(--=。
Matlab 相关函数:tril (A ,-1) 表示输出矩阵为矩阵A 的下三角,主对角线元素为0.triu (A ,1) 表示输出矩阵为矩阵A 的上三角,主对角线元素为0.三、研究、解答以下问题问题 1、用雅可比迭代法解线性方程组⎪⎩⎪⎨⎧=++=++=++2010311102143210321321321x x x x x x x x x , (1)取初始值)0,0,0(',分别保证当3)()1(10-∞+<-k k x x 和6)()1(10-∞+<-k k x x 时,迭代终止,要求输出对应的近似解。
(2)输出对应的迭代的次数。
(3)输出一个矩阵,每行表示每次迭代的向量。
1.程序:function [x,i,G]=kb(A,b,max,eps)A=[10 2 3;2 10 1;3 1 10];b=[14 11 20]';max=100;eps=1e-006D=diag(diag(A));ID=inv(D);J=ID*(-A+D);f=ID*b;x0=zeros(rank(A),1);x=x0;G(1,:)=x0';for i=1:maxk=x;x=J*x+f;G(i+1,:)=x';n=norm((x-k),inf);if n<=epsbreak ;endendGi结果:(1)eps = 1.0000e-003G =0 0 01.4000 1.10002.00000.5800 0.6200 1.47000.8350 0.8370 1.76400.7034 0.7566 1.66580.7489 0.7927 1.71330.7275 0.7789 1.69600.7354 0.7849 1.70390.7319 0.7825 1.70090.7332 0.7835 1.70220.7326 0.7831 1.7017i =10ans =0.73260.78311.7017(2)eps =1.0000e-006G =0 0 01.4000 1.10002.0000 0.5800 0.6200 1.4700 0.8350 0.8370 1.7640 0.7034 0.7566 1.6658 0.7489 0.7927 1.7133 0.7275 0.7789 1.6960 0.7354 0.7849 1.7039 0.7319 0.7825 1.7009 0.7332 0.7835 1.7022 0.7326 0.7831 1.7017 0.7329 0.7833 1.7019 0.7328 0.7832 1.7018 0.7328 0.7833 1.7018 0.7328 0.7833 1.7018 0.7328 0.7833 1.7018 0.7328 0.7833 1.70180.7328 0.7833 1.70180.7328 0.7833 1.7018i =18ans =0.73280.78331.70182、用高斯-塞德尔迭代法计算第1题中的线性方程组。
雅可比迭代法和高斯超松弛迭代
雅可比迭代法分量形式(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
雅克比迭代法、高斯-赛德尔迭代法
昆明理工大学(计算机算法)实验报告实验名称:实验时间:2009 年 6 月 3 日专业:电信071姓名:李春华学号:200711102118成绩:一、实验目的1.通过实验进一步掌握高斯消去法的基本思想;2.通过上机实验进一步掌握高斯消去法的计算步骤,并能灵活运用;3.通过对高斯消去法的调试练习,进一步体会他的特点;4.通过上机调试运行,逐步培养解决实际问题的编程能力。
二、实习要求1.熟悉Turbo C的编译环境;2.实习前复习雅可比迭代法、高斯—塞得儿迭代法的计算步骤。
三、实习设备1.硬件设备:单机或网络环境下的微型计算机一台;2.软件设备:DOS3.3以上炒作系统,Turbo C2.0编译器。
四、实习内容雅可比迭代法与高斯—塞得儿迭代法用雅可比雅可比迭代法与高斯—塞得儿迭代法求解线性方程组Ax=b:要求:(1)写出程序的运行结果。
(2)写出迭代次数。
程序如下:1、雅可比迭代法#include<stdio.h>#include<math.h>#define n 3#define MAX_N 100#define eps 1e-6int yacobi(float a[n][n],float b[n],float x[n]){float d,s,max;float y[n];int i,j,k,flag;k=0;for(i=0;i<n;i++)x[i]=0.0;while(1){max=0.0;k++;for(i=0;i<n;i++){s=0.0;k++;for(j=0;j<n;j++){if(j==i)continue;s=s+a[i][j]*x[j];}y[i]=(b[i]-s)/a[i][i];d=fabs(y[i]-x[j]);if(max<d) max=d;}if(max<eps){flag=1;break;if(k>=MAX_N){flag=0;break;}for(i=0;i<n;i++)x[i]=y[i];}return(flag);}void zg_matric(float a[n][n],float b[n]) {int i,j;for(i=0;i<n;i++){ for(j=0;j<n;j++)printf("%10f",a[i][j]);printf("%12f",b[i]);printf("\n");}printf("\n");}{float a[][n]={{6,2 -1},{1,4,-2},{-3,1,4}};float b[n]={-3,2,4 };float x[n];int i,k;zg_matric(a,b);k=yacobi(a,b,x);if(k==1)for(i=0;i<n;i++)printf(" x%d=%11.7f\n",i+1,x[i]);elseprintf("The Method is disconvergent!\n");}结果如图:2、高斯—赛德尔迭代法#include<stdio.h>#include<math.h>#define n 3#define MAX_N 100#define eps 1e-6int seidel(float a[n][n],float b[n],float x[n]) {float d,s,max,temp;int i,j,k,flag;k=0;for(i=0;i<n;i++)x[i]=0.0;while(1){max=0.0;k++;for(i=0;i<n;i++){s=0.0;temp=x[i];for(j=0;j<n;j++){if(j==i)continue;s=s+a[i][j]*x[j];}x[i]=(b[i]-s)/a[i][i];d=fabs(x[i]-temp);if(max<d) max=d;}if(max<eps){flag=1;break;}if(k>=MAX_N){flag=0;break;}}return(flag);}void zg_matric(float a[n][n],float b[n]) {int i,j;for(i=0;i<n;i++){ for(j=0;j<n;j++)printf("%10f",a[i][j]);printf("%12f",b[i]);printf("\n");}printf("\n");}void main(){float a[][n]={{6,2,-1},{1,4,-2},{-3,1,4}};float b[n]={-3,2,4};float x[n];int i,k;zg_matric(a,b);k=seidel(a,b,x);if(k==1)for(i=0;i<n;i++)printf(" x%d=%11.7f\n",i+1,x[i]);elseprintf("The Method is disconvergent!\n");}结果如下:五、思考题:(1)雅可比迭代法与高斯—塞得尔迭代法的基本思想是什么?答:雅可比迭代法基本思想为对于给定的线性方程组Ax=b,可以用不同的方法把它变为与之等价的,行为:x=Bx+f的方程组。
雅克比迭代法和高斯-塞德尔迭代法
一、 向量范数
定义:设 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范数。
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
设
x
( x1,
x2 ,
, xn )T
1-范数: x 1
xi
i 1
❖ 2-范数:
n
x ( 2
xi2
)
1 2
(x, x)i 1 Nhomakorabea-范数:
x
max
1 i n
xi
上述3种向量范数统称为P-范数
n
x ( p
xi p ) 1 p
1 p
i 1
二、 矩阵范数
定义:设 f ( A是) Rnn的一个R映射,若对
x3(k ) ) 10
x ( k 1) 2
(5
2 x1(k1)
3x3(k) ) (10)
x ( k 1) 3
(14
x ( k 1) 1
3x2(k1) ) 10
雅克比迭代法 取初值 x (0 0 0)T
雅克比迭代法和高斯-塞德尔迭代法(经典实用)
雅克比迭代法和高斯-塞德尔迭代法(经典实用)雅克比迭代法和高斯-塞德尔迭代法都是求解线性方程组的经典方法,它们的基本思路是将矩阵分解为对角、上三角或下三角矩阵,然后通过迭代求解方程组。
以下将详细介绍这两种方法的原理和实现。
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. 实用在实际应用中,雅克比迭代法和高斯-塞德尔迭代法在求解某些特定的线性方程组时往往比直接求解更具有优势。
例如,在求解非常大型的线性方程组时,直接求解的计算量很大,求解时间也很长。
而使用迭代法则可以大幅减少计算量和求解时间,提高求解效率。
此外,由于迭代法可以直观地呈现方程组的解向量随着迭代步数的变化情况,因此可以更快地检查迭代结果的趋势和误差范围。
总之,雅克比迭代法和高斯-塞德尔迭代法是求解线性方程组的两种有效方法,具有应用广泛、易于实现和迭代收敛速度快的优点。
三种迭代法雅克比、高斯赛贝尔、超松弛求解方程组实验报告
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非负实值 函数
➢常用的几种向量范数:
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