数值分析实验指导2012
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验指导
2012年8月
实验一 误差分析
实验1.1(病态问题)
实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式
)1.1()
()20()2)(1()(20
1∏=-=---=k k x x x x x p
显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动
)2.1(0
)(19=+x x p ε
其中ε是一个非常小的数。这相当于是对(1.1)中19x 的系数作一个小的扰动。我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个MATLAB 函数:“roots ”和“poly ”。
roots(a)u =
其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程
01121=+++++-n n n n a x a x a x a
的全部根;而函数 p o l y (v
b = 的输出b 是一个n+1维向量,它是以n 维向量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。
)
)20:1((;
)2();21,1(;000000001.0ve poly roots ess ve zeros ve ess +===
上述简单的MATLAB 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。
实验要求:
(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。
如果扰动项的系数ε很小,我们自然感觉(1.1)和(1.2)的解应当相差很小。计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何? (2)将方程(1.2)中的扰动项改成18x ε或其它形式,实验中又有怎样的现象出现?
(3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将
方程(1.2)写成展开的形式, )3.1(0
),(1920=+-= x x x p αα
同时将方程的解x 看成是系数α的函数,考察方程的某个解关于α的扰动是否敏感,与研究它关于α的导数的大小有何关系?为什么?你发现了什么现象,哪些根关于α的变化更敏感?
思考题一:(上述实验的改进)
在上述实验中我们会发现用roots 函数求解多项式方程的精度不高,为此你可以考虑用符号函数solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考MATLAB 的帮助。
思考题二:(二进制产生的误差)
用MATLAB 计算1001.01000
1-∑=i 。结果居然有误差!因为从十进制数角度分析,
这一计算应该是准确的。实验反映了计算机内部的二进制本质。 思考题三:(一个简单公式中产生巨大舍入误差的例子) 可以用下列式子计算自然对数的底数
n n n
e e )11(l i m 1+==∞→ 这个极限表明随着n 的增加,计算e 值的精度是不确定的。现编程计算
n n
n f )1
1()(+=与exp(1)值的差。n 大到什么程度的时候误差最大?你能解释其中
的原因吗?
实验1.2 误差传播与算法稳定性
实验目的:体会稳定性在选择算法中的地位。误差扩张的算法是不稳定的,是我们所不期望的;误差衰减的算法是稳定的,是我们努力寻求的,这是贯穿本课程的目标。
问题提出:考虑一个简单的由积分定义的序列
...
2,1,1
01==⎰-n dx e x I x n n
显然,...2,1,0=>n I n 。当1=n 时,
e dx xe I x /11
011==⎰-。而对于2≥n 时,利用分部积分易得
,...3,2,1|11
1
11011
1=-=-==-----⎰⎰n nI dx e nx
e x dx e x I n x n x n x n n
另一方面,我们有
)
1/(11
10
1+=≤=⎰⎰-n dx x dx e x I n x n n
实验内容:由以上递推关系,我们可得到计算序列{n I }的两种方法。
(I ):,...3,
2,1,/111=-==-n nI I e I n n (II ):
2,3,...2,1,,1,01--=-=
=-N N N n n E E E n
n N
实验要求:
(1)分别用算法(I )、(II )并在计算中分别采用5位、6位和7位有效数字,请判断哪种算法能给出更精确的结果。
(2)两种算法的优劣,与你的第一感觉是否吻合。请从理论上证明你实验得出的结果,解释实验的结果。算法(I )中的1I 的计算误差为1e ,由1I 递推计算n I 的误差为n e ;算法(II )中N I 的计算误差为N ε,由N I 向前递推计算)(N n I n <的误差为n ε。如果在上述两算法中都假定后面的计算不再引入其他误差, 试给出n e 与1e 的关系和n ε与N ε的关系。
(3)算法(I )中通常1e 会很小,当n 增大时,n e 的变化趋势如何?算法(II )中N ε通常相对比较大,当n 减小时,误差n ε又是如何传播的?也就是说比较一下上述两个算法,当某一步产生误差后,该误差对后面的影响是衰减还是扩张的。 (4)通过理论分析与计算实验,针对算法(I )和(II )的稳定性,给出你的结论。