“数值计算方法”上机实验指导书
实验一 误差分析
实验1.1(病态问题)
实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式
p(x)?(x?1)(x?2)?(x?20)??(x?k)k?120(1.1)
显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动
p(x)??x19?0(1.2)
其中?是一个非常小的数。这相当于是对(1.1)中x19的系数作一个小的扰动。我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个MATLAB函数:“roots”和“poly”。
u?roots(a)
其中若变量a存储n+1维的向量,则该函数的输出u为一个n维的向量。设a的元素依次为a1,a2,?,an?1,则输出u的各分量是多项式方程
a1xn?a2xn?1???anx?an?1?0
的全部根;而函数 b?poly( v的输出b是一个n+1维向量,它是以n维向量v的各分量为根的多项式的系数。可见“roots”和“poly”是两个互逆的运算函数。
ess?0.000000001;ve?zeros(1,21);ve(2)?ess;roots(poly(1:20)?ve)
上述简单的MATLAB程序便得到(1.2)的全部根,程序中的“ess”即是(1.2)中的?。 实验要求:
(1)选择充分小的ess,反复进行上述实验,记录结果的变化并分析它们。如果扰动
项的系数?很小,我们自然感觉(1.1)和(1.2)的解应当相差很小。计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何?
(2)将方程(1.2)中的扰动项改成?x18或其它形式,实验中又有怎样的现象出现? (3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将方程(1.2)
写成展开的形式,
p(x,?)?x20??x19???0(1.3)
同时将方程的解x看成是系数?的函数,考察方程的某个解关于?的扰动是否敏感,与研究它关于?的导数的大小有何关系?为什么?你发现了什么现象,哪些根关于?的变化更敏感?
思考题一:(上述实验的改进)
在上述实验中我们会发现用roots函数求解多项式方程的精度不高,为此你可以考虑用符号函数solve来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考MATLAB的帮助。
思考题二:(二进制产生的误差)
用MATLAB计算?0.1?100。结果居然有误差!因为从十进制数角度分析,这一计算
i?11000应该是准确的。实验反映了计算机内部的二进制本质。
思考题三:(一个简单公式中产生巨大舍入误差的例子) 可以用下列式子计算自然对数的底数
1(1?)n e?e1?limn??n1这个极限表明随着n的增加,计算e值的精度是不确定的。现编程计算f(n)?(1?)n与
nexp(1)值的差。n大到什么程度的时候误差最大?你能解释其中的原因吗?
相关MATLAB函数提示:
poly(a) 求给定的根向量a生成其对应的多项式系数(降序)向量 roots(p) 求解以向量p为系数的多项式(降序)的所有根 poly2sym(p) 将多项式向量p表示成为符号多项式(降序) sym(arg) 将数字、字符串或表达式arg转换为符号对象 syms arg1 arg2 argk 将字符arg1,arg2,argk定义为基本符号对象 solve('eq1') 求符号多项式方程eq1的符号解
实验二 插值法
实验2.1(多项式插值的振荡现象)
问题提出:考虑一个固定的区间上用插值逼近一个函数。显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时,Ln(x)是否也更加靠近被逼近的函数。龙格(Runge)给出一个例子是极著名并富有启发性的。设区间[-1,1]上函数
f(x)?1 21?25x实验内容:考虑区间[-1,1]的一个等距划分,分点为 xi??1?2i,i?0,1,2,?,n n则拉格朗日插值多项式为 Ln(x)??1lx( )2ixii?01?25n其中的li(x),i?0,1,2,?,n是n次拉格朗日插值基函数。 实验要求:
(1) 选择不断增大的分点数目n=2,3….,画出原函数f(x)及插值多项式函数Ln(x)在[-1,1]上的图像,比较并分析实验结果。
(2)选择其他的函数,例如定义在区间[-5,5]上的函数
h(x)?x,g(x)?arctanx 1?x4重复上述的实验看其结果如何。 (3)区间[a,b]上切比雪夫点的定义为 xk?b?ab?a?(2k?1)????co?s,k?1,2,?,n?1 ??22?2(n?1)?以x1,x2,?xn?1为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析原因。
实验2.2(样条插值的收敛性)
问题提出:多项式插值是不收敛的,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的收敛性是比较困难的,但通过本实验可以验证这一理论结果。
实验内容:请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节