数值分析实验报告三迭代法解线性方程组_第1页
数值分析实验报告三迭代法解线性方程组_第2页
数值分析实验报告三迭代法解线性方程组_第3页
数值分析实验报告三迭代法解线性方程组_第4页
数值分析实验报告三迭代法解线性方程组_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数学与计算科学学院实 验 报 告实验项目名称 迭代法解线性方程组 所属课程名称 数值方法A 实 验 类 型 验证型 实 验 日 期 2014年12月3日 学 号 班 级 信计 成 绩 一、实验概述:【实验目的】通过实验,熟悉线性方程组的Gauss-Seidel迭代法和松弛迭代法求解【实验内容】用熟悉的计算机语言编程上机完成1. 用Gauss-Seidel迭代法求解下列方程组,当满足时结束迭代2. 用松弛迭代法(取)求解下阿列方程组,当满足时结束迭代,说明迭代的收敛性。并讨论初值的变化对收敛的影响【实验环境】Windows 7Microsoft Virual C+ 6.0二、实验内容:【实验方案

2、】1. Gauss-Seid迭代法在Jacobi方法迭代基础上对新计算出来的第k+1次近似的分量加以了利用,即(1)( k=0,1,2,;i=1,2,n) (分量形式)(2)若D-L可逆k=0,1,2, x(0)为初始向量(矩阵形式)2.松弛迭代法(1)在Gauss-Seid迭代法中若在修正项前加一个参数,便得到松弛法的迭代公式 i=1,2,n.k=0,1,2(向量形式)(2)由索取=1.25>1,故为超松弛因子(矩阵形式)【实验过程】(实验步骤、记录、数据、分析)1.根据算法事先写出相应的程序;2.对Gauss-Sseid迭代法和松弛迭代法的程序分别进行编译和调试;4.调试通过,计算出

3、正确结果;5.分析结果数据。【实验结果】1.Gauss_Seidel迭代次数为12次结果:X1= -3.090909 X1=1.094545X1=1.2654552.初值为(0,0,0,0) 初值为(10,10,10,10) 初值为(100,100,100,100)由以上结果可以看出初值的改变对结果影响不大。【实验小结】(收获体会) 这个实验中通过输入不同初值观测结果改变来查看初值对结果的影响,可以更直观看出初值大小对结果影响不大。在调试程序时出现错误但不知道怎么修改,感觉C+很酷炫 ,不容易,要多花工夫,多练习才行呢。三、指导教师评语及成绩:评 语评语等级优良中及格不及格1.实验报告按时完成

4、,字迹清楚,文字叙述流畅,逻辑性强2.实验方案设计合理3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)4实验结论正确. 成 绩: 指导教师签名: 批阅日期:附录:源 程 序1.#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<math.h>#define MAX_n 100 #define PRECISION 0.0000001 #define MAX_Number 1000 void VectorInput(float x,int n) /输入初始向量 int i

5、; for(i=1;i<=n;+i) printf("x%d=",i);scanf("%f",&xi); void MatrixInput(float AMAX_n,intm,int n) /输入增广矩阵 int i, j; printf("n输入系数矩阵:n"); for(i=1;i<=m;+i) printf("增广矩阵行数%d : ",i); for(j=1;j<=n;+j) scanf("%f",&Aij); void VectorOutput(floa

6、t x,int n) /输出向量 int i; for(i=1;i<=n;+i) printf("nx%d=%f",i,xi); intIsSatisfyPricision(float x1,float x2,int n) /判断是否在规定精度内 int i; for(i=1;i<=n;+i) if(fabs(x1i-x2i)>PRECISION) return 1; return 0; int Jacobi_(float AMAX_n,float x,int n) /具体计算 float x_formerMAX_n; inti,j,k; printf(&

7、quot;n初始向量x0:n"); VectorInput(x,n); k=0; do for(i=1;i<=n;+i) printf("nx%d=%f",i,xi);x_formeri=xi; printf("n"); for(i=1;i<=n;+i) xi=Ain+1; for(j=1;j<=n;+j) if(j!=i) xi-=Aij*xj; if(fabs(Aii)>PRECISION) xi/=Aii; else return 1; +k; while(IsSatisfyPricision(x,x_former

8、,n) && k<MAX_Number); if(k>=MAX_Number) return 1; else printf ("nGauss-Seidel迭代次数为%d 次",k); return 0; int main() /主函数 int n; float AMAX_nMAX_n,xMAX_n; printf("n方阵维数n="); scanf("%d",&n); if(n>=MAX_n-1) printf("n007n must <%d!",MAX_n); ex

9、it(0); MatrixInput(A,n,n+1); if(Jacobi_(A,x,n) printf("nGauss-Seidel迭代失败!"); else printf("n结果:"); VectorOutput(x,n); printf("nn007Press any key to quit!n"); getch(); 2.#include <math.h>#include <stdio.h>double norm(double *x,double *y,int n) int i=0; double

10、s=0; for(i=0;i<n;i+) s=s+fabs(xi-yi)*fabs(xi-yi); return sqrt(s); void Jacobi(double A,double b,double x0,double x,double w,int n1) int n=100;double ee=0.00001,s=0;inti,j,k; for(i=1;i<=n;i+) for(j=0;j<n1;j+) xj=x0j; for(j=0;j<n1;j+) s=0; for(k=0;k<n1;k+) s=s+Aj*n1+k*x0k; x0j=xj+w*(bj-

11、s)/Aj*n1+j; if (norm(x,x0,n1)<ee) break; int main() double a33=2,2,-2,2,5,-4,-2,-4,5; double b3= 1,2,0; double x03= 0,0,0.0; double x3= 0,0,0,w=1.25; int n1=3,i; Jacobi(a,b,x0,x,w,n1); for (i=0;i<n1; i+) printf("x(%d)=%7.5fn",i+1,xi); system("pause"); return(0);附录2:实验报告填写说明1实验项目名称:要求与实验教学大纲一致.2实验目的:目的要明确,要抓住重点,符合实验教学大纲要求.3实验原理:简要说明本实验项目所涉及的理论知识.4实验环境:实验用的软、硬件环境.5实验方案(思路、步骤和方法等):这是实验报告极其重要的内容.概括整个实验过程.对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作.对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论