您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数值分析上机作业最强版
数值分析上机作业姓名:唐皓学号:142460专业:道路与铁道工程院系:交通学院授课教师:吴宏伟日期:2015年1月数值分析上机作业习题1-17唐皓1424601习题一1题目17.(上机题)舍入误差与有效数设2211NNjSj,其精确值为1311221NN。(1)编制按从大到小的顺序22211121311NSN,计算NS的通用程序;(2)编制按从小到大的顺序2221111(1)121NSNN,计算NS的通用程序;(3)按两种顺序分别计算210S,410S,610S,并指出有效位数。(编制程序时用单精度);(4)通过本上机题你明白了什么?2通用程序代码2.1按从小到大的顺序计算NSvoidAscendSum(unsignedlongintN)//计算从大到小的总和{for(unsignedlongintj=2;j=N;j++)ascendSum+=(float)1.0/(j*j-1);coutSumFrom1toN(Ascend)is:ascendSumendl;Error(ascendSum);Delimiter();}2.2按从大到小的顺序计算NSvoidDescendSum(unsignedlongintN)//计算从小到大的总和{for(unsignedlongintj=N;j=2;j--)descendSum+=(float)1.0/(j*j-1);coutSumFromNto1(Descend)is:descendSumendl;Error(descendSum);Delimiter();}数值分析上机作业习题1-17唐皓14246023计算结果展示图1N=100时的计算结果图2N=10000时的计算结果图3N=1000000时的计算结果数值分析上机作业习题1-17唐皓1424603表1-1计算结果汇总NS精确值按从小到大按从大到小NS值有效位数NS值有效位数210S0.74004948140.7400494814100.7400495416410S0.74989998340.749852120940.749899983410610S0.74999898670.75185602920.752992510824计算结果分析(1)如果采用单精度数据结构进行计算,则相较于双精度的数据结果,由于数据存储字长的限制导致计算机存在较大的舍入误差,因此本程序采用的是双精度数据存储方式。(2)由计算结果可知,正序计算和逆序计算的精度是不稳定的。由计算结果可以发现,当N=100时,正序计算(1-N)的精度较高;当N=10000时,逆序计算(N-1)的精度较高;当N=1000000时,正序计算和逆序计算的精度一样。当然,和其他同学做出来的结果对比,结论并不一致。我个人分析这是因为电脑的硬件、软件(位数)不同等原因导致的。但总体而言,在N较小时,正序计算精度高于逆序计算的精度。当N较大时,正序和逆序计算的精度接近。(3)由于计算机的实际计算过程是一种舍入机制,故对于我们计算所采用的加法交换律是不成立的。计算机中若干数相加时,先要进行对阶操作,即将两数的阶数统一为绝对值较大的数的阶数。这样一来将导致绝对值较小的数的有效数字可能会大量损失,增大舍入误差,即所谓的“大数吃小数”现象。为了避免这种现象的出现,在进行加减法的时候应该先将绝对值较小的数相加,再与绝对值较大的数相加这样按阶逐步递增的相加。5完整代码#includeiostream#includeiomanip#includemath.husingnamespacestd;floataccurateSum=0,ascendSum=0,descendSum=0;voidDelimiter()//输出一系列星号以间隔{for(inti=1;i=50;i++)cout*;数值分析上机作业习题1-17唐皓1424604coutendl;}voidError(floatSum)//计算绝对误差{floaterror;error=fabs(Sum-accurateSum);intflag;for(flag=0;flag10;flag++){error=error*10;if(error0.5)break;}coutThereareflagValidnumbers.\n;}voidAccurateSum(unsignedlongintN)//计算精确值{accurateSum=0.5*(1.5-(float)1/N-(float)1/(N+1));coutAccuratesumis:setprecision(10)accurateSumendl;Delimiter();}voidAscendSum(unsignedlongintN)//计算从大到小的总和{for(unsignedlongintj=2;j=N;j++)ascendSum+=(float)1.0/(j*j-1);coutSumFrom1toN(Ascend)is:ascendSumendl;Error(ascendSum);Delimiter();}voidDescendSum(unsignedlongintN)//计算从小到大的总和{for(unsignedlongintj=N;j=2;j--)descendSum+=(float)1.0/(j*j-1);coutSumFromNto1(Descend)is:descendSumendl;Error(descendSum);Delimiter();}voidmain()//主程序{数值分析上机作业习题1-17唐皓1424605longintN;while(1){coutInputanintegerN(N=2):;cinN;if(N2)coutInvalidinput,Pleasetryitagain!\n;elsebreak;}AccurateSum(N);AscendSum(N);DescendSum(N);}数值分析上机作业习题2-20唐皓1424606习题二1题目20.(上机题)Newton迭代法(1)给定初值0x及容许误差,编制Newton法解方程()0fx根的通用程序。(2)给定方程3()/30fxxx,易知其有三个根13x,20x,33x。①由Newton方法的局部收敛性可知存在0,当0(,)x时,Newton迭代序列收敛于根2x。试确定尽可能大的。②试取若干初始值,观察当0(,1)x,(1,),(,),(,1),(1,)时Newton序列是否收敛以及收敛于哪一个根。(3)通过本上机题,你明白了什么?2通用程序代码2.1Newton法解方程通用程序doubleNewtonIteration(doublex0,doubleeps)//Newton迭代法求解子程序{doublex1,x2;x1=x0;x2=x1-f(x1)/df(x1);while(fabs(x1-x2)=eps){x1=x2;x2=x1-f(x1)/df(x1);}returnx1;}2.2求解尽可能大𝛅doubleMaximalDeviateRange()//求解尽可能大的范围{doublestep=1e-5;//steplengthintcnt=1;//stepcountdoubledelta;数值分析上机作业习题2-20唐皓1424607cout**********************NewtonIteration(eps=1e*5)**********************endl;while(fabs(NewtonIteration(step*cnt,eps))=eps){cnt++;}delta=step*cnt;coutThemaximaldeviaterangeforxconvergingtox2*=0is(-delta,delta)endl;returndelta;}3计算结果展示图2-4计算结果在取步长为10−5的情况下,允许误差eps=10−5时有x轴上的一个小区间(−0.7746,0.7746)为Newton迭代序列在𝑥2∗=0处的尽可能大的局部收敛区间。当𝑥0=(−∞,1),(−1,−𝛿),(−𝛿,𝛿),(𝛿,1),(1,∞)时牛顿迭代序列分别收敛于−1.732051,1.732051,0,−1.732051,1.732051。4计算结果分析(1)通过本次上机编程并通过多次的调试,可以发现运行结果很好的验证了教材上牛顿迭代法具有局部收敛性这一重要性质。(2)选择不同的初值区间,迭代序列会收敛于不同的根。所以为了收敛到需要的计算结果,就需要选择合适的牛顿迭代法大范围收敛区间。(3)产生上述结果的原因是所选取的部分区间不满足大范围收敛的条件,导致并没有收敛到理想的结果。5完整代码#includeiostream#includeiomanip#includemath.h数值分析上机作业习题2-20唐皓1424608usingnamespacestd;doubleeps=1e-5;doublef(doublex)//函数f(x)的录入{return(x*x*x)/3-x;}doubledf(doublex)//函数f(x)的导数{return(x*x)-1;}doubleNewtonIteration(doublex0,doubleeps)//Newton迭代法求解子程序{doublex1,x2;x1=x0;x2=x1-f(x1)/df(x1);while(fabs(x1-x2)=eps){x1=x2;x2=x1-f(x1)/df(x1);}returnx1;}doubleMaximalDeviateRange()//求解尽可能大的范围{doublestep=1e-5;//steplengthintcnt=1;//stepcountdoubledelta;cout**********************NewtonIteration(eps=1e*5)**********************endl;while(fabs(NewtonIteration(step*cnt,eps))=eps){cnt++;}delta=step*cnt;coutThemaximaldeviaterangeforxconvergingtox2*=0is(-delta,delta)endl;returndelta;}voidCalculate(doublex0)//计算Newton迭代法和相应的子程序数值分析上机作业习题2-20唐皓1424609{printf(Ifx0=%11.4f,xconvergestothevalueof:%8.6f\n,x0,NewtonIteration(x0,eps));}voidmain()//主程序{doubledelta=MaximalDeviateRange();Calculate(-10000);Calculate((-1-delta)/2);Calculate(-delta/2);Calculate(delta/2);Calculate((1+delta)/2);Calculate(10000);}数值分析上机作业习题3-39唐皓14246010习题三1题目39.(上机题)列主元Guass消去法对于某电路的分析,归结为求解线性方程组RI=V。其中3113000100001335901100000931100000000107930000900030577050000074730000000030410000005002720009000229R
本文标题:数值分析上机作业最强版
链接地址:https://www.777doc.com/doc-2387458 .html