数值分析实验一误差的影响.doc
【精品文档】如有侵权,请联系网站删除,仅供学习与交流数值分析实验一误差的影响.精品文档.内江师范学院数 值 分 析实 验 报 告 册编制 张莉 审定 牟廉明专业: 班级: 级 班学号: 姓名: 数学与信息科学学院2013年9月说 明一、学生在做实验之前必须要准备实验,主要包括预习与本次实验相关的理论知识,熟练与本次实验相关的软件操作,收集整理相关的实验参考资料,要求学生在做实验时能带上充足的参考资料;若准备不充分,则学生不得参加本次实验,不得书写实验报告;二、要求学生要认真做实验,主要是指不得迟到、早退和旷课,在做实验过程中要严格遵守实验室规章制度,认真完成实验内容,极积主动地向实验教师提问等; 三、各个实验按照学生水平分别设置了A、B、C、D四个等级,其中对应的难度系数为1、0.8、0.7、0.6,也可根据实际完成情况制定相应地的难度系数,但总体保证难度排序为A级难度最大,B级次之,C级较易,D级最简单。四、学生可以根据自己对各个实验涉及到的知识点掌握的程度自由选取A、B、C、D等级的实验题目。五、学生要认真工整地书写实验报告,实验报告的内容要紧扣实验的要求和目的,不得抄袭他人的实验报告;四、根据实验准备、实验态度、实验报告的书写、实验报告的内容进行综合评定,并给出实验成绩评定分。实验名称: 实验一 误差的影响 指导教师: 吴开腾 张莉 实验时数: 4 实验设备:安装了Matlab、C+、VF软件的计算机 实验日期:2013年 9月 25日 实验地点: 第五教学楼北902 实验目的:掌握舍入误差的概念,理解数值稳定性。实验准备:1. 在开始本实验之前,请回顾教科书的相关内容;2. 需要一台准备安装Windows XP Professional操作系统和装有数学软件的计算机。实验内容及要求A题 已知一元二次方程的两个实根,试编写当时求两个实根的算法程序,并用该程序计算二次方程的两个根,使它至少具有4位有效数字。B题 舍入误差在数值计算中是一个很重要的概念,在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果,因此,选取数值稳定性的算法,在数值计算中是十分重要的。对计算定积分分别采用下面两个递推公式进行计算,并比较实验结果分析出哪个算法是稳定,并给出具体原因。递推公式(1);递推公式(2)。C题 序列满足递推关系,若取作近似计算,问计算到时误差有多大?这个计算过程稳定吗?D题 用下列两种方法计算的近似值,问哪种方法能提供较好的近似值?(1); (2)。说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表等内容。实验过程:A题实验过程一、 问题分析本文是针对一元二次方程的解的问题,在本问中的是根据判断方程的关系来进行求解。满足时继续运用一元二次方程的求根公式时会出现大数吃小数的情况,这样就会有一个解就是错误的,但是其中有一个数是正确的。这样在解决此问题时就需要找到那个正确的解,然后运用维达定理求得另一个解。这样就可以避免大数吃小数的情况。二、 问题求解方法此问题中的求解方法,就是找到一个正确的解,然后运用维达定理得到另一个解。寻找正确的解的方法:根据系数的正负可以判断出用求根公式得到的正确解。、,正确的解为、,正确的解为在用以上方法求得正确的解后,运用维达定理求解得另一个解。三、 求解流程和代码输入一元二次方程系数矩阵符号函数?根据得一个正确的解 得运算结束求解流程示意图如下:四、 结果及解释根据以上的程序输入:1 -56 1,可以得到其误差为0.173125402902485*e-014,可以得到其精度在有效数字为4位的范围内,则可知此算法是有效的。其所给的方程的解用此算法得到的结果为0.0178628407335566、55.9821371592664。B题的实验过程一、实验中问题的重述舍入误差在数值计算中是一个很重要的概念,在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果,因此,选取数值稳定性的算法,在数值计算中是十分重要的。对定积分分别采用递推公式和递推公式进行计算,并比较实验结果分析出哪个算法是稳定,给出原因。二、对实验的分析2.1对软件的选择对于此题来说,利用Matlab10.0软件编程计算。2.2对算法是否稳定的分析首先,计算两个算法的相对误差值。通过比较相对误差的大小,确定两算法的优劣。然后,通过作图观察其偏差的波动幅度。观察当n分别取1至20的整数时,误差是否稳定在0的附近,来判断算法一、二的稳定性。2.3对结果呈现的分析通过表格,再现出当n分别取1至20的整数时,各个理论值,各个实际值一,各个实际值二,各个实际值一与理论值的偏差以及各个实际值二与理论值的偏差。通过作图,再现出偏差的走势。三、实验求解过程(程序见附录)首先,利用int函数,求出当n分别取1至20的整数时该定积分的理论值。然后,利用递推公式一的算法,计算出当n分别取1至20的整数时的实际值一。并利用plot函数,绘制出结果一的散点图。其次,利用递推公式二的算法,计算出当n分别取1至20的整数时的实际值二。并利用plot函数,绘制出结果二的散点图。再次,利用公式(其中i=1、2表示利用递推公式一、二的算法),计算出利用两个算法的相对误差值。最后,画出当n分别取1至20的整数时,利用递推公式一、二得到的结果与定积分理论值的差值的散点图。四、实验求解结果利用Matlab10.0软件编程计算。于是得到以下结果:表1 求解结果表n的取值利用定积分得到理论值利用公式一得到的实际值一利用公式二得到的实际值二公式一与积分的对应差值公式二与积分的对应差值10.3678790.3678790.3678790020.2642410.2642410.2642410030.2072770.2072770.2072778.32667E-172.77556E-1740.1708930.1708930.170893-3.05311E-16-2.77556E-1750.1455330.1455330.1455331.4988E-152.77556E-1760.1268020.1268020.126802-8.9373E-15070.1123840.1123840.1123846.26443E-14080.1009320.1009320.100932-5.01127E-13090.0916120.0916120.0916124.51014E-120100.0838770.0838770.083877-4.51015E-110110.0773520.0773520.0773524.96116E-100120.0717730.0717730.071773-5.95339E-091.38778E-17130.0669480.0669480.0669487.73941E-080140.0627320.0627310.062732-1.08352E-060150.0590180.0590340.0590181.62528E-050160.0557190.0554590.055719-0.0002600440170.0527710.0571920.0527710.0044207516.93889E-18180.05012-0.029450.05012-0.0795735260190.0477231.559620.0477231.5118969880200.045545-30.19240.045545-30.237939770为了直观的观察出两种算法的稳定性,利用Matlab10.0软件绘出以下结果散点图:图1 递推公式一与定积分的结果散点图图2 递推公式二与定积分的结果散点图并且得到分别利用两种递推公式计算时,递推公式一、二与定积分理论值的结果相对误差值见下表2,递推公式一、二与定积分理论值偏差的走势图见下图3:表2 误差值表利用递推公式一计算时产生的相对误差值利用递推公式二计算时产生的相对误差值 4.4078e+0054.9304e-032图3 利用递推公式时的误差走势图五、实验结果解释通过表1可以看出:利用递推公式一时,在n>13时,其结果与定积分理论值的偏差就越来越大。而利用递推公式二时,其结果与定积分理论值都几乎相同。通过图1、2可以明显看出:利用递推公式一时,在n取18、19、20时,其结果与定积分理论值的偏差很大。而利用递推公式二时,其结果与定积分理论值都几乎相同。通过表2可以看出:4.4078e+005(利用递推公式一计算时产生的相对误差值)>4.9304e-032(利用递推公式二计算时产生的相对误差值),因此算法二更优。通过图3可以看出:利用递推公式一计算时不稳定。利用递推公式二计算时稳定。因此,得到第二个算法(递推公式二)是稳定的。C题的实验过程一、问题分析 该问题主要考察对于一个递推公式,将一个近似值作为其实际值代入此公式进行近似计算。欲求得其近似计算所得的近似值与其实际值之间的误差值,可将近似值与实际值都分别代入公式求得与,进而运用绝对误差公式求得其绝对误差值。对该计算过程是否稳定的分析,则需考虑该近似计算的绝对误差限。用计算所得的绝对误差值与绝对误差限进行比较从而得到该计算过程是否稳定的结论。二、求解方法对于序列所满足的递推关系利用Matlab软件采用迭代的方法将近似值代入求得序列,同理代入实际值迭代计算得出实际值所组成的序列。利用绝对误差公式计算出与之间的相对误差值。通过对该近似计算的分析确定绝对误差限,通过绝对误差值与绝对误差限的比较,得出该计算过程是否稳定的结论。在比较过程中,若绝对误差值绝对误差限,则该计算过程稳定;若绝对误差值>绝对误差限,则该计算过程不稳定。三、求解步骤步骤1:确定绝对误差限绝对误差限公式:(其中:m为近似值科学表示法中的10的指数;n为有效数字位数)因为,且有效数字位数n=3。代入公式得:绝对误差限=0.005。步骤二:确定绝对误差(1)求解序列及通过Matlab中的迭代算法,编写出该递推关系的求解程序(见附件中的Matlab程序);将实际值作为程序中的初值代入程序进行计算,既可得到序列及则:(2)求解序列序列及将实际值作为程序中的初值代入程序进行计算,既可得到序列及,则:(3)求解误差值由程序的运算结果即可输出该该算法计算到第十项时所存在绝对误差为:将程序所得结果整理得到以下表格:表3 结果呈现表函数y值实际值序列近似值序列绝对误差y01.4142135621.4100000000.004213562y113.1421356213.100000000.042135624y2130.4213562130.00000000.421356237y31303.2135621299.0000004.213562373y413031.1356212989.0000042.13562373y5130310.3562129889.0000421.3562373y61303102.5621298889.0004213.562373y713031024.6212988889.0042135.62373y8130310245.2129888889.0421356.2373y9130310245112988888894213562.373y10130310245131298888888942135623.73四、求解结果解释通过以上结果,确定该算法的稳定性由步骤二所求解得到的该算法计算到第十项时所存在绝对误差,由42135623.73>>0.005,即绝对误差超出误差限,所以该算法不稳定。D题的实验过程一、 问题分析针对该问题中是研究题中两种方法的误差,运用题中方法进行计算分析.二、 求解过程运用MATLAB编程(for循环)实现两种方法的计算,与其标准值进行比较.三、 求解结果解释计算编程得到以下数据:方法误差272.1665-0.0329由以上表格中的数据可以看出:第二种方法更接近的准确值.附 录A题的求解程序clcclear% 一元方程中的b2>>4ac的方程的求解方法Coefficient = input('请输入一元二次方程所对应的系数a b cn');a = Coefficient(1);b = Coefficient(2);c = Coefficient(3);d = b2-4*a*c;if b>0 e = 1;else e = -1;endif a = 0 fprintf('输入的不是一个一元二次方程')else if d<0 fprintf('输入的方程没有实数解') else Solu1(1) = (-b+e*(sqrt(b*b-4*a*c)/(2*a); Solu1(2) = -b/a-Solu1(1); Solu1 = sort(Solu1')' %将求解的结果进行排序 syms x y = a*x*x+b*x+c; format long xx = solve(y,x); xx = double(xx)' xx = sort(xx')' %将求解的结果进行排序 cha = abs(Solu1-xx); %误差的求解 fprintf('求解的误差为n') %误差的输出 cha endend B题的求解程序clcclearsyms x; %定义符号变量xy0 = zeros(1,20);y1 = zeros(1,20);y2 = zeros(1,20);y10 = zeros(1,20);y20 = zeros(1,20); %创建两个1行20列的零向量for i = 1:20 y0(i) = int(xi*exp(x-1),0,1); %定积分函数的理论值 i = i+1;endy1(1) = y0(1);for i = 2:20 y1(i) = 1-i*y1(i-1); %利用递推公式一得到的实际值一 i = i+1;endy2(20) = y0(20);for j = 1:19 k = 21-j; y2(k-1) = (1-y2(k)/k; %利用递推公式二得到的实际值二 j = j+1;endy10 = y1-y0;y20 = y2-y0;for i = 1:20; wucha10 = sum( y1(i)-y0(i)/y0(i)+eps)2; %利用递推公式一计算时产生的相对误差 wucha20 = sum( y2(i)-y0(i)/y0(i)+eps)2; %利用递推公式二计算时产生的相对误差endfigure(1) %图象一n = 1:20;xlabel('n的取值')plot(n,y0,'-r');hold onplot(n,y1,'*b');title('利用递推公式一计算与定积分值的结果散点图')figure (2) %图象二plot(n,y0,'-r');hold onplot(n,y2,'*g');title('利用递推公式二计算与定积分值的结果散点图')figure (3) %图象三plot(n,y10,'*r')hold onplot(n,y20,'-g')title('利用递推公式计算时的误差走势图')C题的求解程序function E = Stability(x)% 递推函数的稳定性的检验% 输入:x:迭代的次数% 输出:E:误差的百分比clc y1(1) = sqrt(2);for i = 2:(x+1) y1(i) = 10*y1(i-1) - 1;end% 准确值的计算y2(1) = 1.41;for i = 2:(x+1) y2(i) = 10*y2(i-1) - 1;end% 运用近似值的计算方法计算Error = abs(y1 - y2)./y1;E = Error(x+1);clcclear% 主程序(C)x = 10; %迭代的次数E = Stability(x);fprintf('计算的误差为:')ED题的求解程序clcclear% D题中的第一种方法x1 = 0;for i = 0:9 x11 = (-1)i)*(5i)/factorial(i); x1 = x1+x11;end% D题中的第二种方法x2 = 0;for i = 0:9 x21 = (5i)/factorial(i); x2 = x2+x21;endx2 = x2(-1);e1 = (exp(-5)-x1)/exp(-5)e2 = (exp(-5)-x2)/exp(-5)% e1,e2分别是方法一,二的误差百分比实验总结(由学生填写):