直接法解线性方程组_第1页
直接法解线性方程组_第2页
直接法解线性方程组_第3页
直接法解线性方程组_第4页
直接法解线性方程组_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、数学与计算科学学院实 验 报 告实验项目名称 直接法解线性方程组 所属课程名称 数值方法A 实 验 类 型 验证型 实 验 日 期 2014.11.28 班 级 信计12- 学 号 201253100 姓 名 成 绩 一、实验概述:【实验目的】1.掌握用C语言编程实现追赶法求解三对角线性方程组;2.掌握运用高斯列主元消去法解线性方程组;3.加深对解线性方程组的直接法高斯列主消元法和LU分解法的构造过程的理解;4.熟悉并掌握各种方法的适用对象及优缺点,学会针对不同问题选择不同方法;5.培养使用电子计算机进行科学计算和解决问题的能力。【实验原理】1.追赶法原理2.高斯列主元消去法【实验环境】1.硬

2、件环境2.软件环境(1)(2)VC+ 6.0二、实验内容:【实验过程】(实验步骤)1.实验步骤 1)深入了解解题过程并依次写出解题算法; 2)依照算法用C语言编写解题程序; 3)上机时将写好的程序输入到VC+中并调试运行得出方程的解; 4)比较几种方法之间的联系与区别。2.1追赶法根据以上的实验原理,在VC+编辑框中输入源程序: 由原理可知:b1=2,c1=-1,f1=1 a2=-1,b2=2,c2=-1,f2=0a3=-1,b3=2,c3=-1,f3=0a4=-1,b4=2,c4=-1,f4=0a5=-1,b5=2 ,f5=0 将上述系数逐个输入运行框, 并经过多次调试运行,最终运行出结果如

3、下:2.1 Gauss消元法1)数据输入main(void)float A44=0.4096,0.1234,0.3678,0.2943,0.2246,0.3872,0.4015,0.1129,0.3645,0.1920,0.3781,0.0643,0.1784,0.4002,0.2786,0.3927;float b4=0.4043,0.1550,0.4240,-0.2557;float x4=0;float Aik,S;int i,j,k;int size=4;printf("An");for(i=0;i<size;i+)for(j=0;j<size;j+)p

4、rintf("%f ",Aij);printf("n");printf("bn");for(i=0;i<size;i+)printf("%f ",bi);printf("nn");2)消去过程/消去过程for(k=0;k<size-1;k+)if(!Akk)return -1;for(i=k+1;i<size;i+)Aik=Aik/Akk;for(j=k;j<size;j+)Aij=Aij-Aik*Akj;bi=bi-Aik*bk;/消去的结果printf("A

5、n");for(i=0;i<size;i+)for(j=0;j<size;j+)printf("%f ",Aij);printf("n");printf("bn");for(i=0;i<size;i+)printf("%f ",bi);printf("nn");3)回代过程 /回代过程xsize-1=bsize-1/Asize-1size-1;for(k=size-2;k>=0;k-)S=bk;for(j=k+1;j<size;j+)S=S-Akj*xj;

6、xk=S/Akk;4)结果输出/solutionprintf("The solution x=n");for(i=0;i<size;i+)printf("%f ",xi);return 0;得如下结果: 即2.2 列主元消去法1)数据输入int main(void)float A44=0.4096,0.1234,0.3678,0.2943,0.2246,0.3872,0.4015,0.1129,0.3645,0.1920,0.3781,0.0643,0.1784,0.4002,0.2786,0.3927;float b4=0.4043,0.1550

7、,0.4240,-0.2557;float x4=0;float Aik,S,temp;int i,j,k;float max;/列主元的绝对值int col;/列主元所在的行int size=4;printf("An");for(i=0;i<size;i+)for(j=0;j<size;j+)printf("%f ",Aij);printf("n");printf("bn");for(i=0;i<size;i+)printf("%f ",bi);printf("nn

8、");2)消去过程/-消去过程-for(k=0;k<size-1;k+)max=fabs(Akk);col=k;/查找最大元素所在的行for(i=k;i<size;i+)if(max<fabs(Aik)max=fabs(Aik);col=i;printf("col:%dn",col);for(j=k;j<size;j+)temp=Acolj;Acolj=Akj;Akj=temp;temp=bcol;bcol=bk;bk=temp;if(!Akk)return -1;for(i=k+1;i<size;i+)Aik=Aik/Akk;for

9、(j=k;j<size;j+)Aij=Aij-Aik*Akj;bi=bi-Aik*bk;/消去的结果printf("An");for(i=0;i<size;i+)for(j=0;j<size;j+)printf("%f ",Aij);printf("n");printf("bn");for(i=0;i<size;i+)printf("%f ",bi);printf("nn");3)回代过程/回代过程xsize-1=bsize-1/Asize-1size

