数值计算方法实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本科实验报告课程名称:计算机数值方法实验项目:计算机数值方法实验实验地点:506专业班级:学号:学生姓名:指导教师:2012年6月20日计算数值方法实验报告2太原理工大学学生实验报告学院名称计算机科学与技术专业班级学号学生姓名实验日期2012.06.05成绩课程名称数值计算方法实验题目实验一方程求解一、实验目的和要求熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:二分法f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5二、主要设备PC,Windows操作系统,VC++6.0编程平台;三、实验内容和原理函数f(x)在区间(x,y)上连续,先在区间(x,y)确定a与b,若f(a),f(b)异号,说明在区间(a,b)内存在零点,然后求f[(a+b)/2]。假设F(a)0,F(b)0,ab,①如果f[(a+b)/2]=0,该点即为零点;②如果f[(a+b)/2]0,则区间((a+b)/2,b)内存在零点,(a+b)/2≥a;③如果f[(a+b)/2]0,则区间(a,(a+b)/2)内存在零点,(a+b)/2≤b;返回①重新循环,不断接近零点。通过每次把f(x)的零点所在区间收缩一半的方法,使区间内的两个端点逐步逼近函数零点,最终求得零点近似值。计算数值方法实验报告3四、操作方法与实验步骤1.二分法:#includestdio.h#includestdlib.h#includemath.hintmain(){doublea=1.0,b=2.0;doublex,s;printf(An\t\tBn\t\tF(Xn)\n);while(1){x=(a+b)/2;s=pow(x,3)+4*x*x-10;if(-0.000005s&&s0.000005){break;}elseif(s0){a=x;}elseif(s0){b=x;}printf(%f\t%f\t%f\n,a,b,s);}printf(X的值为:%f\n,x);printf(误差:\t%f\n,s);return0;}2.割线法:#includestdio.h#includemath.hintmain(){floatc,a=1.0,b=2.0;printf(每次得到的X的近似值:\n);while(1){c=b-(b*b*b+4*b*b-10)*(b-a)/(b*b*b+4*b*b-(a*a*a+4*a*a));if(fabs(b-c)0.5*0.00001)break;计算数值方法实验报告4b=c;printf(%f\n,b);}printf(X的值为:%f\n,c);}五、实验结果与分析二分法割线法分析:由程序知,使用二分法和割线法均能计算出方程的根,但利用割线法要比二分法计算的次数少,并且能够较早的达到精度要求。相比之下,割线法程序代码量较少,精简明了。六、讨论、心得本次数值计算方法程序设计实验从习题练习中跳脱出来,直接面对实用性较强的程序代码编写。效果很好,不仅加深对二分法、割线法的理解,还加强了实际用运能力。将理论知识成功地转化成实践结果。实验地点北区多学科综合楼4506指导教师计算数值方法实验报告5太原理工大学学生实验报告学院名称计算机科学与技术专业班级学号学生姓名实验日期2012.06.05成绩课程名称数值计算方法实验题目实验二线性方程组的直接解法一、实验目的和要求合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:①13814142210321321xxx②2178.4617.5911212592.1121130.6291.51314.59103.0432115xxxx③3772201161263841027851244321xxxx④55572112112112121nnxxxx(n=5,10,100,…)二、主要设备PC,Windows操作系统,VC++6.0编程平台;三、实验内容和原理高斯消元法:将原方程组化为三角形方阵的方程组:lik=aik/akkaij=aij-lik*akj(k=1,2,…,n-1i=k+1,k+2,…,nj=k+1,k+2,…,n+1)计算数值方法实验报告6由回代过程求得原方程组的解:xn=ann+1/annxk=(akn+1-∑akjxj)/akk完全主元素消元法流程图:列主元素消元法:LU分解法:将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x。四、操作方法与实验步骤1.完全主元素消元法:#includestdio.h#includeiostream.h#includemath.hfloata[100][101];floatx[10];intN;voidshuchu(){for(inti=1;i=N;i++){for(intj=1;j=N+1;j++)计算数值方法实验报告7{couta[i][j];}coutendl;}}voidshuru(){cout请输入矩阵阶数:endl;cinN;cout请输入矩阵各项:endl;for(inti=1;i=N;i++)for(intj=1;j=N+1;j++){cina[i][j];}coutendl;}voidmain(){intz[10];intmaxi,maxj;shuru();for(inti=1;i=N;i++)z[i]=i;for(intk=1;kN;k++){maxi=k;maxj=k;floatmaxv=abs(a[k][k]);for(i=k;i=N;i++)for(intj=k;j=N;j++)if(abs(a[i][j])maxv){maxv=abs(a[i][j]);maxi=i;maxj=j;}if(maxi!=k){for(intj=1;j=N+1;j++){floatt=a[k][j];a[k][j]=a[maxi][j];a[maxi][j]=t;}}if(maxj!=k)计算数值方法实验报告8{for(i=1;i=N;i++){floatt=a[i][k];a[i][k]=a[i][maxj];a[i][maxj]=t;}intt=z[k];z[k]=z[maxj];z[maxj]=t;}for(inti=k+1;i=N;i++){floatl=a[i][k]/a[k][k];for(intj=k;j=N+1;j++){a[i][j]+=-l*a[k][j];}}}for(i=N;i0;i--){floats=0;for(intj=i+1;j=N;j++){s+=a[i][j]*x[z[j]];}x[z[i]]=(a[i][N+1]-s)/a[i][i];}cout完全主元素消去法之后的矩阵为:endl;shuchu();for(i=1;i=N;i++)coutx[i]=x[i]endl;}2.列主元素消元法:#includestdio.hintmain(){floata[3][4]={{1,2,3,14},{0,1,2,8},{2,4,1,13}};floatx[3];floatsum=0;intk,i,j;for(k=0;k2;k++)for(i=k+1;i3;i++)for(j=k+1;j4;j++)a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];计算数值方法实验报告9for(i=0;i3;i++){for(j=0;j4;j++){printf(a[%d][%d]=%f,i,j,a[i][j]);}printf(\n);}x[2]=a[2][3]/a[2][2];for(k=1;k=0;k--){sum=0;for(j=k+1;j3;j++){sum+=a[k][j]*x[j];}x[k]=(a[k][3]-sum)/a[k][k];}for(i=0;i3;i++){printf(x[%d]=%f\n,i+1,x[i]);}printf(\n);}3.LU分解法:#includestdio.h#includemath.h#defineL30doublea[L][L],b[L],l[L][L],u[L][L],x[L],y[L];intmain(){intn,i,j,k,r;printf(请输入矩阵元次:\n);scanf(%d,&n);printf(请输入矩阵各项:\n);for(i=1;i=n;++i){for(j=1;j=n;++j){scanf(%lf,&a[i][j]);}}计算数值方法实验报告10printf(请输入方程组的常数项:\n);for(i=1;i=n;++i){scanf(%lf,&b[i]);}for(i=1;i=n;++i){for(j=1;j=n;++j){l[i][j]=0;u[i][j]=0.0;}}for(k=1;k=n;++k){for(j=k;j=n;++j){u[k][j]=a[k][j];for(r=1;rk;++r){u[k][j]-=l[k][r]*u[r][j];}}for(i=k+1;i=n;++i){l[i][k]=a[i][k];for(r=1;rk;++r){l[i][k]-=l[i][r]*u[r][k];}l[i][k]/=u[k][k];}l[k][k]=1.0;}for(i=1;i=n;++i){y[i]=b[i];for(j=1;ji;++j){y[i]-=l[i][j]*y[j];}}for(i=n;i0;--i){计算数值方法实验报告11x[i]=y[i];for(j=i+1;j=n;++j){x[i]-=u[i][j]*x[j];}x[i]/=u[i][i];}for(i=1;i=n;++i){printf(%0.2lf\n,x[i]);}return0;}五、实验结果与分析完全主元素消元法:列主元素消元法:计算数值方法实验报告12LU分解法:分析:对于两种高斯解方程,完全主元素跟列主元素都是先消元、再回代,由程序段可以发现,始终消去对角线下方的元素。即,为了节约内存及时效,可以不必计算出主元素下方数据。列主元素消元法的算法设计上优于完全主元素消元法,它只需依次按列选主元素然后换行使之变到主元素位置,再进行消元即可。列主元素消元法的耗时比完全主元素法少很多,常采用之。对于LU分解法,分解矩阵为单位下三角阵L与上三角阵U的乘积,然后解方程组Ly=b,回代,解方程组Ux=y。其中的L为n阶单位下三角阵、U为上三角阵.六、讨论、心得本次试验中,感觉是最难的一次,完全主元素消元法程序编写过程相对来说花了好长时间。纠正各种语法、算法、思路错误。最后勉强成功,但还是有几处警告,不得解决之法。感到程序学习的不足,再加之对高斯的不甚了解。编写过程很是痛苦。查阅各种内外部资料,这点有利有弊。突然觉得,应该再把数据结构之类的重新学习一下才行。以后多花时间在编程吧,重在理解。必须反省一下自己的C、C++学习了,还是得多加练习,平时必须养成一种好的算法思维习惯。实验地点北区多学科综合楼4506指导教师计算数值方法实验报告13太原理工大学学生实验报告学院名称计算机科学与技术专业班级学号学生姓名实验日期2012.06.05成绩课程名称数值计算方法实验题目实验三线性方程组的迭代解法一、实验目的和要求使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功