雅克比迭代法和高斯-赛德尔法解线性方程组(C++)
- 格式:docx
- 大小:148.60 KB
- 文档页数:6
雅可比迭代法和高斯塞德尔迭代法对比引言雅可比迭代法和高斯塞德尔迭代法是数值分析中常用的迭代求解线性方程组的方法。
它们都是通过迭代更新变量的值,逐渐逼近方程组的真实解。
本文将详细讨论这两种迭代法的原理、特点和适用情况,并给出一些比较和应用实例。
雅可比迭代法(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.这次试验很简单,主要是公式问题,做得很顺利。
4. 线性方程组求解4.用雅格比法与高斯-赛德尔迭代法解下列方程组Ax =b ,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。
(1)A 行分别为A 1=[6,2,-1],A 2=[1,4,-2],A 3=[-3,1,4]; b 1=[-3,2,4]T , b 2=[100,-200,345]T ,(2) A 行分别为A 1=[1,0.8,0.8],A 2=[0.8,1,0.8],A 3=[0.8,0.8,1];b 1=[3,2,1] T , b 2=[5,0,-10]T ,(3)A 行分别为A 1=[1,3],A 2=[-7,1];b =[4,6]T , (1)雅可比法A 为所求方程组的系数矩阵,将系数矩阵()n n ij A a R ⨯=∈分为三部分,即111212221211000000n n nn n n a a a a a a A a a a --⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪-- ⎪ ⎪ ⎪=-- ⎪ ⎪ ⎪ ⎪⎪ ⎪--⎝⎭⎝⎭⎝⎭D L U ≡--构造迭代方程,选取M 为A 的对角元素部分,即选取M D =,A D N =-,由此构造得到解AX b =的雅可比迭代法如下:()()()01,,0,1,,k k x xBx f k +⎧⎨=+=⎩ 初始向量(4-1)其中()111B I D A D L U J f D b ---=-=+≡=,,J 为雅可比迭代矩阵。
若A 为n 阶矩阵,迭代公式如下:()()()()()()()00001211,,,()/1,2,,;0,1,T n n k k ii ij j ii j j ix x x x x b a x a i n k +=≠⎧=⎪⎪⎪=-⎨⎪⎪==⎪⎩∑初始向量表示迭代次数(4-2) 在运行程序时首先需要手动输入矩阵A ,阶数n 、向量b 和初始向量x 0,根据式(4-2)不断迭代可求解得近似解。
分别用 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 迭代法的原理,依次进行迭代计算,直到满足收敛条件。
线性方程组的几种求解方法1.高斯消元法高斯消元法是求解线性方程组的一种常用方法。
该方法的基本思想是通过对方程组进行一系列简化操作,使得方程组的解易于求得。
首先将方程组表示为增广矩阵,然后通过一系列的行变换将增广矩阵化为行简化阶梯形,最后通过回代求解出方程组的解。
2.列主元高斯消元法列主元高斯消元法是在高斯消元法的基础上进行改进的方法。
在该方法中,每次选取主元时不再仅仅选择当前列的第一个非零元素,而是从当前列中选取绝对值最大的元素作为主元。
通过选取列主元,可以避免数值稳定性问题,提高计算精度。
3.LU分解法LU分解法是一种将线性方程组的系数矩阵分解为一个下三角矩阵L 和一个上三角矩阵U的方法。
首先进行列主元高斯消元法得到行阶梯形矩阵,然后对行阶梯形矩阵进行进一步的操作,得到L和U。
最后通过回代求解出方程组的解。
4.追赶法(三角分解法)追赶法也称为三角分解法,适用于系数矩阵是对角占优的三对角矩阵的线性方程组。
追赶法是一种直接求解法,将系数矩阵分解为一个下三角矩阵L和一个上三角矩阵U,然后通过简单的代数运算即可求得方程组的解。
5.雅可比迭代法雅可比迭代法是一种迭代法,适用于对称正定矩阵的线性方程组。
该方法的基本思想是通过不断迭代求解出方程组的解。
首先将方程组表示为x=Bx+f的形式,然后通过迭代计算不断逼近x的解。
6.高斯-赛德尔迭代法高斯-赛德尔迭代法是雅可比迭代法的改进方法。
该方法在每一次迭代时,使用已经更新的解来计算新的解。
相比于雅可比迭代法,高斯-赛德尔迭代法的收敛速度更快。
7.松弛因子迭代法松弛因子迭代法是一种对高斯-赛德尔迭代法的改进方法。
该方法在每一次迭代时,通过引入松弛因子来调节新解与旧解之间的关系。
可以通过选择合适的松弛因子来加快迭代速度。
以上是一些常用的线性方程组求解方法,不同的方法适用于不同类型的线性方程组。
在实际应用中,根据问题的特点和要求选择合适的求解方法可以提高计算的效率和精度。
实验报告内容一 实验目的与要求(实验题目)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循环语句。
线性方程组的四种数值解法(电子科技大学物理电子学院,四川 成都 610054)摘要:本文介绍了四种求解线性方程组的数值解法: 雅克比迭代法、高斯赛德尔迭代法、高斯消去法和改进的平方根法的基本原理和算法流程,通过求解具体方程,对四种求解方法进行了对比。
对于雅克比迭代法和高斯赛德尔迭代法,研究了两种算法对求解同一方程组的迭代效率差异,结果表明高斯赛德尔迭代法达到同样精度所需迭代次数较少。
对于高斯消去法,通过选择列主元的方法提高算法的准确度,计算结果表明高斯消去法计算精确,且运算复杂度也不是很高。
对于改进的平方根法,其运算复杂度低,但对于给定的方程组有着严苛的要求。
关键词:雅克比迭代法;高斯赛德尔迭代法;高斯消去法;改进的平方根法;线性方程组引言线性方程组的求解在日常生活和科研中有着极其重要的应用,但在实际运算中,当矩阵的维数较高时,用初等方法求解的计算复杂度随维数的增长非常快,因此,用数值方法求解线性方程组的重要性便显现出来。
经典的求解线性方程组的方法一般分为两类:直接法和迭代法。
前者例如高斯消去法,改进的平方根法等,后者的例子包括雅克比迭代法,高斯赛德尔迭代法等。
这些方法的计算复杂度在可以接受的范围内,因此被广泛采用。
一般来说,直接法对于阶数比较低的方程组比较有效;而后者对于比较大的方程组更有效。
在实际计算中,几十万甚至几百万个未知数的方程组并不少见。
在这些情况下,迭代法有无可比拟的优势。
另外,使用迭代法可以根据不同的精度要求选择终止时间,因此比较灵活。
在问题特别大的时候,计算机内存可能无法容纳被操作的矩阵,这给直接法带来很大的挑战。
而对于迭代法,则可以将矩阵的某一部分读入内存进行操作,然后再操作另外部分。
本文使用上述四种算法求解对应的方程组,验证各种算法的精确度和计算速度。
1 算法介绍1.1 雅克比迭代法 1.1.1 算法理论设线性方程组(1)b Ax的系数矩阵A 可逆且主对角元素 均不为零,令并将A 分解成(2)从而(1)可写成令其中. (3)以B 1为迭代矩阵的迭代法(公式)(4)称为雅克比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为(5)其中为初始向量.1.1.2 算法描述 1给定迭代初始向量X 0以及误差要求delta 2根据雅克比迭代公式计算出下一组向量3判断X 是否满足误差要求,即||X k+1 – X k || < delta4若误差满足要求,则停止迭代返回结果;若否,则返回第二步进行下一轮迭代1.2 高斯赛德尔迭代法nna ,...,a ,a 2211()nna ,...,a ,a diag D 2211=()D D A A +-=()b x A D Dx +-=11f x B x +=b D f ,A D I B 1111--=-=()()111f x B x k k +=+⎩⎨⎧[],...,,k ,n ,...,i x a ba xnij j )k (j j i iii)k (i21021111==∑-=≠=+()()()()()Tn x ,...x ,x x 002010=1.2.1 算法理论由雅克比迭代公式可知,在迭代的每一步计算过程中是用的全部分量来计算的所有分量,显然在计算第i 个分量时,已经计算出的最新分量没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第次近似的分量加以利用,就得到所谓解方程组的高斯—塞德尔(Gauss-Seidel )迭代法.把矩阵A 分解成(6)其中,分别为的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成即其中(7)以为迭代矩阵构成的迭代法(公式)(8)称为高斯—塞德尔迭代法(公式),用变量表示的形式为(9)1.2.2 算法描述 1给定迭代初始向量X 0以及误差要求delta2根据高斯赛德尔迭代公式计算出下一组向量()k x ()1+k x ()1+k ix ()()1111+-+k i k x ,...,x 1+k()1+k x()1+k jx U L D A --=()nna ,...,a ,a diag D 2211=U ,L --A ()b Ux x L D +=-22f x B x +=()()b L D f ,U L D B 1212---=-=2B ()()221f x B x k k +=+⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++3判断X是否满足误差要求,即||X k+1– X k|| < delta4若误差满足要求,则停止迭代返回结果;若否,则返回第二步进行下一轮迭代1.3 高斯消去法1.3.1 算法理论下面三种变换称为初等行变换:1.对调两行;2.以数k≠0乘某一行中的所有元素;3.把某一行所有元素的k倍加到另一行对应的元素上去。
作业:①分别用J 法和G -S 法求解下列方程,并讨论结果。
123122*********x x x -⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪= ⎪⎪ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭#include<iostream>using namespace std;//J 法解线性方程int main(){int m,n,i,j,times=0,mtimes;double s,sum,max;cout<<"请输入系数矩阵行数m 、列数n :"<<endl; cin>>m>>n;if(m<n)cout<<"方程组无唯一解!"<<endl;double **A=new double *[m];for (i=0; i<m; i++) {A[i] =new double [n];}double *B=new double [m];double *X=new double [m];double *T=new double [m];double *S=new double [m];cout<<"请输入系数矩阵A :"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>A[i][j];cout<<"请输入常数向量B :"<<endl;for(i=0;i<m;i++)cin>>B[i];cout<<"请输入最大允许误差s:"<<endl; cin>>s;cout<<"请输入最大迭代次数:"<<endl;cin>>mtimes;cout<<"请输入一零级向量X:"<<endl;for(i=0;i<m;i++){cin>>X[i];T[i]=X[i];//T[]存放上一次迭代结果 }do{for(i=0;i<m;i++){sum=0;for(j=0;j<n;j++)if(j!=i)sum+=A[i][j]*T[j];X[i]=(B[i]-sum)/A[i][i];S[i]=(T[i]-X[i])*(T[i]-X[i]);}for(i=0;i<m;i++)T[i]=X[i];times++;max=S[0];for(i=1;i<m;i++)if(S[i]>max)max=S[i];}while((max>s*s)&&(times<mtimes));cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<X[i]<<" ";cout<<endl<<"迭代次数为:"<<times<<endl;for (i=0; i<m; i++){delete[] A[i];A[i]=NULL;}delete[] A; A=0;delete[] B; B=0;delete[] T; T=0;delete[] X; X=0;delete[] S; S=0;return 0;}#include<iostream>using namespace std;//G-S法解线性方程int main(){int m,n,i,j,times=0,mtimes;double s,sum,sum1,max;cout<<"请输入系数矩阵行数m、列数n:"<<endl;cin>>m>>n;if(m<n)cout<<"方程组无唯一解!"<<endl;double **A=new double *[m];for (i=0; i<m; i++) {A[i] =new double [n];}double *B=new double [m];double *X=new double [m];double *T=new double [m];double *S=new double [m];cout<<"请输入系数矩阵A:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>A[i][j];cout<<"请输入常数向量B:"<<endl;for(i=0;i<m;i++)cin>>B[i];cout<<"请输入最大允许误差s:"<<endl;cin>>s;cout<<"请输入最大迭代次数:"<<endl;cin>>mtimes;cout<<"请输入一零级向量X:"<<endl;for(i=0;i<m;i++){cin>>X[i];T[i]=X[i];//T[]存放上一次迭代结果}do{for(i=0;i<m;i++){sum=sum1=0;for(j=0;j<i;j++)sum+=A[i][j]*X[j];for(j=i+1;j<n;j++)sum1+=A[i][j]*T[j];X[i]=(B[i]-sum-sum1)/A[i][i];S[i]=(T[i]-X[i])*(T[i]-X[i]);}for(i=0;i<m;i++)T[i]=X[i];times++;max=S[0];for(i=1;i<m;i++)if(S[i]>max)max=S[i];}while((max>s*s)&&(times<mtimes));cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<X[i]<<" ";cout<<endl<<"迭代次数为:"<<times<<endl;for (i=0; i<m; i++){delete[] A[i];A[i]=NULL;}delete[] A; A=0;delete[] B; B=0;delete[] T; T=0;delete[] X; X=0;delete[] S; S=0;return 0;}。
西安财经学院本科实验报告学院(部)统计学院实验室数学专业实训基地课程名称大学数学实验学生姓名董童丹(编程)杨媚(实验报告)学号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结果分析:从上面的雅可比迭代法和高斯—赛德尔迭代法这两种方法所得的实验结果可知,对于同样的矩阵,对于同样的精度,雅可比迭代法要比高斯-赛德尔迭代法慢。
基于Matlab的解线性方程组的几种迭代法的实现及比较线性方程组的解法有很多种,其中一类常用的方法是迭代法。
迭代法根据一个初值逐步逼近方程组的解,在每一次迭代中利用现有的信息产生新的近似值,并不断地修正。
下面介绍基于Matlab的三种迭代法:雅可比迭代法、高斯-赛德尔迭代法和超松弛迭代法,并进行比较。
1. 雅可比迭代法雅可比迭代法是迭代法中最简单的一种方法。
对于线性方程组Ax=b,雅可比迭代法的迭代公式为:x_{i+1}(j)=1/a_{jj}(b_j-\\sum_{k=1,k\eq j}^n a_{jk}x_i(k))其中,i表示迭代次数,j表示未知数的下标,x_i表示第i次迭代的近似解,a_{jk}表示系数矩阵A的第j行第k列元素,b_j 表示方程组的常数项第j项。
在Matlab中,可以使用以下代码实现雅可比迭代:function [x,flag]=jacobi(A,b,X0,tol,kmax)n=length(b);x=X0;for k=1:kmaxfor i=1:nx(i)=(b(i)-A(i,:)*x+A(i,i)*x(i))/A(i,i);endif norm(A*x-b)<tolflag=1;returnendendflag=0;return其中,参数A为系数矩阵,b为常数项列向量,X0为初值列向量,tol为迭代误差容许值(默认为1e-6),kmax为最大迭代次数(默认为1000)。
函数返回值x为近似解列向量,flag表示是否满足容许误差要求。
2. 高斯-赛德尔迭代法高斯-赛德尔迭代法是雅可比迭代法的改进。
其基本思想是,每次迭代时,利用已经求出的新解中的信息来更新其他未知数的值。
迭代公式为:x_{i+1}(j)=(1/a_{jj})(b_j-\\sum_{k=1}^{j-1}a_{jk}x_{i+1}(k)-\\sum_{k=j+1}^n a_{jk}x_i(k))与雅可比迭代法相比,高斯-赛德尔迭代法的每一次迭代都利用了前面已求得的近似解,因此可以更快地收敛。
实验四线性方程组的迭代解法一、实验目的(1) 学会用Jacobi迭代法、Gauss- Seidel迭代法和超松弛迭代法求线性方程组解(2) 学会对各种迭代法作收敛性分析,研究求方程组解的最优迭代方法.(3) 按照题目要求完成实验内容,写出相应的Matlab程序,给出实验结果.(4) 对实验结果进行分析讨论.(5) 写出相应的实验报告.二、实验内容1.熟悉Jacobi迭代法,并编写Matlab程序matlab程序按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)function [x,k,index]=Jacobi(A,b,ep,it_max)if nargin<4it_max=100;endif nargin<3ep=1e-5;endn=length(A);k=0;x=zeros(n,1);y=x;index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10||k==it_maxindex=0;return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<ep;break;endx=y;k=k+1;end2. 熟悉Gauss-Seidel 迭代法,并编写Matlab 程序3.练习练习题1. 用Jacobi 迭代法求方程组123430243313001424x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥--⎣⎦⎣⎦⎣⎦的解。
练习题2. 用Gauss-Seidel 迭代法求解上题的线性方程组,取(0)5(0,0,0),10T x ε-==。
function [x,k,index]=Gauss_Seidel(A,b,ep,it_max) if nargin<4it_max=100;endif nargin<3ep=1e-5;endn=length(A);k=0;x=zeros(n,1);y=x;y1=y;index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j>iy(i)=y(i)-A(i,j)*y1(j);endif j<iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10||k==it_maxindex=0;return ;endy(i)=y(i)/A(i,i);y1(i)=y(i);endif norm(y-x,inf)<ep;break ;endx=y;k=k+1;end三、实验要求要求在实验前必须预习,将实验内容事先准备好,否则不允许上机。
雅可比和高斯塞德尔迭代法的区别雅克比迭代法和高斯-塞德尔迭代法是求解线性方程组中的代数方程组的两种方法。
在理解它们的不同之前,我们需要先了解什么是线性方程组。
线性方程组就是一组包含线性方程的方程组,每一个方程都是由未知数的系数与其常数组成。
例如,下面的方程组就是一个线性方程组:2x + 3y - 4z = 10 -x + 5y + 6z = -8 7x - 2y + 3z = 12雅克比和高斯-塞德尔迭代法的目标都是,通过一系列计算,找到一组解决线性方程组的方程,即未知数的值。
以下是强调两种方法之间的差别:1. 速度为了求解线性方程组,迭代法被一般的大多数人视为一个慢的方法。
同样地,这两种迭代法都需要多个迭代才能收敛于正确的解。
虽然两种方法理论上可以达到完全相同的速度,但实际上高斯-塞德尔迭代法比雅克比快得多。
以一个例子为例,如果有一个15 x 15的矩阵和矩阵方程组,需要15次迭代才能解决它,那么高斯-塞德尔迭代法需要大约7.5次迭代;而雅各比迭代法需要15次迭代。
2. 精度一旦迭代完成,解必须精确地满足方程组。
高斯-塞德尔法具有比雅克比法更好的精度,因为高斯塞德尔法每个变量的新值都立即计算。
在雅克比迭代法中,所有变量的新值必须通过旧系数系数计算。
因此,即使在较小的系统中进行迭代,也带来较大的精度损失。
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. 实用在实际应用中,雅克比迭代法和高斯-塞德尔迭代法在求解某些特定的线性方程组时往往比直接求解更具有优势。
例如,在求解非常大型的线性方程组时,直接求解的计算量很大,求解时间也很长。
而使用迭代法则可以大幅减少计算量和求解时间,提高求解效率。
此外,由于迭代法可以直观地呈现方程组的解向量随着迭代步数的变化情况,因此可以更快地检查迭代结果的趋势和误差范围。
总之,雅克比迭代法和高斯-塞德尔迭代法是求解线性方程组的两种有效方法,具有应用广泛、易于实现和迭代收敛速度快的优点。
作业:①
分别用J 法和G -S 法求解下列方程,并讨论结果。
123122*********x x x -⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪= ⎪⎪ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭
#include<iostream>
using namespace std;
//J 法解线性方程
int main(){
int m,n,i,j,times=0,mtimes;
double s,sum,max;
cout<<"请输入系数矩阵行数m 、列数n :"<<endl; cin>>m>>n;
if(m<n)
cout<<"方程组无唯一解!"<<endl;
double **A=new double *[m];
for (i=0; i<m; i++) {
A[i] =new double [n];
}
double *B=new double [m];
double *X=new double [m];
double *T=new double [m];
double *S=new double [m];
cout<<"请输入系数矩阵A :"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>A[i][j];
cout<<"请输入常数向量B :"<<endl;
for(i=0;i<m;i++)
cin>>B[i];
cout<<"请输入最大允许误差s:"<<endl; cin>>s;
cout<<"请输入最大迭代次数:"<<endl;
cin>>mtimes;
cout<<"请输入一零级向量X:"<<endl;
for(i=0;i<m;i++){
cin>>X[i];
T[i]=X[i];//T[]存放上一次迭代结果 }
do{
for(i=0;i<m;i++){
sum=0;
for(j=0;j<n;j++)
if(j!=i)
sum+=A[i][j]*T[j];
X[i]=(B[i]-sum)/A[i][i];
S[i]=(T[i]-X[i])*(T[i]-X[i]);
}
for(i=0;i<m;i++)
T[i]=X[i];
times++;
max=S[0];
for(i=1;i<m;i++)
if(S[i]>max)
max=S[i];
}while((max>s*s)&&(times<mtimes));
cout<<"该方程组的解为:"<<endl;
for(i=0;i<m;i++)
cout<<X[i]<<" ";
cout<<endl<<"迭代次数为:"<<times<<endl;
for (i=0; i<m; i++){
delete[] A[i];
A[i]=NULL;
}
delete[] A; A=0;
delete[] B; B=0;
delete[] T; T=0;
delete[] X; X=0;
delete[] S; S=0;
return 0;
}
#include<iostream>
using namespace std;
//G-S法解线性方程
int main(){
int m,n,i,j,times=0,mtimes;
double s,sum,sum1,max;
cout<<"请输入系数矩阵行数m、列数n:"<<endl;
cin>>m>>n;
if(m<n)
cout<<"方程组无唯一解!"<<endl;
double **A=new double *[m];
for (i=0; i<m; i++) {
A[i] =new double [n];
}
double *B=new double [m];
double *X=new double [m];
double *T=new double [m];
double *S=new double [m];
cout<<"请输入系数矩阵A:"<<endl;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>A[i][j];
cout<<"请输入常数向量B:"<<endl;
for(i=0;i<m;i++)
cin>>B[i];
cout<<"请输入最大允许误差s:"<<endl;
cin>>s;
cout<<"请输入最大迭代次数:"<<endl;
cin>>mtimes;
cout<<"请输入一零级向量X:"<<endl;
for(i=0;i<m;i++){
cin>>X[i];
T[i]=X[i];//T[]存放上一次迭代结果}
do{
for(i=0;i<m;i++){
sum=sum1=0;
for(j=0;j<i;j++)
sum+=A[i][j]*X[j];
for(j=i+1;j<n;j++)
sum1+=A[i][j]*T[j];
X[i]=(B[i]-sum-sum1)/A[i][i];
S[i]=(T[i]-X[i])*(T[i]-X[i]);
}
for(i=0;i<m;i++)
T[i]=X[i];
times++;
max=S[0];
for(i=1;i<m;i++)
if(S[i]>max)
max=S[i];
}while((max>s*s)&&(times<mtimes));
cout<<"该方程组的解为:"<<endl;
for(i=0;i<m;i++)
cout<<X[i]<<" ";
cout<<endl<<"迭代次数为:"<<times<<endl;
for (i=0; i<m; i++){
delete[] A[i];
A[i]=NULL;
}
delete[] A; A=0;
delete[] B; B=0;
delete[] T; T=0;
delete[] X; X=0;
delete[] S; S=0;
return 0;
}。