10、-1;for(k=size-2;k>=0;k-)S=bk;for(j=k+1;j<size;j+)S=S-Akj*xj;xk=S/Akk;4)结果输出/solutionprintf("The solution x=n");for(i=0;i<size;i+)printf("%f ",xi);return 0; 将上述各部分程序组合到一起并调试运行得出结果如下: 即。【实验结论】(结果)1.追赶法结果2.高斯消去法和列主元消去法1)高斯消去法结果截图:2)列主元消去法结果截图:【实验小结】(收获体会) 通过运用追赶法来求解三对角方程组的问

11、题.追赶法是用来求解三对角方程组的专用方法,对于三对角方程组,追赶法比Gauss消去法的计算量要小的多。本次实验让我了解到了C语言功能的强大,也让我意识到了算法对于程序编写的重要程度,只有学好逻辑,学好算法,才能使用编程使计算精度进一步提高。三、指导教师评语及成绩:评 语评语等级优良中及格不及格1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强2.实验方案设计合理3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)4实验结论正确. 成 绩: 指导教师签名: 批阅日期:附录:源 程 序程序1:#include<stdio.h>#include<conio.h>#

12、include<math.h>#define MAX_n 100#define PRECISION O.000001void SulutionOutput(float x,int n)int i;for(i=1;i<=n;+i)printf("nx%d=%f",i,xi);void TriDiagonalMatrixInput(float a,float b,float c,float f,int n)int i;printf("请输入b1,c1,f1:");scanf("%f%f%f",&b1,&c

13、1,&f1);for(i=2;i<n;+i)printf("请输入a%d,b%d,c%d,f%d:",i,i,i,i);scanf("%f%f%f%f",&ai,&bi,&ci,&fi);printf("请输入a%d,b%d,f%d:",n,n,n);scanf("%f%f%f",&an,&bn,&fn);void Z_G_method(float a,float b,float c,float f,int n) int i;c1/=b1;for

14、(i=2;i<n;+i)ci/=(bi-ai*ci-1); f1/=b1; for(i=2;i<=n;+i) fi=(fi-ai*fi-1/bi-ai*ci-1); for(i=n-1;i>0;-i) fi-=ci*fi+1;void main()int n;float aMAX_n,bMAX_n,cMAX_n;float fMAX_n;printf("n请输入 n=");scanf("%d",&n);TriDiagonalMatrixInput(a,b,c,f,n);Z_G_method(a,b,c,f,n);Sulution

15、Output(f,n);程序2:1)高斯消去法程序:#include<stdio.h>main(void)float A44=0.4096,0.1234,0.3678,0.2943,0.2246,0.3872,0.4015,0.1129,0.3645,0.1920,0.3781,0.0643,0.1784,0.4002,0.2786,0.3927;float b4=0.4043,0.1550,0.4240,-0.2557;float x4=0;float Aik,S;int i,j,k;int size=4;printf("An");for(i=0;i<s

16、ize;i+)for(j=0;j<size;j+)printf("%f ",Aij);printf("n");printf("bn");for(i=0;i<size;i+)printf("%f ",bi);printf("nn");/消去过程for(k=0;k<size-1;k+)if(!Akk)return -1;for(i=k+1;i<size;i+)Aik=Aik/Akk;for(j=k;j<size;j+)Aij=Aij-Aik*Akj;bi=bi-Aik*

17、bk;/消去的结果printf("An");for(i=0;i<size;i+)for(j=0;j<size;j+)printf("%f ",Aij);printf("n");printf("bn");for(i=0;i<size;i+)printf("%f ",bi);printf("nn");/回代过程xsize-1=bsize-1/Asize-1size-1;for(k=size-2;k>=0;k-)S=bk;for(j=k+1;j<siz

18、e;j+)S=S-Akj*xj;xk=S/Akk;/solutionprintf("The solution x=n");for(i=0;i<size;i+)printf("%f ",xi);return 0;2)列主元消去法程序:#include<stdio.h>#include<math.h>int main(void)float A44=0.4096,0.1234,0.3678,0.2943,0.2246,0.3872,0.4015,0.1129,0.3645,0.1920,0.3781,0.0643,0.1784,0

19、.4002,0.2786,0.3927;float b4=0.4043,0.1550,0.4240,-0.2557;float x4=0;float Aik,S,temp;int i,j,k;float max;/列主元的绝对值int col;/列主元所在的行int size=4;printf("An");for(i=0;i<size;i+)for(j=0;j<size;j+)printf("%f ",Aij);printf("n");printf("bn");for(i=0;i<size;i+)printf("%f ",bi);printf("nn");/-消去过程-for(k=0;k<size-1;k+)max=fabs(Akk);col=k;/查找最大元素所在的行for(i=k;i<size;i+)if(max<fabs(Aik)max=fabs

温馨提示

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

评论

0/150

提交评论