四、实验求解结果
利用Matlab10.0软件编程计算。于是得到以下结果:
表1 求解结果表
n的取利用定积分得到利用公式一得到的利用公式二得到的公式一与积分的公式二与积分的值 理论值 实际值一 实际值二 对应差值 对应差值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0.367879 0.264241 0.207277 0.170893 0.145533 0.126802 0.112384 0.100932 0.091612 0.083877 0.077352 0.071773 0.066948 0.062732 0.059018 0.055719 0.052771 0.05012 0.047723 0.045545
0.367879 0.264241 0.207277 0.170893 0.145533 0.126802 0.112384 0.100932 0.091612 0.083877 0.077352 0.071773 0.066948 0.062731 0.059034 0.055459 0.057192 -0.02945 1.55962 -30.1924
0.367879 0.264241 0.207277 0.170893 0.145533 0.126802 0.112384 0.100932 0.091612 0.083877 0.077352 0.071773 0.066948 0.062732 0.059018 0.055719 0.052771 0.05012 0.047723 0.045545
0 0 8.32667E-17 -3.05311E-16 1.4988E-15 -8.9373E-15 6.26443E-14 -5.01127E-13 4.51014E-12 -4.51015E-11 4.96116E-10 -5.95339E-09 7.73941E-08 -1.08352E-06 1.62528E-05 -0.000260044 0.004420751 -0.079573526 1.511896988 -30.23793977
0 0 2.77556E-17 -2.77556E-17 2.77556E-17
0 0 0 0 0 0 1.38778E-17
0 0 0 0 6.93889E-18
0 0 0
为了直观的观察出两种算法的稳定性,利用Matlab10.0软件绘出以下结果散点图: 利用递推公式一计算与定积分值的结果散点图50-5-10-15-20-25-30-35 0定积分公式一24681012n的取值14161820 利用递推公式二计算与定积分值的结果散点图0.40.350.30.250.20.150.10.050 0定积分公式二24681012n的取值14161820 图1 递推公式一与定积分的结果散点图 图2 递推公式二与定积分的结果散点图 4
并且得到分别利用两种递推公式计算时,递推公式一、二与定积分理论值的结果相对误差值见下表2,递推公式一、二与定积分理论值偏差的走势图见下图3:
表2 误差值表 利用递推公式一计算时产生的相对误差值 4.4078e+005 50-5-10-15-20-25-30-35 0公式一公式二246810n的取值1214161820利用递推公式二计算时产生的相对误差值 4.9304e-032 图3 利用递推公式时的误差走势图
五、实验结果解释
通过表1可以看出:利用递推公式一时,在n>13时,其结果与定积分理论值的偏差就越来越大。而利用递推公式二时,其结果与定积分理论值都几乎相同。
通过图1、2可以明显看出:利用递推公式一时,在n取18、19、20时,其结果与定积分理论值的偏差很大。而利用递推公式二时,其结果与定积分理论值都几乎相同。
通过表2可以看出:4.4078e+005(利用递推公式一计算时产生的相对误差值)>4.9304e-032(利用递推公式二计算时产生的相对误差值),因此算法二更优。
通过图3可以看出:利用递推公式一计算时不稳定。利用递推公式二计算时稳定。 因此,得到第二个算法(递推公式二)是稳定的。
C题的实验过程
一、问题分析
该问题主要考察对于一个递推公式,将一个近似值作为其实际值代入此公式进行近似计算。欲求得其近似计算所得的近似值y10与其实际值y10之间的误差值,可将近似值与实际值都分别代入公式求得y10与y10,进而运用绝对误差公式求得其绝对误差值。
对该计算过程是否稳定的分析,则需考虑该近似计算的绝对误差限。用计算所得的绝对误差值与绝对
5
**
误差限进行比较从而得到该计算过程是否稳定的结论。
二、求解方法
对于序列?yn?所满足的递推关系
??y0?2 ???yn?10yn?1?1(n?1,2,)利用Matlab软件采用迭代的方法将近似值y0?1.41代入求得序列yn,同理代入实际值y0**??*?2迭
代计算得出实际值所组成的序列?yn?。利用绝对误差公式计算出y10与y10之间的相对误差值。通过对该近似计算的分析确定绝对误差限,通过绝对误差值与绝对误差限的比较,得出该计算过程是否稳定的结论。 在比较过程中,若绝对误差值?绝对误差限,则该计算过程稳定;若绝对误差值>绝对误差限,则该
计算过程不稳定。
三、求解步骤
步骤1:确定绝对误差限
m?n绝对误差限公式:?x?*10(其中:m为近似值科学表示法中的10的指数;n为有效数字位数)
12因为y0?1.41?0.141*10,且有效数字位数n=3。代入公式得:绝对误差限
*1?x=0.005。
步骤二:确定绝对误差?10
(1)求解序列?yn?及y10
??y?2通过Matlab中的迭代算法,编写出该递推关系?0的求解程序(见附件中的
y?10y?1(n?1,2,)?n?1?nMatlab程序);将实际值y0?2作为程序中的初值代入程序进行计算,既可得到序列?yn?及y10则:
y10?13031024513
*(2)求解序列序列?yn?及y10
将实际值
*y0?1.41**作为程序中的初值代入程序进行计算,既可得到序列yn及y10,则:
??*y10?12988888889
(3)求解误差值
由程序的运算结果即可输出该该算法计算到第十项时所存在绝对误差10为:
??10?42135623.73
将程序所得结果整理得到以下表格:
6
表3 结果呈现表
函数y值 y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 实际值序列?yn? 1.414213562 13.14213562 130.4213562 1303.213562 13031.13562 130310.3562 1303102.562 13031024.62 130310245.2 1303102451 13031024513 *近似值序列yn ??绝对误差?10 0.004213562 0.042135624 0.421356237 4.213562373 42.13562373 421.3562373 4213.562373 42135.62373 421356.2373 4213562.373 42135623.73 1.410000000 13.10000000 130.0000000 1299.000000 12989.00000 129889.0000 1298889.000 12988889.00 129888889.0 1298888889 12988888889 四、求解结果解释
?x通过以上结果,确定该算法的稳定性由步骤二所求解得到的该算法计算到第十项时所存在绝对误差?42135623.73,由42135623.73>>0.005,即绝对误差超出误差限,所以该算法不稳定。
D题的实验过程
一、问题分析
针对该问题中是研究题中两种方法的误差,运用题中方法进行计算分析.
二、求解过程
运用MATLAB编程(for循环)实现两种方法的计算,与其标准值进行比较.
三、求解结果解释
计算编程得到以下数据:
?95i??5i5*?5*?x1 e?????x1方法 e??(?1) i!i!i?0?i?0?9i?1误差 272.1665 ?5-0.0329 由以上表格中的数据可以看出:第二种方法更接近e的准确值.
7
附 录
A题的求解程序 clc clear %% 一元方程中的b^2>>4ac的方程的求解方法 Coefficient = input('请输入一元二次方程所对应的系数a b c\\n'); a = Coefficient(1); b = Coefficient(2); c = Coefficient(3); d = b^2-4*a*c; if b>0 e = 1; else e = -1; end if 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 end end B题的求解程序 clc clear syms x; %定义符号变量x y0 = 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(x^i*exp(x-1),0,1); %定积分函数的理论值 i = i+1; end y1(1) = y0(1); for i = 2:20 y1(i) = 1-i*y1(i-1); %利用递推公式一得到的实际值一 i = i+1; end y2(20) = y0(20); 8