预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

云南大学数学与统计学实验教学中心 实验报告 课程名称:数值计算方法学期:2011—2012学年第一学期成绩:指导教师:学生姓名:学生学号:实验名称:用高斯-赛德尔迭代法解下列线性方程组实验编号:No.4实验日期:2011/11/6实验学时:3学院:数学与统计学院专业:数学与应用数学年级:2010级 一、实验目的 加强"追赶法"在解方程组中的应用,掌握多种不同的解线性方程组的解法以及编程的应用 实验内容 用高斯-赛德尔迭代法解下列线性方程组,要求当||||时迭代终止。 三、实验环境 C语言,Turboc 实验方法 高斯—赛德尔迭代法:在雅可比迭代中,求是时是用的所有分量来参加计算的,而在计算的第个分量时,已经计算好前面个分量。设想方法收敛,第次的分量比第次的分量更接近于真实值,为了加速收敛,在计算的第个分量时,所用的的前个分量换成新算好的值,即用来计算,这就是高斯—赛德尔迭代思想。而在雅可比方法基础上用赛德尔迭代,称为高斯—赛德尔方法。 (1)任取初始向量,由如下公式计算的第个分量: 此种迭代法称为高斯—赛德尔方法。 (2)高斯—赛德尔方法的分量形式: 令 则 注:高斯—赛德尔方法产生的向量列收敛, 记,则,即为的解。 高斯-赛德尔迭代法;其算法如下: (1)inputn,A,b,,N (2) (3)k1 (4) (5)err0 (6)fori=1ton,do(7~9) (7)XIx[i] if(err<|XI-x[i]|)thenerr=|XI-x[i]| If(err<ε)thenoutput(x[i],i=1,2,3...,n),stop kk+1 Output("Maximumnumberofiterationsexceeeded."),stop 五、实验过程 1实验步骤 (1)编程:根据所用算法及选用语言编出源程序 (2).开机,打开所用语言系统输入所编源程序. (3).调试程序,修改错误直至能正确运行. (4).运行程序并输出计算结果. 2关键代码及其解释 3调试过程 根据所给题目的基本信息和C语言,编写出源程序,程序编号后,出现了很多的语法错误,再对所出现的错误进行改正,直至编译,连接后显示无错误。 运行结果: x[0]=0.999997 x[1]=1.999997 x[2]=0.999999 x[3]=1.999998 x[4]=0.999998 x[5]=1.999999 六、实验总结 1.遇到的问题及解决过程 2.产生的错误及原因分析 (1)Floatingpointerror:Domain.原因分析:编写程序时出现了语法错误 (2)编写程序时没去分大小写,造成多处语法错误;原因分析:都怪自己粗心马虎 3.体会和收获。 无论干什么事都要认真,踏实!努力做好自己该做的。 上课要认真听讲,专心学习,做作业才省力! 各门课程之间相互联系,应搞好各科的学习。 七:程序源代码: #include"stdio.h" #include"math.h" #include"alloc.h" GaussSeidel(n,a,b,x) intn; double*a,*b,*x; { inti,j; doublet,u,m=0,eps; while(1) { eps=0; for(i=0;i<n;i++) { t=x[i]; for(j=0;j<n;j++) if(j!=i) m+=a[i*n+j]*x[j]; x[i]=(b[i]-m)/a[i*n+i];//G-S迭代公式 m=0; u=x[i]; if(fabs(t-u)>eps) eps=fabs(t-u); } if(eps<1e-5)return1;//满足题目所要求的循环条件 } } main() { inti; doublea[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,0,0,-1},{-1,0,0,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4}},b[6]={0,5,0,6,-2,6},x[6]={0,0,0,0,0,0};//输入具体矩阵的值 GaussSeidel(6,a,b,x); for(i=0;i<6;i++) printf("x[%d]=%f\n",i,x[i]); } 八.教师评语: