您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 《计算机数值方法B》实验指导书
《计算机数值方法》实验指导书计算机科学与技术与学院计算机科学与技术系目录实验一方程求根.......................................................1实验二线性方程组的直接解法...........................................3实验三线性方程组的迭代解法...........................................8实验四代数插值.......................................................9-1-实验一方程求根【目的与要求】1.了解方程求根的基本方法、基本原理、误差估计;2.能够按照工程实际要求,选择适当的算法;3.通过编写程序,进行算法设计和数值求解。【实验内容】1.熟悉使用二分法、迭代法、牛顿法、割线法等方程求根的基本方法、基本原理、误差估计的相关理论。2.选择方程求解方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5。【示例程序】增值寻根法又叫做逐步搜索法,是求解方程根的一种方法,也是初步确定方程隔根区间的一种方法。增值寻根法的基本思想是:从初值x0开始,按规定的一个初始步长h来增值:xn+1=xn+hn=0,1,2,3……同时计算f(xn+1)可能遇到三种情形:(1)f(xn+1)=0,此时,xn+1即为方程的根x*;(2)f(xn+1)*f(xn)0,说明[xn+1,xn]内无根;(3)f(xn+1)*f(xn)0,说明[xn+1,xn]内有根;搜索过程,可从a开始,也可从b开始,这时应取更小的步长h,直到有根区间的长度|xn+1-xn|e。(e为所要求的精度),此时f(xn)或f(xn+1)就可近似认为是零,xn或xn+1就是满足精度的方程的近似根。基于增值寻根法,设计程序如下:#includeiostream.hdoublefun(doublex){doubley=x*x;-2-returny*x+4*y-10;}voidmain(void){doublex0=-4,x;doubleh=1;doublestep=0;x=x0;while(h0.000001){cout-------h=h------endl;while(true){step++;if(fun(x)==0){coutx=xendl;h=0;break;}elseif(fun(x)*fun(x+h)0){x+=h;continue;}elseif(fun(x)*fun(x+h)0){coutx1=xendl;coutx2=(x+h)endl;break;}}h=h/10;}coutstep=stependl;}-3-实验二线性方程组的直接解法【目的与要求】1.了解Gauss消元法、LU分解法、追赶法等线性方程组直接求解的基本方法、基本原理;2.能够按照工程实际要求,选择适当的算法;3.通过编写程序,进行算法设计和数值求解。【实验内容】合理利用主元素消元法、LU分解法、追赶法求解下列方程组:①13814142210321321xxx②2178.4617.5911212592.1121130.6291.51314.59103.0432115xxxx③3772201161263841027851244321xxxx④55572112112112121nnxxxx(n=5,10,100,…)【示例程序】高斯消元法的基本思想是将原有线性方程组化为与之等价的三角形方程组,这个过程也称为消元过程,再通回代过程进行求解。消元过程使用公式为:)1()1(kkkkikikaal-4-;1,,2,1;,,2,11,,2,1)1()1()(nkkjnkkinkalaakijikkijkij回代过程使用公式如下:1,2,,2,1)1(1)1()1(1)1()1(1nnkaxaaxaaxkkknkjjkkjkknknnnnnnn首先,设定数据文件Gaussdata.txt中的数据为要求解的线性方程组数据,如下:322334771-245-7其中的3表示三阶线性方程组,下面是三行四列的系数矩阵。编写函数displayA()以显示系数矩阵及其的运算中的变化如下:voiddisplayA(){printf(\n);for(intj=1;j=n;j++){for(inti=1;i=n+1;i++)printf(%lf,a[j][i]);printf(\n);}}定义全局变量如下:doublea[15][16],a0[15][16];//a和a0用以记录方程组系数,//其中:a为本次运算的结果,a0为上次运算的结果doublel[15],tmp;//l用做消元过程使用系数l的计算和存储,tmp为零时变量intn;//n为线性方程组阶数-5-完整的程序如下:#includestdafx.h#includestdio.hdoublea[15][16],a0[15][16];doublel[15],tmp;intn;voiddisplayA(){printf(\n);for(intj=1;j=n;j++){for(inti=1;i=n+1;i++)printf(%lf,a[j][i]);printf(\n);}}voidmain(){FILE*f;inti,j,k;f=fopen(Gaussdata.txt,r);fscanf(f,%d,&n);for(i=1;i=n;i++){for(j=1;j=n+1;j++){fscanf(f,%lf,&a[i][j]);a0[i][j]=a[i][j];}-6-}displayA();fclose(f);//消元过程k=1;do{for(i=k+1;i=n;i++){l[i]=a0[i][k]/a0[k][k];printf(l[%i][%i]=%lf,i,k,l[i]);for(j=k+1;j=n+1;j++){a[i][j]=a0[i][j]-l[i]*a0[k][j];}displayA();}k++;if(k==n)break;for(j=1;j=n;j++){for(i=1;i=n+1;i++)a0[j][i]=a[j][i];}}while(1);//回代过程l[n]=a[n][n+1]/a[n][n];for(k=n-1;k=1;k--){tmp=0;-7-for(j=k+1;j=n;j++)tmp+=a[k][j]*l[j];l[k]=(a[k][n+1]-tmp)/a[k][k];}for(i=1;i=n;i++)printf(x[%i]=%lf\n,i,l[i]);}运行结果如下:2.0000002.0000003.0000003.0000004.0000007.0000007.0000001.000000-2.0000004.0000005.000000-7.000000l[2][1]=2.0000002.0000002.0000003.0000003.0000000.0000003.0000001.000000-5.000000-2.0000004.0000005.000000-7.000000l[3][1]=-1.0000002.0000002.0000003.0000003.0000000.0000003.0000001.000000-5.0000000.0000006.0000008.000000-4.000000l[3][2]=2.0000002.0000002.0000003.0000003.0000000.0000003.0000001.000000-5.0000000.0000000.0000006.0000006.000000x[1]=2.000000x[2]=-2.000000x[3]=1.000000-8-实验三线性方程组的迭代解法【目的与要求】1.了解雅可比迭代法、高斯-赛德尔迭代法等线性方程组迭代求解的基本方法、基本原理;2.能够按照工程实际要求,选择适当的算法;3.通过编写程序,进行算法设计和数值求解。【实验内容】使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。2.453.82102.7210321321321xxxxxxxxx【内容提示】雅可比迭代法的公式如下:,2,1,0,,2,1)(11)()1(knixabaxnijjkjjiiiiki高斯-赛德尔迭代法的公式如下:nixaxabaxijnijkjijkjijiiiki,2,1][1111)()1()1(-9-实验四代数插值【目的与要求】1.了解拉格朗日插值法或牛顿插值法的基本方法、基本原理;2.通过编写程序,进行算法设计和数值求解。【实验内容】使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。x0.400.550.650.800.901.05f(x)0.410750.578150.696750.888111.026521.25386【内容提示】拉格朗日基函数为:nixxxxxxxxxxxxxxxxxxxxxlniiiiiiiniii,,1,0)())(())(()())(())(()(11101110拉格朗日插值多项式为:niiinnnxlyxlyxlyxlyxL01100)()()()()(提醒:每个实验结束后,应整理出实验报告,实验报告模版到学校教务处网站下载。
本文标题:《计算机数值方法B》实验指导书
链接地址:https://www.777doc.com/doc-2818223 .html