数值分析实验一误差的影响
内江师范学院
数 值 分 析
实 验 报 告 册
编制 张莉 审定 牟廉明
专业: 班级:级 学号: 姓名:
数学与信息科学学院
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 软件的计算机 实验日期:年月 实验地点: 第五教学楼北902 实验目的:
掌握舍入误差的概念,理解数值稳定性。
实验准备:
1. 在开始本实验之前,请回顾教科书的相关内容;
2. 需要一台准备安装Windows XP Professional操作系统和装有数学软件的计算机。
实验内容及要求
A 题 已知一元二次方程ax +bx +c
=0的两个实根x 1=,x 2=
2
试编写当b
2
4ac 时求两个实根的算法程序,并用该程序计算二次方程x 2-56x +1=0的两个根,使它
至少具有4位有效数字。
B 题 舍入误差在数值计算中是一个很重要的概念,在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果,因此,选取数值稳定性的算法,在数值计算中是十分重要的。
对n =0,1,2,
,20计算定积分
y n =⎰x n e x -1d x
1
分别采用下面两个递推公式进行计算,并比较实验结果分析出哪个算法是稳定,并给出具体原因。 递推公式(1)y n =1-ny n -1(n =1,2, 递推公式(2)y n -1=
,20) ;
,1) 。
1-y n
(n =20,19, n
⎧⎪y =C 题 序列{y
n }满足递推关系⎨0,若取y 0=≈1.41作近似计算,问计
y =10y -1(n =1, 2, ) ⎪n -1⎩
n
算到y 10时误差有多大?这个计算过程稳定吗?
D 题 用下列两种方法计算e 的近似值,问哪种方法能提供较好的近似值?
9
5i 5i -1*-5*
(1)e ≈∑(-1) 。 =x 1; (2)e ≈(∑) =x 2
i ! i ! i =0i =0
-5
9
i
-5
说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表等内容。
实验过程:
A 题实验过程
一、问题分析
本文是针对一元二次方程的解的问题,在本问中的是根据判断方程的关系来进行求解。满足
b 2
4ac 时继续运用一元二次方程的求根公式时会出现大数吃小数的情况,这样就会有一个解就是错误
的,但是其中有一个数是正确的。这样在解决此问题时就需要找到那个正确的解,然后运用维达定理求得另一个解。这样就可以避免大数吃小数的情况。
二、问题求解方法
此问题中的求解方法,就是找到一个正确的解,然后运用维达定理得到另一个解。 寻找正确的解的方法:根据系数b 的正负可以判断出用求根公式得到的正确解。
-b +1、b >
0,正确的解为x =○ 1
2a -b 2、b ≤
0,正确的解为x =○ 2
2a
在用以上方法求得正确的解后,运用维达定理求解得另一个解。
三、求解流程和代码
求解流程示意图如下:
四、结果及解释
根据以上的程序输入:[1 -56 1],可以得到其误差为0.[**************]*e-014,可以得到其精度在有
效数字为4位的范围内,则可知此算法是有效的。其所给的方程x -56x +1=0的解用此算法得到的结果为0.[**************]6、55.[1**********]64。
2
B 题的实验过程
一、实验中问题的重述
舍入误差在数值计算中是一个很重要的概念,在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果,因此,选取数值稳定性的算法,在数值计算中是十分重要的。
对定积分y n =
⎰
1
x n e x -1d x 分别采用递推公式y n =1-ny n -1(n =1,2,
,20) 和递推公式
y n -1=
1-y n
(n =20,19, n
,1) 进行计算,并比较实验结果分析出哪个算法是稳定,给出原因。
二、对实验的分析 2.1对软件的选择
对于此题来说,利用Matlab 10.0软件编程计算。
2.2对算法是否稳定的分析
首先,计算两个算法的相对误差值。通过比较相对误差的大小,确定两算法的优劣。
然后,通过作图观察其偏差的波动幅度。观察当n 分别取1至20的整数时,误差是否稳定在0的附近,来判断算法一、二的稳定性。
2.3对结果呈现的分析
通过表格,再现出当n 分别取1至20的整数时,各个理论值,各个实际值一,各个实际值二,各个实际值一与理论值的偏差以及各个实际值二与理论值的偏差。
通过作图,再现出偏差的走势。
三、实验求解过程(程序见附录)
首先,利用int 函数,求出当n 分别取1至20的整数时该定积分的理论值。
然后,利用递推公式一的算法,计算出当n 分别取1至20的整数时的实际值一。并利用plot 函数,绘制出结果一的散点图。
其次,利用递推公式二的算法,计算出当n 分别取1至20的整数时的实际值二。并利用plot 函数,绘制出结果二的散点图。
再次,利用公式e i =
[-(实际值i )]∑(理论值)
k
k
k =1
20
(理论值)∑
k
k =1
20
(其中i=1、2表示利用递推公式一、二的算法),
计算出利用两个算法的相对误差值。
最后,画出当n 分别取1至20的整数时,利用递推公式一、二得到的结果与定积分理论值的差值的
散点图。
四、实验求解结果
利用Matlab 10.0软件编程计算。于是得到以下结果:
表1 求解结果表
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
并且得到分别利用两种递推公式计算时,递推公式一、二与定积分理论值的结果相对误差值见下表2,递推公式一、二与定积分理论值偏差的走势图见下图3:
n 的取值
图3 利用递推公式时的误差走势图
五、实验结果解释
通过表1可以看出:利用递推公式一时,在n >13时,其结果与定积分理论值的偏差就越来越大。而利用递推公式二时,其结果与定积分理论值都几乎相同。
通过图1、2可以明显看出:利用递推公式一时,在n 取18、19、20时,其结果与定积分理论值的偏差很大。而利用递推公式二时,其结果与定积分理论值都几乎相同。
通过表2可以看出:4.4078e+005(利用递推公式一计算时产生的相对误差值)>4.9304e-032(利用递推公式二计算时产生的相对误差值),因此算法二更优。
通过图3可以看出:利用递推公式一计算时不稳定。利用递推公式二计算时稳定。 因此,得到第二个算法(递推公式二)是稳定的。
C 题的实验过程
一、问题分析
该问题主要考察对于一个递推公式,将一个近似值作为其实际值代入此公式进行近似计算。欲求得其近似计算所得的近似值y 10与其实际值y 10之间的误差值,可将近似值与实际值都分别代入公式求得y 10与y 10,进而运用绝对误差公式求得其绝对误差值。
对该计算过程是否稳定的分析,则需考虑该近似计算的绝对误差限。用计算所得的绝对误差值与绝对
*
*
误差限进行比较从而得到该计算过程是否稳定的结论。
二、求解方法
对于序列{y n }所满足的递推关系
⎧⎪y 0= ⎨
⎪⎩y n =10y n -1-1(n =1,2, )
利用Matlab 软件采用迭代的方法将近似值y 0=1. 41代入求得序列y n ,同理代入实际值y 0
*
*
{}
*
=2迭
代计算得出实际值所组成的序列{y n }。利用绝对误差公式计算出y 10与y 10之间的相对误差值。通过对该近似计算的分析确定绝对误差限,通过绝对误差值与绝对误差限的比较,得出该计算过程是否稳定的结论。 在比较过程中,若绝对误差值≤绝对误差限,则该计算过程稳定;若绝对误差值>绝对误差限,则该
计算过程不稳定。
三、求解步骤
步骤1:确定绝对误差限
m -n
绝对误差限公式:εx =*10(其中:m 为近似值科学表示法中的10的指数;n 为有效数字位数)
1
2
因为y 0=1. 41=0. 141*10,且有效数字位数n=3。代入公式得:绝对误差限
*1
εx =0.005。
步骤二:确定绝对误差ε10
(1)求解序列{y n }及y 10
⎧⎪y =通过Matlab
中的迭代算法,编写出该递推关系⎨0的求解程序(见附件中的
y =10y -1(n =1,2, ) ⎪n -1⎩n
Matlab 程序)
;将实际值y 0=作为程序中的初值代入程序进行计算,既可得到序列{y n }及y 10则:
y 10=[1**********]
*
(2)求解序列序列{y n }及y 10
将实际值
*
y 0=1. 41
**
作为程序中的初值代入程序进行计算,既可得到序列y n 及y 10,则:
{}
*
y 10=[1**********]
(3)求解误差值
由程序的运算结果即可输出该该算法计算到第十项时所存在绝对误差10为:
ε
ε10=42135623.73
将程序所得结果整理得到以下表格:
表3 结果呈现表
0y 1 y 2 y 3 y 4 y 5 y 6 y 7 y 8 y 9 13.14213562 130.4213562 1303.213562 13031.13562 130310.3562 1303102.562 13031024.62 130310245.2 1303102451 0.042135624 0.421356237 4.213562373 42.13562373 421.3562373 4213.562373 42135.62373 421356.2373 4213562.373 13.10000000 130.0000000 1299.000000 12989.00000 129889.0000 1298889.000 12988889.00 129888889.0 1298888889 四、求解结果解释
εx
通过以上结果,确定该算法的稳定性由步骤二所求解得到的该算法计算到第十项时所存在绝对误差=42135623.73,由42135623.73>>0.005, 即绝对误差超出误差限,所以该算法不稳定。
D 题的实验过程
一、问题分析
针对该问题中是研究题中两种方法的误差, 运用题中方法进行计算分析.
二、求解过程
运用MATLAB 编程(for循环) 实现两种方法的计算, 与其标准值进行比较.
三、求解结果解释
计算编程得到以下数据:
-5
由以上表格中的数据可以看出:第二种方法更接近e 的准确值.
附 录
9
实验总结(由学生填写):
10