高斯-赛德尔迭代(共10页).doc
精选优质文档-倾情为你奉上2012-2013(1)专业课程实践论文高斯-赛德尔迭代张禹廷,R数学08-1班一、算法理论高斯-赛德尔迭代是计算的第个分量的方法,利用了已经计算出得最新分量.高斯-赛德尔迭代法可以看作雅克比迭代法的一种改进.高斯-赛德尔迭代法没迭代一次只需计算一次矩阵与向量的乘法选取分裂矩阵为的下三角部分,即选取(下三角矩阵),于是得到解的高斯-赛德尔(Gauss-Seidel)迭代法 (1)其中称为解的高斯-赛德尔迭代法的迭代矩阵.下面给出高斯-赛德尔迭代法的分量计算公式.记由(1)式有 或即 于是解的高斯-赛德尔迭代法计算公式为二、算法框图 开始输入数据输出错误结束三、算法程序#include "stdio.h"#include "math.h"# define m 3 float amm;float cm;void gaosi();void main() int i,j; float xm,x1m,epsm; float s=0; float t=0; int p=1; int q=1; int k=0; float eps1; gaosi(); for(i=0;i<=m-1;i+) for(j=0;j<=m-1;j+) s=float(s+fabs(aij); t=float(t+fabs(aji); q=q&&(s<2*fabs(aii); p=p&&(t<2*fabs(aii); s=0; t=0; if(p+q)=0) printf("ERROR!"); else for(i=0;i<=m-1;i+) xi=0; x1i=0; do eps1=x0-x10; for(i=0;i<=m-1;i+) for(j=0;j<=m-1;j+) s=s+aij*xj; xi=(ci+aii*xi-s)/aii; s=0; epsi=float(fabs(xi-x1i); x1i=xi; eps1=(eps1>epsi)?eps1:epsi; printf("x%d=%f",i,xi); printf("n"); k=k+1; while(eps1>1e-3); printf("迭代 %d 次",k); void gaosi() int i,j; float bm*m; printf("请输入一个矩阵a:n"); for(i=0;i<=m-1;i+) for(j=0;j<=m-1;j+) scanf("%f",&bj+i*m); aij=bj+i*m; printf("请输入矩阵bn"); for(i=0;i<=m-1;i+) scanf("%f",&ci);四、算法实现例1利用高斯-赛德尔法迭代解方程 解:运行程序(1) 显示出 请输入一个矩阵:输入,回车。(2) 显示出 请输入矩阵:输入,回车。(3) 显示结果: 例2利用高斯-赛德尔法迭代解方程 解:运行程序(1) 显示出 请输入一个矩阵a:输入,回车。(2) 显示出 请输入矩阵b:输入,回车。(3) 显示结果: 专心-专注-专业