1、四、调试过程2-2-4 实验一 用雅可比法和高斯-赛得尔法解线性方程组1) 分析: 雅可比(Jacobi)方法 雅可比方法可表示如下:于是得到雅可比迭代的分量形式: 若用矩阵形式来表示,则其过程为: 高斯-赛德尔(Gauss-Seidel)方法 高斯-赛德尔方法本质上可雅可比方法是一致的,在雅可比迭代中,求时是用的所有分量来参加计算的,而在计算的第个分量时,()等前面个分量已经计算好。设想方法收敛,第次的分量比第次的分量更接近于真实解,为了加速收敛,在计算个分量时,所用的的前个分量换成新算好的值,即用,来计算,这就是Seidel迭代的思想。 高斯-赛德尔迭代的分量形式为: 其增量修正的形式为:
2、 若用矩阵表示,则其矩阵形式为:2) 程序用C程序编写如下: 雅可比(Jacobi)方法#includemath.hstring.h#define N 3float fanshu(float aN,float bN) int k; float y=0; for(k=0;kN;k+) y=y+(ak-bk)*(ak-bk); return(sqrt(y);main() float aNN,bN,xN,x0N; int i,j,t; float c; printf(please input A:n); for(i=0;ii+) the %dth row:,i+1); for(j=0;jj+) sc
3、anf(%f,&aij); please input B:bi);please input x0:x0i);A is:%10.4f,aij); for(t=0;t1000;t+) c=0; if(j=i) continue; c=c+aij*x0j; xi=(bi-c)/aii; if(fanshu(x0,x)=5e-6);the answer of original equation is:x%d=%10.6fn,i+1,X1i);the times of operation cycle is %dn,k-1);输入及结果:please input 9 numbers:4 -1 0 -1 4
4、 -1 0 -1 4 4.000000 -1.000000 0.000000 -1.000000 4.000000 -1.000000 0.000000 -1.000000 4.000000please input 3 numbers again:1 4 -3 1.000000 4.000000 -3.000000x1= 0.500000x2= 1.000000x3= -0.500000the times of operation cycle is 5五、总结 高斯迭代法、高斯-赛德尔迭代法的程序简单,透明度高。通过比较知道,高斯-赛德尔迭代法的迭代次数要比高斯迭代法的次数少。但是要注意,高斯法收敛与高斯-赛德尔法收敛并无必然联系,只是在两种方法都收敛的情况下,高斯-赛德尔迭代法要比高斯迭代法的收敛速度快。 对于松弛法的收敛及其收敛速度,则依赖于的取值,一般称使取最小值的为最佳松弛因子,但是,对于大多数一般的矩阵并没有确定最佳松弛因子的方法,因此松弛法的收敛速度一般并不容易确定。 在程序中为了使其透明度高,采取了大量的矩阵作为存储空间,事实上可不必如此。但是在输入实型的系数矩阵时,若用TurboC及TurboC For Windows软件编写,则出现scanf函数错误,不能输入数据,于是采用了另一个C程序的编写软件,即C-free软件。