您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 数值计算方法实验报告(含所有)
本科实验报告课程名称:计算机数值方法实验项目:计算机数值方法实验实验地点:虎峪校区致远楼B401专业班级:软件学院1217班学号:201200xxxx学生姓名:xxx指导教师:xxx2014年5月21日计算数值方法实验报告2太原理工大学学生实验报告学院名称软件学院专业班级1217班学号201200xxxx学生姓名xx实验日期2014.05.21成绩课程名称数值计算方法实验题目实验一方程求解一、实验目的和要求熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:二分法f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5二、主要设备笔记本HPProBook6470b一台编译软件: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)的零点所在区间收缩一半的方法,使区间内的两个端点逐步逼近函数零点,最终求得零点近似值。四、操作方法与实验步骤1.二分法:#includestdio.h#includestdlib.h#includemath.hintmain(){doublea=1.0,b=2.0;计算数值方法实验报告3doublex,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;b=c;printf(%f\n,b);}printf(X的值为:%f\n,c);}计算数值方法实验报告4五、实验结果与分析二分法割线法分析:由程序知,使用二分法和割线法均能计算出方程的根,但利用割线法要比二分法计算的次数少,并且能够较早的达到精度要求。相比之下,割线法程序代码量较少,精简明了。六、讨论、心得本次数值计算方法程序设计实验从习题练习中跳脱出来,直接面对实用性较强的程序代码编写。效果很好,不仅加深对二分法、割线法的理解,还加强了实际用运能力。将理论知识成功地转化成实践结果。实验地点虎峪校区致远楼B401指导教师xx计算数值方法实验报告5太原理工大学学生实验报告学院名称软件学院专业班级1217班学号201200xxxx学生姓名xx实验日期2014.05.28成绩课程名称数值计算方法实验题目实验二线性方程组的直接解法一、实验目的和要求合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:①13814142210321321xxx②2178.4617.5911212592.1121130.6291.51314.59103.0432115xxxx③3772201161263841027851244321xxxx④55572112112112121nnxxxx(n=5,10,100,…)二、主要设备笔记本HPProBook6470b一台编译软件: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)由回代过程求得原方程组的解:xn=ann+1/annxk=(akn+1-∑akjxj)/akkLU分解法:计算数值方法实验报告6将系数矩阵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++){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;计算数值方法实验报告7shuru();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){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];计算数值方法实验报告8}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];for(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);}计算数值方法实验报告93.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]);}}printf(请输入方程组的常数项:\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){计算数值方法实验报告10l[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){x[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;}五、实验结果与分析完全主元素消元法:计算数值方法实验报告11列主元素消元法:LU分解法:分析:对于两种高斯解方程,完全主元素跟列主元素都是先消元、再回代,由程序段可以发现,始终消去对角线下方的元素。即,为了节约内存及时效,可以不必计算出主元素下方数据。列主元素消元法的算法设计上优于完全主元素消元法,它只需依次按列选主元素然后换行使之变到主元素位置,再进行消元即可。列主元素消元法的耗时比完全主元素法少很多,常采用之。对于LU分解法,分解矩阵为单位下三角阵L与上三角阵U的乘积,然后解方程组Ly=b,回代,解方程组Ux=y。其中的L为n阶单位下三角阵、U为上三角阵.六、讨论、心得本次试验中,感觉是最难的一次,完全主元素消元法程序编写过程相对来说花了好长时间。纠正各种语法、算法、思路错误。最后勉强成功,但还是有几处警告,不得解决之法。感到程序学习的不足,再加之对高斯的不甚了解。编写过程很是痛苦。查阅各种内外部资料,这点有利有弊。突然觉得,应该再把数据结构之类的重新学习一下才行。以后多花时间在编程吧,重在理解。必须反省一下自己的C、C++学习了,还是得多加练习,平时必须养成一种好的算法思维习惯。实验地点虎峪校区致远楼B401指导教师xx计算数值方法实验报告12太原理工大学学生实验报告学院名称软件学院专业班级1217班学号201200xxxx学生姓名xx实验日期2014.06.04成绩课程名称数值计算方法实
本文标题:数值计算方法实验报告(含所有)
链接地址:https://www.777doc.com/doc-5434734 .html