计算数值方法实验报告..

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

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

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

资源描述

课程名称:计算机数值方法实验项目:方程求根,线性方程组的直接解法与迭代解法,代数插值,最小二乘法拟合多项式实验地点:逸夫楼402专业班级:学号:学生姓名:指导教师:于亚男2012年4月26日太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名实验日期4月26日成绩课程名称计算机数值方法实验题目方程求根一、实验目的和要求(1)了解非线性方程求根的常见方法,如二分法、牛顿法、割线法。(2)加深对方程求根方法的认识,掌握算法。二、实验内容和原理熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5三、主要仪器设备HP笔记本,VC++6.0四、操作方法与实验步骤1.二分法:#includestdio.h#includemath.hdoublef(doublex){doubley;y=pow(x,3)+4*pow(x,2)-10;return(y);}main(){doublea,b,yl,yr,ym,x1,xr,xm;a=1;b=2;yl=f(a);yr=f(b);while(yl*yr0){yl=f(a);yr=f(b);}xr=a;x1=b;while(fabs(xr-x1)0.000001){xm=(x1+xr)/2;ym=f(xm);yl=f(x1);yr=f(xr);if(yl*ym0&&yr*ym0)xr=xm;elsex1=xm;printf(%f\t%f\t%f\n,x1,xr,xm);}printf(\n所求根为x=%f\n,xm);return0;}2.牛顿法:#includestdio.h#includemath.hdoublef(doublex){return(pow(x,3)+4*pow(x,2)-10);}doublef1(doublex){return(3*pow(x,2)+10*x);}intmain(){doublex,x1,y1,y2;printf(请输入一个任意实数:X=);scanf(%lf,&x);printf(方程的解为:\n);do{x1=x;y1=f(x);y2=f1(x1);x=x1-y1/y2;}while(fabs(x-x1)=5e-6);printf(%lf\n,x1);}3.追赶法五、实验数据记录和处理1.二分法2..牛顿法六、实验结果与分析通过这个两个程序可看出,二分法的计算量更大一些。七、讨论、心得通过这个实验,我了解了线性方程的一些求根方法,对于方程近似值的求解有了更多的理解。实验地点指导教师于亚男太原理工大学学生实验报告学院名称专业班级学号学生姓名实验日期4月26日成绩课程名称计算机数值方法实验题目求解线性方程组一、实验目的和要求(1)了解直接法解线性方程组(2)对Gauss消元法、LU分解法、追赶法有更深刻的理解二、实验内容和原理合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:①13814142210321321xxx②2178.4617.5911212592.1121130.6291.51314.59103.0432115xxxx③3772201161263841027851244321xxxx④55572112112112121nnxxxx(n=5,10,100,…)三.主要仪器设备HP笔记本,VC++6.0四.操作方法与实验步骤1.高斯:#includestdio.hvoidmain(){inti,j,f,n;floata[5][5],b[5],x[5],l,k;printf(Inputn:);scanf(%d,&n);printf(Inputa[][]:);for(i=0;in;i++)for(f=0;fn;f++)scanf(%f,&a[i][f]);printf(Inputb[]:);for(i=0;in;i++)scanf(%f,&b[i]);for(i=0;in-1;i++){for(j=i+1;jn;j++){l=-a[j][i]/a[i][i];b[j]=b[j]+b[i]*l;for(f=i;fn;f++)a[j][f]=a[j][f]+a[i][f]*l;}}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i=0;i--){x[i]=b[i];k=0;for(f=i+1;fn;f++)k=k-a[i][f]*x[f];x[i]=(k+b[i])/a[i][i];}printf(Theansweris);for(i=0;in;i++)printf(%.4f,x[i]);}2.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=\n);scanf(%d,&n);printf(a[n][n]=\n);for(i=1;i=n;++i){for(j=1;j=n;++j){scanf(%lf,&a[i][j]);}}printf(b[n]=\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){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;}五.实验数据记录和处理1.高斯2.LU分解六、实验结果与分析本次实验数据较多,在输入上要多费点功夫,一不小心就全部都错了。在今后编程过程中,一定要小心谨慎。七、讨论、心得通过本次实验,我深刻理解了直接法在计算机上解线性方程组的有效性,对于Gauss消元法、LU分解法也有了深刻的理解。实验地点逸夫楼402指导教师于亚男太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名实验日期4月26日成绩课程名称计算机数值方法实验题目线性方程组的迭代解法一、实验目的和要求掌握雅可比迭代法和高斯-赛德尔迭代法对方程组进行求解二、实验内容和原理使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。三、主要仪器设备HP笔记本,VC++6.0四、操作方法与实验步骤雅可比迭代法:#includestdio.h#includemath.hintmain(){doublea[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}},b[3]={7.2,8.3,4.2};//定义方程组floatx[3]={0,0,0},sum;inti,j,k,n=3;printf(\t\tX[1]\t\tX[2]\t\tX[3]\n);for(k=0;k8;k++){for(i=0;i3;i++){sum=0;for(j=0;jn;j++){if(i==j)continue;sum=sum+a[i][j]*x[j];}x[i]=(b[i]-sum)/a[i][i];}printf(第%d次迭代:\t,k+1);for(i=0;in;i++){printf(%f\t,x[i]);}printf(\n);}}五、实验数据记录和处理2.453.82102.7210321321321xxxxxxxxx六、实验结果与分析在本次实验中,编程不太容易,对c/c++的学习应该更进一步。七、讨论、心得通过这次实验,我明白了雅克比迭代的一般性解法,对于编程的应用也有了更深刻的理解。实验地点逸夫楼402指导教师于亚男太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名实验日期4月26日成绩课程名称计算机数值方法实验题目代数插值一、实验目的和要求掌握拉格朗日插值法和牛顿插值法求近似解二、实验内容和原理使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。X0.400.550.650.800.901.05f(x)0.410750.578150.696750.888111.026521.25386三、主要仪器设备HP笔记本,VC++6.0四、操作方法与实验步骤#includestdafx.h#includestdio.h#includestdlib.h#includeconio.h#includemalloc.hvoiddifference(float*x,float*y,intn){float*f;intk,i;f=(float*)malloc(n*sizeof(float));for(k=1;k=n;k++){f[0]=y[k];for(i=0;ik;i++)f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}return;}intmain(){inti,n;floatx[10],y[10],xx,yy;printf(输?入?结á点?个?数簓n:阰);scanf(%d,&n);printf(\n);for(i=0;i=n-1;i++){printf(x[%d]=,i);scanf(%f,&x[i]);printf(y[%d]=,i);scanf(%f,&y[i]);printf(\n);}difference(x,(float*)y,n);printf(所ù求ó插?值μX:阰);scanf(%f,&xx);yy=y[20];for(i=n-1;i=0;i--)yy=yy*(xx-x[i])+y[i];printf(\n近ü似?值μ为a:阰F(%f)=%f\n,xx,yy);}五、实验数据记录和处理六、实验结果与分析拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。所以要用到牛顿插值多项式,两种方法相结合才能更好的解决多项式的问题。实验地点逸夫楼402指导教师于亚男太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名实验日期4月26日成绩课程名称计算机数值方法实验题目最小二乘法拟合多项式一、实验目的和要求掌握用最小二乘法拟合数据的多项式,并求平方误差二、实验内容和原理给定数据点(xi,yi),用最小二乘法拟合数据的多项式,并求平方误差。xi00.50.60.70.80.91.0yi11.751.962.192.442.713.00三、主要仪器设备HP笔记本,VC++6.0四、操作方法与实验步骤#incl

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

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

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

×
保存成功