数值方法实验报告

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

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

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

资源描述

1/34本科实验报告课程名称:数值计算方法实验项目:实验一二三四实验地点:实验楼110专业班级:物联网1601学号:2016002105学生姓名:俞梦真指导教师:田华2018年06月28日2/34实验名称:实验一方程求根实验时间:18年5月31日实验目的和要求:1.了解方程求根的基本方法、基本原理、误差估计;2.能够按照工程实际要求,选择适当的算法;3.通过编写程序,进行算法设计和数值求解。实验内容和原理:1.熟悉使用二分法、迭代法、牛顿法、割线法等方程求根的基本方法、基本原理、误差估计的相关理论。2.选择方程求解方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5。主要仪器设备:笔记本一台上机调试修改源程序:1、二分#includeiostream#includecstdiousingnamespacestd;doubleans;constdoublee=0.5*1e-5;//0.5*1e-5doublef(doublex){returnx*x*x+4*x*x-10;//returnx*x-x-1;}doublef1(doublex){return3*x*x+8*x;}voider_f(doublel,doubler){doubleleft=f(l);doubleright=f(r);doublemid;intflag1=left0?1:0;intflag2=right0?1:0;doublem=(l+r)/2;intcnt=1;while((r-m)e){3/34cnt++;//coutlrmendl;mid=f(m);printf(L=%.5fR=%.5fM=%.5fF()=%.5fe=%.5f\t\n,l,r,m,mid,r-m);intflag3=mid0?1:0;if(flag3==flag1){l=m;}else{r=m;}m=(l+r)/2;}printf(L=%.6fR=%.6fM=%.6fF()=%.6fe=%.6f\t\n,l,r,m,mid,r-m);printf(%.6lf%d\n,m,cnt);}doubleff(doublex){coutxendl;if(x0.5*1e-5)returnf(x);elsereturnx;}intmain(){er_f(1,2);//ff(1.5);return0;}2、牛顿法#includecstdio#includeiostream#includecmathusingnamespacestd;constdoublee=0.5*1e-5;//精度4/34doubleF(doublex){returnx*x*x+4*x*x-10;//returnx*x-115;}doublef(doublex){return3*x*x+8*x;//可作为迭代条件//return2*x;}voidNewdun_d(doublex,intcnt){doublex2=x-(F(x)/f(x));printf(x%d=%lfx%d=%lf\n,cnt-1,x,cnt,x2);if(fabs(x2-x)e)printf(%lf%d\n,x2,cnt);elseNewdun_d(x2,cnt+1);}intmain(){doublex;cinx;Newdun_d(x,1);}3、割线法#includecstdio#includeiostream#includecmathusingnamespacestd;//双点割线法constdoublee=0.5*1e-5;//精度doublef(doublex){returnx*x*x+4*x*x-10;//returnx*x*x-3*x-1;}voidGexian_d(doublex0,doublex1,intcnt){doublex2=x1-(f(x1)/(f(x1)-f(x0)))*(x1-x0);printf(x%d=%.6lfx%d=%.6lf\n,cnt-1,x0,cnt,x1);5/34if(fabs(x2-x1)e){printf(x%d=%.6lfx%d=%.6lf\n,cnt-1,x1,cnt,x2);printf(%.6lf%d\n,x2,cnt);}elseGexian_d(x1,x2,cnt+1);}intmain(){doublex0,x1;cinx0x1;Gexian_d(x0,x1,1);}实验结果与分析(1)二分法(2)牛顿法6/34讨论、心得(可选):本次实验的内容不是很难弄,但是也有很多地方可以继续改进,比如对原始函数的处理就可以采用输入的方法进行,这样子对程序的应用性更好。其实个人感觉是要对精度这方面要仔细。(3)割线法实验名称:实验二线性方程组的直接解法实验时间:18年6月6日实验目的和要求:1.了解Gauss消元法、LU分解法等线性方程组直接求解的基本方法、基本原理;2.通过编写程序,进行算法设计和数值求解。7/34实验内容和原理:利用高斯消元法、LU分解法分别求解下列方程组:①13814142210321321xxx③3772201161263841027851244321xxxx主要仪器设备:计算机一台上机调试修改源程序:1.高斯消元法(1)列主元素消元法//列主元素消元法#includeiostream#includealgorithm#includecstdio#includecmathusingnamespacestd;constintmaxn=100;constintinf=0x7f7f7f7f;doublea[maxn][maxn];doublex[maxn];//解向量intn;voidXiao_gauss(intcur)//不交换列{if(cur==n){coutendl;for(inti=0;in;i++){for(intj=0;j=n;j++)printf(%lf,a[i][j]);coutendl;}8/34return;}else{intid=cur;doublemax_r=0;for(inti=cur;in;i++)//找到最大值if(fabs(a[i][cur])max_r)max_r=fabs(a[i][cur]),id=i;//coutidmax_rendl;for(inti=0;i=n;i++)//两行元素调换{doubletmp=a[id][i];a[id][i]=a[cur][i];a[cur][i]=tmp;}for(inti=cur+1;in;i++)//除了本行下面的都要减{doublet=a[i][cur]/a[cur][cur];for(intj=cur;j=n;j++)//{a[i][j]=a[i][j]-a[cur][j]*t;//couta[cur][j]endl;}}Xiao_gauss(cur+1);}}voidf_x(){for(inti=n-1;i=0;i--){doublesum=0;for(intj=i+1;j=n-1;j++)sum+=a[i][j]*x[j];//coutsumendl;x[i]=(a[i][n]-sum)/a[i][i];}for(inti=0;in;i++)coutxi+1=x[i]endl;}intmain(){cinn;9/34for(inti=0;in;i++)for(intj=0;j=n;j++)cina[i][j];/*for(intj=0;jn;j++)a[n+1][j]=j;a[n+1][n]=0.0;*///列消元法。Xiao_gauss(0);f_x();return0;}/*31231401282411330.0012.0003.0001.000-1.0003.7124.6232.000-2.0001.0725.6433.000*/(2)完全主元素消元法#includeiostream#includealgorithm#includecstdio#includecmathusingnamespacestd;constintmaxn=100;constintinf=0x7f7f7f7f;doublea[maxn][maxn];doublex[maxn];//解向量intn;voidshow(){coutendl;for(inti=0;i=n;i++){for(intj=0;j=n;j++)printf(%lf,a[i][j]);coutendl;10/34}return;}voidXiao_gauss(intcur)//完全{if(cur==n){show();return;}else{intid_i=cur;intid_j=cur;doublemax_r=0;for(inti=cur;in;i++)//找到所有最大值for(intj=cur;jn;j++)if(fabs(a[i][j])max_r){max_r=fabs(a[i][cur]);id_i=i;id_j=j;}//coutidmax_rendl;for(inti=0;i=n;i++)//行元素调换{doubletmp=a[id_i][i];a[id_i][i]=a[cur][i];a[cur][i]=tmp;}for(inti=0;i=n+1;i++)//列元素交换{doubletmp=a[i][id_j];a[i][id_j]=a[i][cur];a[i][cur]=tmp;}//coutwanquanendl;//show();for(inti=cur+1;in;i++)//除了本行下面的都要减{doublet=a[i][cur]/a[cur][cur];for(intj=cur;j=n;j++)//{a[i][j]=a[i][j]-a[cur][j]*t;11/34//a[i][j]=(a[cur][cur]*a[i][j]-a[cur][j]*a[i][cur]);//a[i][j]/=a[cur][cur];//couta[i][j]endl;}}//coutxiaoyuanendl;show();Xiao_gauss(cur+1);}}voidf_x(){for(inti=n-1;i=0;i--){doublesum=0;for(intj=i+1;j=n-1;j++)sum+=a[i][j]*x[(int)a[n][j]];//coutsumendl;//coutidendl;x[(int)a[n][i]]=(a[i][n]-sum)/a[i][i];}for(inti=1;i=n;i++)coutxi=x[i]endl;}intmain(){cinn;for(inti=0;in;i++)for(intj=0;j=n;j++)cina[i][j];//赋予n+1为x代表for(intj=0;jn;j++)a[n][j]=j+1;a[n][n]=0;//列消元法。Xiao_gauss(0);f_x();return0;}/*312/341231401282411330.0012.0003.0001.000-1.0003.7124.6232.000-2.0001.0725.6433.000*/(3)高斯若尔当消元法//列主元素消元法#includeiostream#includealgorithm#includecstdio#includecmath

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

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

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

×
保存成功