计算数值方法实验报告 _太原理工大学

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

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

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

资源描述

计算数值方法实验报告学院:计算机与软件学院专业:计算机与科学技术班级:计算机学号:1111111111姓名:某某计算数值方法实验报告2太原理工大学学生实验报告学院名称计算机科学与技术专业班级计算机学号1111111111学生姓名某某实验日期2011-6-13成绩课程名称数值计算方法实验题目实验一二分法一、课题名称方程求根:熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:二分法f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5二、目的和意义(1)了解非线性方程求根的常见方法,如二分法、牛顿法、割线法。(2)加深对方程求根方法的认识,掌握算法。(3)会进行误差分析,并能对不同方法进行比较。三、计算公式f(x)在区间(x,y)上连续先找到a、b属于区间(x,y),使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)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值四、结构程序设计#includeiostream#includecmathusingnamespacestd;doublef(doublex){returnx*x*x+4*x*x-10;}计算数值方法实验报告3intmain(){doublet1=1,t2=2;doublet=(t1+t2)/2;while(fabs(f(t))=1.0/2/1000){if(f(t1)*f(t)=0){t2=t;t=(t1+t2)/2;}elseif(f(t)*f(t2)=0){t1=t;t=(t1+t2)/2;}}couttendl;return1;}结果:五、结果讨论和分析在编写这个程序的时候我感觉到了在编写的过程中的不易,在编写的过程中我改变初值然后运行,发现在初值的改变对运行时间的影响不大,结果没有影响。在调试的过程中发现自己还是很粗心,容易犯很简单的错误。在今后的学习中应该做编写程序。实验地点综合楼六层606室指导教师王峥计算数值方法实验报告4学院名称计算机科学与技术专业班级计算机学号1111111111学生姓名某某实验日期2011-6-13成绩课程名称数值计算方法实验题目实验二线性方程组的直接解法一、课题名称线性方程组的直接解法合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:①13814142210321321xxx②2178.4617.5911212592.1121130.6291.51314.593.04321xxxx③3772201161263841027851244321xxxx④55572112112112121nnxxxx(n=5,10,100………)二、目的和意义(1)了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法。(2)加深对线性方程组求解方法的认识,掌握算法。(3)会进行误差分析,并能对不同方法进行比较。四、计算公式高斯分解法:⑴将原方程组化为三角形方阵的方程组:lik=aik/akkaij=aij-lik*akjk=1,2,…,n-1i=k+1,k+2,…,nj=k+1,k+2,…,n+1⑵由回代过程求得原方程组的解:xn=ann+1/ann计算数值方法实验报告5xk=(akn+1-∑akjxj)/akk(k=n-1,n-2,…,2,1)五、结构程序设计#includestdio.hdoublea[15][15],a0[15][15];doubleb[15],b0[15],l[15];intn;voiddisplayA(){printf(\n);for(intj=1;j=n;j++){for(inti=1;i=n;i++)printf(a[%d][%d]=%f,j,i,a[j][i]);printf(b[%d]=%f\n,j,b[j]);}for(intm=1;m=n;m++)printf(l[%d]=%f,m,l[m]);printf(\n);}intmain(){FILE*f;inti,j,k;f=fopen(Gaussdata2.txt,r);fscanf(f,%d,&n);for(i=1;i=n;i++){for(j=1;j=n;j++){fscanf(f,%lf,&a[i][j]);a0[i][j]=a[i][j];}fscanf(f,%lf,&b[i]);b0[i]=b[i];}displayA();fclose(f);k=1;do{for(i=1;i=n;i++)计算数值方法实验报告6{if(i==k)continue;l[i]=a0[i][k]/a0[k][k];}for(j=k+1;j=n;j++)a[k][j]=a0[k][j]/a0[k][k];b[k]=b0[k]/a0[k][k];for(i=1;i=n;i++){if(i==k)continue;for(j=k+1;j=n;j++)a[i][j]=a0[i][j]-l[i]*a0[k][j];b[i]=b0[i]-l[i]*b0[k];}displayA();for(i=1;i=n;i++){for(j=k+1;j=n;j++)a0[i][j]=a[i][j];b0[i]=b[i];}if(k==n)break;k++;}while(1);for(i=1;i=n;i++)printf(b[%2d]=%lf\n,i,b[i]);getchar();}计算数值方法实验报告7六、结果讨论和分析第一题答案:第二题答案:第三题答案:计算数值方法实验报告8在编写这个程序的时候我感觉到了在编写的过程中的不易,在编写的过程中我改变初值然后运行,发现在初值的改变对运行时间的影响不大,结果没有影响。在调试的过程中发现自己还是很粗心,容易犯很简单的错误。在今后的学习中应该做编写程序。实验地点综合楼六层606室指导教师王峥计算数值方法实验报告9学院名称计算机科学与技术专业班级计算机学号1111111111学生姓名某某实验日期2011-6-13成绩课程名称数值计算方法实验题目实验三线性方程组的迭代解法一、课题名称线性方程组的迭代解法使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。二、目的和意义学习使用雅可比迭代法或高斯-赛德尔迭代法三、计算公式雅克比迭代法:设线性方程组Ax=b的系数矩阵A可逆且主对角元素a11,a22,…,ann均不为零,令D=diag(a11,a22,…,ann)并将A分解成A=(A-D)+D从而线性方程组可写成Dx=(D-A)x+b则有迭代公式x(k+1)=B1x(k)+f1其中,B1=I-D-1A,f1=D-1b。四、结构程序设计/雅可比#includeiostream#includecmath#includeiomanipusingnamespacestd;#defineM100/*最大允许的迭代次数*/doublefanshu(double*p,intn)/*求向量无穷范数的函数*/{2.453.82102.7210321321321xxxxxxxxx计算数值方法实验报告10doublen1;inti;n1=fabs(p[0]);for(i=1;in;i++){if(fabs(p[i])n1)n1=fabs(p[i]);}return(n1);}voidjac(double**s,double*g,intsize,doubleeps)/*雅可比迭代函数*/{inti,j,k;double**b,*x0,*x1,*x1_x0,n2,t;/*b用来表示迭代矩阵,x1_x0表示迭代前后向量x0与x1的差向量*/b=newdouble*[size];/*动态分配二维数组*/for(i=0;isize;i++)b[i]=newdouble[size];for(i=0;isize;i++)for(j=0;jsize;j++)b[i][j]=0;x0=newdouble[size];/*动态分配一维数组*/x1=newdouble[size];x1_x0=newdouble[size];for(i=0;isize;i++){g[i]=g[i]/s[i][i];for(j=0;jsize;j++){if(i==j)continue;b[i][j]=-s[i][j]/s[i][i];}}for(i=0;isize;i++)/*选择初始向量及构造迭代条件*/{x0[i]=0;x1[i]=1;x1_x0[i]=x1[i]-x0[i];}k=0;n2=fanshu(x1_x0,size);/*求差向量的无穷范数*/计算数值方法实验报告11while((n2=eps)&&(kM))/*迭代计算*/{for(i=0;isize;i++)x0[i]=x1[i];for(i=0;isize;i++){t=0;for(j=0;jsize;j++)t=t+b[i][j]*x0[j];x1[i]=t+g[i];x1_x0[i]=x1[i]-x0[i];}n2=fanshu(x1_x0,size);/*求差向量的无穷范数*/k++;/*k用于记录累加的次数*/}for(i=0;isize;i++)coutsetprecision(7)x[i]=x1[i]endl;cout迭代了k次endl;}intmain(){double**s,*a,eps;intsize,m,l;cout输入精度:endl;cin

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

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

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

×
保存成功