计算机数值方法实报告.doc_第1页
计算机数值方法实报告.doc_第2页
计算机数值方法实报告.doc_第3页
计算机数值方法实报告.doc_第4页
计算机数值方法实报告.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

HUBEI NORMAL UNIVERSITY计算机数值方法实验报告题 目计算机数值方法实验报告作者姓名指导教师李国屏所在院系计算机科学与技术学院专业名称计算机科学与技术完成时间2013年1月8日目 录一. 线性方程组的求解Gauss消去法1.实验题目22.实验内容23.算法描述24.设计说明45.源程序56.测试实例6Gauss列主元消去法1.实验题目62.实验内容63.算法描述64.设计说明75.源程序86.测试实例9直角三角分解法1.实验题目112.实验内容113.算法描述11 4.设计说明11185. 源程序126.测试实例14总结13 求实系数多项式全部实单根1. 实验题目142. 实验内容143. 算法描述144. 设计说明145. 源程序146. 测试实例177. 测试心得17一、实验题目Gauss消除法设计程序二、实验内容掌握用Gauss消除法设计程序三、算法描述Step1消元 :对k=1,2,n-1若则停止计算对i=k+1,k+2,n 计算因子;对j=k+1,k+2,n 计算;Step2回代: 对i=n,n-1,1 (高斯消去法的条件)若A的所有顺序主子式均不为0,则高斯消元无需换行即可进行到底,且得到唯一解.若消元过程中允许对增广矩阵进行行交换,则方程组Ax=b可用消去法求解的充要条件是A可逆.四、设计说明(输入、输出、变量说明)定义五个全局变量/用a、b、x来存放:A矩,B矩阵和Z矩阵double aNumberNumber;double bNumber;double xNumber;int lenth;;/矩阵的行列数const int Number;定义了三个函数void gauss(); /高斯函数,求出方程的解void guass_xiaoqu();/消去函数void guass_calculate();/计算函数guass_xiaoqu()函数中,把矩阵变成上三角矩阵,用到:lik=aik/akk;aij=aij-akj*lik;bi=bi-bk*lik;guass_calculate()函数中,求得方程的解,用到:blenth-1=blenth-1/alenth-1lenth-1;sum_ax+=aij*bj;bi=(bi-sum_ax)/aii;五、源程序运用Gauss消除方法程序设计#include #include #include /* 定义全局变量 */const int Number=10;double aNumberNumber;double bNumber;double xNumber;int lenth; /*行数声明*/void gauss(); void guass_xiaoqu();/消去函数void guass_calculate();/计算函数void main() int i,j; /i行 j列coutlenth; /方程组的个数 cout输入方程:n;for(i=0;ilenth;i+) /输入矩阵 for(j=0;jaij;cout输入向量b的值:n; for(i=0;ibi; gauss();/调用高斯列主元素消去法void gauss()/函数,高斯列主元素消去法 int i,j; guass_xiaoqu();/用高斯消去将矩阵系数变为上三角形式 for(i=0;ilenth;i+) for(j=0;jlenth;j+)coutsetw(10)setprecision(5)aij; /输出化成上三角矩阵后的矩阵coutsetw(10)biendl; /将矩阵和向量b连接成增广矩阵 if(alenth-1lenth-1!=0) cout系数行列式不为零,方程有唯一解:n;guass_calculate(); /化成上三角后解方程 for(i=0;ilenth;i+) /输出结果coutxi+1=bin; /输出x1到xi的值 elsecout系数行列式等于零,方程没有唯一解。n;void guass_xiaoqu() /函数,讲矩阵系数化作上三角int i,j;/int k=0;double lik;cout用guass消去法结果如下:n; for(int k=0;klenth-1;k+)for(i=k+1;ilenth;i+)lik=aik/akk; /下一行的除以上一行的for(j=0;j=0;i-)for(j=i+1,sum_ax=0;jlenth;j+) /求b2 b1 b0 sum_ax+=aij*bj;bi=(bi-sum_ax)/aii; 六、测试实例一、实验题目Gauss列主元素消去法二、实验内容输入一个矩阵A,输入一个向量b,用gauss列主元素消去法求得方程的解x并输出。三、算法描述 将方程组用增广矩阵表示。1. 消元过程 对 (1) 选主元,找使得 (2) 如果,则矩阵奇异,程序结束;否则执行(3)。 (3) 如果,则交换第行与第行对应元素位置,。 (4) 消元,对,计算对,计算2. 回代过程(1) 若则矩阵奇异,程序结束;否则执行(2)。 (2) ,计算四、设计说明(输入、输出、变量说明)定义五个全局变量/用a、b、x来存放:A矩,B矩阵和Z矩阵double aNumberNumber;double bNumber;double xNumber;int lenth;;/矩阵的行列数const int Number;定义了四个函数void gauss_row(); /高斯列主元素消去法void guass_row_xiaoqu();/用高斯列主消去将矩阵系数变为上三角形式void guass_calculate();/算出方程的解void exchange_hang(int m,int n);/交换矩阵的行,使其主对角元素上的值最大五、源程序#include #include #include /* 定义全局变量 */const int Number=10;double aNumberNumber,bNumber,xNumber;int lenth;/*函数声明*/void gauss_row(); void guass_row_xiaoqu();void guass_calculate();void exchange_hang(int m,int n);void main() int i,j;coutlenth; cout输入方程:n; for(i=0;ilenth;i+) /输入矩阵 for(j=0;jaij; cout输入向量b的值:n; for(i=0;ibi; gauss_row(); /调用高斯列主元素消去法void gauss_row() /函数,高斯列主元素消去法 int i,j;guass_row_xiaoqu();/用高斯列主消去将矩阵系数变为上三角形式 for(i=0;ilenth;i+) for(j=0;jlenth;j+)coutsetw(10)setprecision(5)aij; /输出化成上三角矩阵后的矩阵coutsetw(10)biendl; /将矩阵和向量b连接成增广矩阵 if(alenth-1lenth-1!=0) cout系数行列式不为零,方程有唯一解:n;guass_calculate();/化成上三角后解方程for(i=0;ilenth;i+) /输出结果coutxi+1=bin; /输出x1到xi的值 elsecout系数行列式等于0,方程没有唯一解。n;void guass_row_xiaoqu()/函数,将矩阵系数化作上三角int i,j,k,maxi;double lik;cout用guass列主消去法结果如下:n;for(k=0;klenth-1;k+)j=k;for(maxi=i=k;iamaxij) maxi=j; if(maxi!=k) exchange_hang(k,maxi);for(i=k+1;ilenth;i+) lik=aik/akk; for(j=k;j=0;i-)for(j=i+1,sum_ax=0;jlenth;j+)sum_ax+=aij*bj;bi=(bi-sum_ax)/aii; void exchange_hang(int m,int n) /交换amj和anj; bm和bn两行 int j;double temp;for(j=0;jlenth;j+)temp=amj;amj=anj;anj=temp;temp=bm;bm=bn;bn=temp;六、测试实例一、实验题目:直角三角分解法二、实验内容输入一个矩阵A,输入一个向量b,用Doolittle分解法求得方程的解x并输出。三、算法描述1.输入变量个数n、系数矩阵A、常数项b2 如果a11=0,则输出“LU分解失败”提示并终止,否则aj1 aj1/a11 (j=2,n)注:因为 L和U中的三角零元素都不必存储,L的对角元素也因为都是1没有必要再记录在程序中。这样为节省计算机存储单元,用原来的n阶系数矩阵A把L和U贮存起来。算法中系数矩阵A的下三角存储L各元素 而上三角存储U的元素(包括对角元)四、设计说明(输入、输出、变量说明)定义五个全局变量/用a、b、x来存放:A矩,B矩阵和Z矩阵double aNumberNumber;double bNumber;double xNumber;int lenth;;/矩阵的行列数const int Number;定义了三个函数void Doolittle(); void fenjie();/矩阵按Doolittle分解void calculate();/计算函数在主函数中,Doolittle算法和以上的guass消去法一样,输入方程的方法一样,然后调用Doolittle()函数。在Doolittle()函数中,首先调用fenjie()函数,其作用是将矩阵按Doolittle分解。然后 调用calculate()函数,其作用是求解分解后的方程。最后是输出方程的解。五、源程序#include #include #include /* 定义全局变量 */const int Number=10;double aNumberNumber,bNumber,xNumber;int lenth; /* 函数声明 */void Doolittle(); void fenjie();void calculate();void main() int i,j;coutlenth; cout输入方程:n; for(i=0;ilenth;i+) /输入矩阵 for(j=0;jaij; cout输入向量b的值:n; for(i=0;ibi; Doolittle(); /调用Doolittle消去法void Doolittle() /Doolittle消去法计算方程 int i,j;fenjie(); /将矩阵按Doolittle分解 calculate(); /调用函数求解分解后的方程 cout用Doolittle方法求得结果如下:n; for(i=0;ilenth;i+) /输出结果 for(j=0;jlenth;j+); coutxi+1=bin; /输出x1到xi的值 void fenjie()int i,j,n,k;double temp;for(i=1,j=0;ilenth;i+)aij=aij/a00;for(n=1;nlenth;n+) /求Ufor(j=n;jlenth;j+)for(k=0,temp=0;kn;k+)temp+=ank*akj;anj-=temp;for(i=n+1;ilenth;i+)for(k=0,temp=0;kn;k+)temp+=aik*akn;ain=(ain-temp)/ann;void calculate() /计算Doolittle结果int i,j;double sum_ax=0;for(i=0;ilenth;i+)for(j=0,sum_ax=0;j=0;i-)for(j=i+1,sum_ax=0;jlenth;j+)sum_ax+=aij*bj;bi=(bi-sum_ax)/aii;六、测试实例七、测试心得通过此次实验,用三种方法来求线性方程组的解,已经让我对Gauss消去法,列主元消去法,doolittle三角分解法不再陌生,课堂上主要是了解公式的用法,但实验中却更多的掌握编程的算法和技巧,在以上的代码中,还有很多缺点并且不全面的地方,由于在书上面的矩阵方程的行和列都相同,所以我输入的方程的行和列就是一样的值,在Doolittle这个实验中,我也没判断输入的方程是否有解,就直接将结果输出了,在测试实例中,我也就只按照书上面的矩阵输入进去一个,然后得出结果,有片面性。在以后的学习中,我会好好学习并且来慢慢来完善这三个实验的算法。一、实验题目:求实系数多项式全部实单根二、实验内容利用弦截法计算多项式的实单根三、算法描述弦截法设计思想利用插值原理,为了避免牛顿迭代法中的求导,要求在f(x)上取二点x0,x1,做过f(x0),f(x1)的直线交x轴一点为x,把原来的x1当成x0,把x当成x1,再重复上面的做直线的过程,不断循环下去,直到达到精度为止。迭代公式:四、设计说明(输入、输出、变量说明)n为输入方程的最高次数ki为方程组的系数m为迭代的次数xj();函数为弦截函数xj()函数中运用了迭代函数。五、源程序#includevoid xj(float k100,float x100,int m,int n) float f100,tap=1;int i,j,p;for(i=0;i100;i+)fi=0; for(i=0;i=n;i+)for(j=0;ji;j+)tap=x0*tap;f0=f0+ki*tap;tap=1;for(j=0;ji;j+)tap=x1*tap;f1=f1+ki*tap;tap=1; /for循环求得所要求的方程,后面的i从1开始,所以要

温馨提示

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

评论

0/150

提交评论