雅克比迭代法、高斯赛德尔迭代法.docVIP

  • 50
  • 0
  • 约2.77千字
  • 约 10页
  • 2019-09-16 发布于浙江
  • 举报
昆明理工大学(计算机算法)实验报告 实验名称: 常用算法及数值计算 实验时间: 2009 年 6 月 3 日 专业: 电信071 姓名: 李春华 学号: 200711102118 成绩: 一、实验目的 通过实验进一步掌握高斯消去法的基本思想; 通过上机实验进一步掌握高斯消去法的计算步骤,并能灵活运用; 通过对高斯消去法的调试练习,进一步体会他的特点; 通过上机调试运行,逐步培养解决实际问题的编程能力。 二、实习要求 熟悉Turbo C的编译环境; 实习前复习雅可比迭代法、高斯—塞得儿迭代法的计算步骤。 三、实习设备 硬件设备:单机或网络环境下的微型计算机一台; 软件设备:DOS3.3以上炒作系统,Turbo C2.0编译器。 四、实习内容 雅可比迭代法与高斯—塞得儿迭代法 用雅可比雅可比迭代法与高斯—塞得儿迭代法求解线性方程组Ax=b: 要求:(1)写出程序的运行结果。 (2)写出迭代次数。 程序如下: 1、雅可比迭代法 #includestdio.h #includemath.h #define n 3 #define MAX_N 100 #define eps 1e-6 int yacobi(float a[n][n],float b[n],float x[n]) { float d,s,max; float y[n]; int i,j,k,flag; k=0; for(i=0;in;i++) x[i]=0.0; while(1) { max=0.0; k++; for(i=0;in;i++) { s=0.0; k++; for(j=0;jn;j++) { if(j==i)continue; s=s+a[i][j]*x[j]; } y[i]=(b[i]-s)/a[i][i]; d=fabs(y[i]-x[j]); if(maxd) max=d; } if(maxeps) { flag=1; break; } if(k=MAX_N) { flag=0; break; } for(i=0;in;i++) x[i]=y[i]; } return(flag); } void zg_matric(float a[n][n],float b[n]) { int i,j; for(i=0;in;i++) { for(j=0;jn;j++) printf(%10f,a[i][j]); printf(%12f,b[i]); printf(\n); } printf(\n); } main() { float a[][n]={{6,2 -1},{1,4,-2},{-3,1,4}}; float b[n]={-3,2,4 }; float x[n]; int i,k; zg_matric(a,b); k=yacobi(a,b,x); if(k==1) for(i=0;in;i++) printf( x%d=%11.7f\n,i+1,x[i]); else printf(The Method is disconvergent!\n); } 结果如图: 2、高斯—赛德尔迭代法 #includestdio.h #includemath.h #define n 3 #define MAX_N 100 #define eps 1e-6 int seidel(float a[n][n],float b[n],float x[n]) { float d,s,max,temp; int i,j,k,flag; k=0; for(i=0;in;i++) x[i]=0.0; while(1) { max=0.0; k++; for(i=0;in;i++) { s=0.0; temp=x[i]; for(j=0;jn;j++) { if(j==i)continue; s=s+a[i][j]*x[j]; } x[i]=(b[i]-s)/a[i][i]; d=fabs(x[i]-temp); if(maxd) max=d; } if(maxeps) { flag=1; break; } if(k=MAX_N) { flag=0;

文档评论(0)

1亿VIP精品文档

相关文档