好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

数值方法实验三 - 副本(精).doc

12页
  • 卖家[上传人]:我**
  • 文档编号:116262795
  • 上传时间:2019-11-16
  • 文档格式:DOC
  • 文档大小:591.50KB
  • / 12 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 数学与计算科学学院实 验 报 告实验项目名称 迭代法解线性方程组 所属课程名称 数值方法A 实 验 类 型 验证型 实 验 日 期 2014.12.03 班 级 信计12- 学 号 201253100 姓 名 成 绩 一、实验概述:【实验目的】1)了解Gauss-Seidel迭代法和松弛迭代法的迭代思想;2)熟悉掌握Gauss-Seidel迭代法和超松弛迭代法的基本原理和基本方法;3)学会用逐次Gauss-Seidel迭代法和超松弛迭代法解简单的方程组;4)在上机操作过程中体会数值计算方法的收敛性及收敛速度;5)掌握判别迭代法收敛的基本方法及其运用6)培养利用计算机和所学理论知识分析解决实际问题的能力。

      实验原理】1.Gauss–Seidel迭代法迭代格式:(若可逆),,,为初始向量(矩阵形式),(分量形式)2.弛迭代法(简称SOR)迭代格式:在Seidel迭代公式中,=,若在修正项前加上一个参数w ,便得到松弛法的迭代公式: ,,k=0, 1, 2, … 将上式写成矩阵形式得 , k=0, 1, 2, …其中w 叫做松弛因子, 当w >1时叫做超松弛, w < 1时叫做低松弛注:(1)w =1时就是Seidel迭代法;(2)适当选取松弛因子w , 可加快收敛速度;(3)关于迭代格式(3),引进收敛速度概念:【实验环境】1.硬件环境2.软件环境(1)(2)VC++ 6.0,二、实验内容:【实验方案】1.Gauss-Seidel迭代法方案:用Gauss-Seidel迭代法求解下列方程组,当满足时结束迭代1)输入系数矩阵A,右端项b,矩阵阶数n 最大误差限,最大迭代步数N及初始迭代向量= (2)置        1)令最大误差  2)对于L=            a) ¬  b) ÷÷ø c)判断是否成立,成立则;(比较本次与上次迭代中的对应的值,寻找最大误差) 3)判断是否成立  a)成立,找到近似解,则输出迭代步数和近似解,结束程序。

          b)不成立,则判断k

      二.收敛性及收敛速度比较1)SOR迭代法是G-S迭代法的一种加速方法,故前者收敛速度要快些;2)由G-S迭代法和SOR迭代法求解的程序运行结果可知初值的选取影响迭代格式的收敛快慢;3)对于SOR迭代法,收敛快慢依初值和松弛因子的变化而不同实验结论】(结果)1.G-S迭代结果:2.SOR迭代结果: 1)初值X取(0,0,0)时:2)初值X取(1,0,0)时:【实验小结】(收获体会)通过本次实验,我明白了高斯-赛德尔迭代法与超松弛迭代法的区别于联系,更深地理解了用迭代法解线性方程组的方法,懂得遇到问题先分析,然后逐步改进,就像编程一样,要逐步调试分析才能解决三、指导教师评语及成绩:评 语评语等级优良中及格不及格1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强2.实验方案设计合理3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)4实验结论正确. 成 绩: 指导教师签名: 批阅日期:附录:源 程 序源程序1:#include#include#define eps 1e-4 #define n 2#define N 10 //以上为定义部分 void main() { int i,j,k=1; double t,e,s; double A[3][3]={{5,2,1},{-1,4,2},{2,-5,10}}; double b[3]={-12,10,1},X[3]={0,0,0}; //以上为输入部分 while(k<=N)//迭代步数从1开始,在最大迭代步数之内 { e=0.0000; printf("\nk=%d ",k);//输出第k次迭代 for(i=0;i<=n;i++) { t=X[i]; s=0.0000; printf("x%d=%f\t",i,X[i]);//输出k-1次迭代后的值作为第k次的初值 for(j=0;j<=n;j++) { if(j!=i) s=s+A[i][j]*X[j]; } X[i]=(b[i]-s)/A[i][i]; //迭代过程,得到x[i]的解 if(fabs(X[i]-t)>e) e=fabs(X[i]-t);//求出最大误差 } if(e<=eps) { printf("\nthe root:\nk=%d\t",k+1); for(i=0;i<=n;i++) printf("x%d=%f\t",i,X[i]); break; }//如果两次相邻迭代步数求出的解的误差在最大误差限内,则找到解,输出 if(k==N) { printf("fail!"); } k++;//步数增加 } } 源程序2:#include#include#include using namespace std;#define n 3int main(){ double A[3][3]={{2,2,-2},{2,5,-4},{-2,-4,5}}; double B[3]={1,2,0}; double b[n][n],m[n],X[n],Y[n],sum1,max,w; int i,j,count=1;cout<<"请输入x初始值:"<>X[i];}cout<<"请w:"<>w;for(i=0;im[i]) max=m[i];for(static int k=1;k<=count;++k){cout<=1e-5);return 0; } 11。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.