版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科实验报告课程名称:计算机数值方法实验项目:计算机数值方法实验实验地点:虎峪校区致远楼B401专业班级:软件学院1217班学号:201200xxxx学生姓名:XXX指导教师:xxx2014年5月21日太原理工大学学生实验报告学院名称软件学院专业班级1217班学号201200xxxx学生姓名XX实验日期2014.05.21成绩课程名称数值计算方法实验题目实验一」方程求解、实验目的和要求熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:二分法f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|<0.5W5二、 主要设备笔记本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,a<b ,如果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)的零点所在区间收缩一半的方法,使区间内的两个端点逐步逼近函数零点,最终求得零点近似值。四、操作方法与实验步骤二分法:#include<stdio.h>#include<stdlib.h>#include<math.h>intmain(){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.000005<s&&s<0.000005){break;}elseif(s<0){a=x;}elseif(s>0){b=x;}printf("%f\t%f\t%f\n",a,b,s);}printf("X 的值为:%f\n",x);printf("误差:\t%f\n",s);return0;}割线法:#include"stdio.h"#include"math.h"intmain(){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);}五、实验结果与分析AnAnBnF<Xn>1,0008001-5800902-3750001-£8O0OH-L.7SIG87511.375009B.1G21091>3125001.375009-0_8483991.3437S01-375090-0_3509831-359375-0.09G4991.3593751,367188咏3323561>3632811>367188—0・6321501.3632811.3652340.0000721.3C42581.365234-0.0LG0471.2647461.385234-0.0079991.3G49901.365234-0.0039591.3€51121.365234-0.0019441.3€&1731.365234-0.00093G1皿5豳41-2G5234-0.000432l>36521fl1.365234-0.0001801.3652271.3C5234-0.0000541.3G5227t・365231l-2fcS2291.365231-0.0000221.365230 1.365231*珂值为:1^65230请養任意键继塚…-0.000007割线法二分法割线法分析:由程序知,使用二分法和割线法均能计算出方程的根,但利用割线法要比二分法计算的次数少,并且能够较早的达到精度要求。相比之下,割线法程序代码量较少,精简明了。六、讨论、心得本次数值计算方法程序设计实验从习题练习中跳脱出来,直接面对实用性较强的程序代码编写。效果很好,不仅加深对二分法、割线法的理解,还加强了实际用运能力。将理论知识成功地转化成实践结果。实验地点虎峪校区致远楼B401指导教师xx实验地点虎峪校区致远楼B401指导教师xx太原理工大学学生实验报告学院名称软件学院专业班级1217班学号201200xxxx学生姓名xx实验日期2014.05.28成绩课程名称数值计算方法实验题目实验二线性方程组的直接解法、实验目的和要求合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:①123X114012x28241x313②0.31059.143X59.175.2916.13012X46.7811.2952X1121X24215X12③87210X274836X371261120X43④21X17 (n=5,10,100,…)121X25121Xn1512Xn5、主要设备笔记本HPProBook6470b—台编译软件:VC++6.0三、实验内容和原理高斯消元法:将原方程组化为三角形方阵的方程组:Iik=3k/akkij=aij=aij-Iik*akj(k=1,2,…(k=1,2,…,n-1 i=k+1,k+2.…,nj=k+1,k+2, …,n+1)由回代过程求得原方程组的解:n=an=ann+1/annx k=(akn+1-Xakjxj)/akkLU分解法:将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x。四、操作方法与实验步骤完全主元素消元法:#include<stdio.h>#include<iostream.h>#include"math.h"floata[100][101];floatx[10];intN;voidshuchu(){for(inti=1;i<=N;i++){for(intj=1;j<=N+1;j++){cout<<a[i][j]<<""<<"";}cout<<endl;}}voidshuru(){cout<<"请输入矩阵阶数:"<<endl;cin>>N;cout<<"请输入矩阵各项:"<<endl;for(inti=1;i<=N;i++)for(intj=1;j<=N+1;j++){cin»a[i][j];}cout<<endl;}voidmain(){intz[10];intmaxi,maxj;shuru();for(inti=1;i<=N;i++)z[i]=i;for(intk=1;k<N;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[ma刈[j]=t;}}if(maxj!=k){for(i=1;i<=N;i++){floatt=a[i][k];a[i][k]=a[i][ma刈;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;i>0;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];}<<endl;cout<<"完全主元素消去法之后的矩阵为: ”<<endl;shuchu();for(i=1;i<=N;i++)cout<<"x["<<i<<"]="<<x[i]<<endl;}列主元素消元法:#include"stdio.h"intmain(){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;k<2;k++)for(i=k+1;i<3;i++)for(j=k+1;j<4;j++)a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];for(i=0;i<3;i++){for(j=0;j<4;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;j<3;j++){sum+=a[k][j]*x[j];}x[k]=(a[k][3]-sum)/a[k][k];}for(i=0;i<3;i++){printf("x[%d]=%f\n",i+1,x[i]);}printf("\n");LU分解法:#inelude<stdio.h>#inelude<math.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;r<k;++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;r<k;++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;j<i;++j){y[i]-=l[i][j]*y[j];}}for(i=n;i>O;--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;}五、实验结果与分析列主元素消元法:"I主7L第消去吐上.£酌柜晖龄=LhIH]VPl9-1. ««[»][!3^3r 寸■H】|[肆I^3■MMMMMiM <«[MIOH■[哼■MHMIlRfeMMLei][0]"0.10000061 o.El3C11-1.EII3iBEie0 aEJL1C2]"2.0000130 3C3]-B.SeRFIMMLtS]C0il"2•❺❷日JCl1-01. at2:]ILS1 &. at££Jt31 15■旨❷CMSOB加阵的角军为二“iLH]—1■U■:31—3-RiBWHiSH}秆按任;w;傩丰比場”■■LU分解法:分析:对于两种高斯解方程,完全主元素跟列主元素都是先消元、再回代,由程序段可以发现,始终消去对角线下方的元素。即,为了节约内存及时效,可以不必计算出主元素下方数据。列主元素消元法的算法设计上优于完全主元素消元法,它只需依次按列选主元素然后换行使之变到主元素位置,再进行消元即可。列主元素消元法的耗时比完全主元素法少很多,常采用之。对于LU分解法,分解矩阵为单位下三角阵L与上三角阵U的乘积,然后解方程组Ly=b,回代,解方程组Ux=y。其中的L为n阶单位下三角阵、U为上三角阵.六、讨论、心得本次试验中,感觉是最难的一次,完全主元素消元法程序编写过程相对来说花了好长时间。纠正各种语法、算法、思路错误。最后勉强成功,但还是有几处警告,不得解决之法。感到程序学习的不足,再加之对高斯的不甚了解。编写过程很是痛苦。查阅各种内外部资料,这点有利有弊。突然觉得,应该再把数据结构之类的重新学习一下才行。以后多花时间在编程吧,重在理解。必须反省一下自己的C、C++学习了,还是得多加练习,平时必须养成一种好的算法思维习惯。实验地点 虎峪校区致远楼B401 指导教师 xx
太原理工大学学生实验报告学院名称软件学院专业班级1217班学号201200xxxx学生姓名xx实验日期2014.06.04成绩课程名称数值计算方法实验题目实验三线性方程组的迭代解法一、 实验目的和要求使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。10坷一花一2码=7一24-xL+10An-2x3=83
-占一Xi+5x,=4.2L 」 * J二、 主要设备笔记本HPProBook6470b—台编译软件:VC++6.0三、 实验内容和原理设线性方程组 A x=b的系数矩阵A可逆,且主对角元素ail,a22,•…,ann均不为零,令并将A分解成从而线性方程组可写成则有迭代公式D=diag(aii,a22,•…并将A分解成从而线性方程组可写成则有迭代公式A=(A-D)+D(k+1)x二Bx(k+1)x二Bx(k)+f1其中,B1=I-D-1A,f1=D1b四、操作方法与实验步骤高斯一赛德尔迭代法#include"iostream"#include"iomanip"usingnamespacestd;
intmain(){inti,j,k=O,m,n;doublet1,t2,e1,e2=0.0;cout<<"请输入精度e:";cin>>e1;cout<<"请输入系数矩阵行数:";cin»m;cout<<"请输入系数矩阵列数:";cin»n;cout<<endl;double(**a)=newdouble*[m];for(i=0;i<=m;i++){a[i]=newdouble[n];}double(*b)=newdouble[m];double(*x)=newdouble[n];"<<endl;cout<<"请输入系数矩阵:"<<endl;cout<<" "<<endl;for(intnum仁0;num1<m;num1++){for(intnum2=0;num2<n;num2++){cin>>a[num1][num2];}cout<<endl;}cout<<"输入的系数矩阵为:"<<endl;for(intnum3=0;num3<m;num3++){for(intnum4=0;num4<n;num4++){cout<<a[num3][num4]<<"}cout<<endl;}cout<<"请输入矩阵b:"<<endl;for(intnum5=0;num5<m;num5++){cin>>b[num5];}cout<<"输入的矩阵b为:"<<endl;for(intnum6=O;num6<m;num6++){cout<<b[num6]<<" ";}cout<<endl;for(intnum7=0;num7<n;num7++){x[num7]=0.0000;}do{cout<<"第"<<k<<"次迭代值:";e2=0.0;for(i=0;i<m;i++){doublesum=0.0;for(j=0;j<n;j++){if(j!=i)sum+=a[i][j]*x[j];}t仁x[i];t2=e2;x[i]=(b[i]-sum)/a[i][i];e2=(x[i])-t1>=0?(x[i])-t1:t1-(x[i]);e2=(e2>=t2?e2:t2);cout<<setprecision(8)<<x[i]<<"}cout<<endl;k++;}while(e2>=e1&&k<30);cout<<"共迭代了"<<k<<"次";delete[]a;delete[]b;delete[]x;return0;}雅克比迭代法:#inelude<stdio.h>#inelude<math.h>intmain(){floata[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\t X[1]\t\t X[2]\t\t X[3]\n");for(k=0;k<8;k++){for(i=0;i<3;i++){sum=0;for(j=0;j<n;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;i<n;i++){printf("%f\t",x[i]);}printf("\n”);}}五、实验结果与分析高斯赛德尔迭代法:
ji砖一丄一2£1.8-2卜九-1bi肓输入矩晖Sji砖一丄一2£1.8-2卜九-1bi肓输入矩晖S7.3■.玉俎・=01111XAIkJ弋*■H12J4s6Vc产样匡官胃肖巨hll84300IB999tib20»999S3MV9-VWH更粧匙绫.V^21-l&'Piesi眄亦北1_1V4^h»i-L999^aeJ. .止.直于于鼻于&于1-1WWVVir-141,2?77TRfii vimy1.3999^461,399^9S61”会步夕牛令宁勺i.雅克比迭代:第1次迭%第卫次迭」弋;第彳次迭弋:第4次迭弋EBf轟窗鉄L;清按任意键继续.XE110.7200001-0430B01.0931901.99912£1.39-9S901丄・09??981.100600XE2J0.9020601-1671881-1957241-1994671-1,999331-1999921・19S9991・2000010KE311..1E呻40回1-2820541.2977711-2997191-299965±-299796■・2999991*30000G分析:使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少,能够更早的达到精度要求。从程序中可以看出,雅克比定义的sum只有一个,而高斯赛德尔需要两个。时效性上后者要好些。六、讨论、心得这次试验算是比较成功,要归功于授课时候的认真听讲。程序编写之前,对书本的理论知识进行了进一步的探索。预习准备工作很彻底,自然随后的一切也都很顺利。实验地点虎峪校区致远楼B401指导教师实验地点虎峪校区致远楼B401指导教师xx太原理工大学学生实验报告学院名称软件学院专业班级1217班学号201200xxxx学生姓名XX实验日期2014.06.11成绩课程名称数值计算方法实验题目实验四代数插值和最小二一乘法拟合、实验目的和要求⑴使用拉格朗日插值法或牛顿插值法求解:已知 f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。X0.400.550.650.800.901.05f(x)0.410750.578150.696750.888111.026521.25386⑵给定数据点(x,yi),用最小二乘法拟合数据的多项式,并求平方误差。Xi00.50.60.70.80.91.0yi11.751.962.192.442.713.00主要设备笔记本HPProBook6470b—台编译软件:VC++6.0三、实验内容和原理(1)设函数在区间[a,b]上n+1互异节点Xo,X1,…,Xn上的函数值分别为yo,yi,…,yn,求n次插值多项式Pn(x),满足条件Pn(Xj)=yj,j=0,1, …,n令Ln(x)=y°l0(x)+y1I1(x)+…+yJn(x)=刀ydi(x)其中l0(x),l1(X),…,ln(x)为以x0,x1,…,xn为节点的n次插值基函数,则Ln(x)是一次数不超过n的多项式,且满足Ln(xj)=yj,L=0,1,…,n再由插值多项式的唯一性,得R(x)=Ln(x)(2)建立正规方程组:刀(刀xij)ak=Exijyi,j=O,l,…,n平方误差:平方误差:k①中,求p(x)€①,使误差的平方和E2I=E(EakX①中,求p(x)€①,使误差的平方和E2对给定数据点{(Xi,Yi)}(i=0,1,…,m),在取定的函数类最小,E2=E[p(Xi)-Yi]2。从几何意义上讲,就是寻求与给定点 {(Xi,Yi)}(i=0,1,…,m)的距离平方和为最小的曲线 y=p(x)。函数p(x)称为拟合函数或最小二乘解,求拟合函数 p(x)的方法称为曲线拟合的最小二乘法。得到的两个关于aO、 al为未知数的两个方程组,解这两个方程组得出:aO=(刀Yi)/m-a1(刀Xi)/ma1=[m刀XiYi-(刀Xi刀Yi)]/[m刀Xi2-(刀Xi)2)]即最终的拟合多项式各项系数。四、操作方法与实验步骤(1)代数插值#inelude<stdio.h>#inelude<stdlib.h>#inelude<conio.h>#inelude<alloe.h>voiddifference(float*x,float*y,intn){float*f;intk,i;f=(float*)malloe(n*sizeof(float));for(k=1;k<=n;k++){f[O]=y[k];for(i=0;i<k;i++)f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}return;}intmain(){inti,n;floatx[20],y[20],xx,yy;printf("请输入数据个数 n:");seanf("%d",&n);printf("\n");for(i=O;i<=n_1;i++){printf("x[%d]=",i);scanf("%f",&x[i]);printf("y[%d]=",i);scanf("%f",&y[i]);printf("\n”);}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近似值为:F(%f)=%f\n",xx,yy);}(2)最小二乘法拟合#include<iostream.h>#include<fstream.h>#defineN15doublepower(double&a,intn){doubleb=1;for(inti=0;i<n;i++)b*=a;returnb;}voidGauss();doubleX[N],Y[N],sumX[N],sumY[N],a[N][N],b[N],l[N][N],x[N];intmain(){ofstreamoutdata;ifstreamindata;doubles;inti,j,k,n,index;cout<<"请输入已知点的个数 n=";cin»n;cout<<endl;cout<<"请输入X和Y:"<<endl;for(i=0;i<n;i++){cout<<"X["<<i<<"]=";cin>>X[i];sumX[1]+=X[i];cout<<"Y["<<i<<"]=";cin>>Y[i];sumY[1]+=Y[i];cout<<endl;}cout<<"sumX[1]="<<sumX[1]<<"\t"<<"sumY[1]="<<sumY[1]<<endl;cout<<"请输入拟合次数 index=";cin»index;cout<<endl;i=n;sumX[O]=i;for(i=2;i<=2*index;i++){sumX[i]=O;for(j=0;j<n;j++)sumX[i]+=power(X[j],i);cout<<"sumX["<<i<<"]="<<sumX[i]<<endl;}for(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业编综合岗面试真题汇编含答案
- 2026 事业编计算机岗面试易错题集 含解析
- 2026 事业单位水利岗面试题型分析
- 灭火器构造与使用指南
- 腾讯智能汽车战略
- 2026下半年初中地理教资面试自然地理题库
- 2026年山阴县教师招聘考试备考题库及答案解析
- 2026年武威市烟草专卖局人员招聘参考题库及答案详解
- 急性肾损伤诊疗专家共识(2026版)
- 2026乌兰察布察哈尔右翼后旗招聘政府专职消防员考试参考题库及答案解析
- 【2026新版一年级上册数学】第一单元一课一练【人教版】
- 2026年中国光电芯片现状研究及发展趋势预测
- 2026年考研管综199真题(试卷+答案)
- 2026年建党105周年党史知识竞赛题库及答案
- 2026年10月自考动漫艺术概论试题及标准答案
- 颈椎病康复指导
- 亲爱的你啊混声四部合唱简谱
- 中核集团校招面试题及答案(2026版)
- 海康威视iVMS-8700智能建筑综合管理平台 软件技术白皮书
- 首届全国行业职业技能竞赛(电力交易员)大赛考试题(附答案)
- 2024年合肥新站高新技术产业开发区招聘社区工作者40人笔试备考试题及参考答案详解1套
评论
0/150
提交评论