0计算方法及MATLAB实现简明讲义课件PPS1-2误差分析
- 格式:pps
- 大小:2.70 MB
- 文档页数:35
实验一 误差分析实验1(病态问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。
对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。
通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。
病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=-=---=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的全部根;而函数 poly(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 数值分析的对象、作用与特点1.2 数值计算的误差1.3 误差定性分析与避免误差危害1.4 数值计算中算法设计的技术1.5 数学软件(略)1.3 误差定性分析与避免误差危害一个工程或科学计算问题往往要运算千万次,由于每步运算都有误差,如果每步都做误差分析是不可能的,也不科学.因为误差积累有正有负,绝对值有大有小,都按最坏情况估计误差限得到的结果比实际误差大得多,这种保守的误差估计不反映实际误差积累.考虑到误差分布的随机性,有人用概率统计方法,将数据和运算中的舍入误差视为适合某种分布的随机变量,然后确定计算结果的误差分布,这样得到的误差估计更接近实际,这种方法称为概率分析法.20世纪60年代以后对舍入误差分析提出了一些新方法,较重要的有威尔金森(Wilkinson )的向后误差分析法和穆尔(Moore)的区间分析法两种.1.3.1 算法的数值稳定性用一个算法进行计算,如果初始数据误差在计算中传播 使计算结果的误差增长很快,这个算法就是数值不稳定的.计算 并估计误差. ),1,0(e e 11==⎰-n dx x I xn n 由分部积分可得计算 的递推公式n I ),,2,1(11 =-=-n nI I n n 若计算出 , 0I 代入(3.2),可逐次求出的值. ,,21I I (3.1).e 1ee1110---==⎰dx I x例5 (依“反对幂指三”顺序分部!)而要算出 就要先计算 . 0I 1e -,!)1(!2)1()1(1e 21k k-++-+-+≈- 并取 , 7=k 则得 , 3679.0e 1≈-3679.0e17-=-R 计算过程中小数点后第5位的数字按四舍五入原则舍入.若用泰勒多项式展开部分和用4位小数计算, 截断误差!81≤.10414-⨯<(泰勒展开提供了一种计算近似值的方法!)当初值取为 时,用(3.1)递推00~6321.0I I =≈⎩⎨⎧=-==-).,2,1(~1~;6321.0~)A (10 n I n I I n n 计算结果见表1-1的 列. nI ~ 用 近似产生的误差 就是初值误差, 0~I 0I 000~I I E -=它对后面计算结果是有影响的. ),,2,1(11=-=-n nI I n n (3.1) .e 1e e 11010---==⎰dx I x 计算公式为7.55290.170440.728080.207430.216070.264220.112060.367910.148050.63210计算)(A)(用I n 计算)(A)(用I n 11表n n -↓↓-~~从表中看到 出现负值, 8~I 这与一切 相矛盾.0>n I ()⎰≤≤--=+11011e min e 1edx x n n xx 因此,当 较大时,用 近似 显然是不正确的. n nI ~n I ()⎰≤≤-<1101e max edxx nxx (3.2).11+=n 实际上,由积分估值得nI<(积分中值定理估计值!)计算公式与每步计算都是正确的,计算结果错误的原因主要就是初值 有误差 ,由此引起以后各步 计算的误差 满足关系 0~I 000~I I E -=n n n I I E ~-=).,2,1(1=-=-n nE E n n 容易推得,!)1(0E n E nn -=这说明 有误差 ,则 就是的 倍误差. 0~I 0E n I ~0E !n (误差传播!数值不稳定)例如, , 8=n 若 , 401021-⨯=E 2!808>⨯=E E 这就说明 完全不能近似 了. 8~I 8I 若换一种计算方案. 由(3.3)取, 9=n ,10110e 91<<-I 1911e 21010I -⎛⎫≈ ⎪⎝⎭取算术平均值则 它表明计算公式(A )是数值不稳定的.则 (3.3)111e 1+<<+-n I n n将公式(3.2)倒过来算, 即由算出 ,公式为 *9I *1*7*8,,,I I I ⎪⎩⎪⎨⎧=-==-);1,,8,9()1(,0684.0)B (**1*9 n I n I I n n 计算结果见表1-1的 列. *n I ↑↑-↓↓-0.06847.55290.17080.170440.10350.728080.20730.207430.11210.216070.26430.264220.12680.112060.36790.367910.14550.148050.63210.63210计算)(B)(用I 计算)(A)(用I n 计算)(B)(用I 计算)(A)(用I n11表*nn *nn ~~),,2,1(11 =-=-n nI I n n (3.2) .e 1e e 11010---==⎰dx I x (设定初值,倒向算法)正向与倒向算法比较11反之,当用方案(A )计算时,尽管初值 相当准确, 0~I 此例说明,数值不稳定的算法是不能使用的.记 , **nn nI I E -=则 , **0!1n E n E =比 缩小了 *0E *n E 倍,因此,尽管 较大,但由于误差逐步缩小,故可用 !n *9E 近似 . *nI nI 由于误差传播是逐步扩大的,因而计算结果不可靠.可以看出 与 的误差不超过 .*0I 0I 410-010.6321;(A)1(1,2,).n n I I nI n -⎧=⎨=-=⎩一个算法如果输入数据有误差,而在计算过 程中舍入误差不增长,则称此算法是数值稳定的,否则称 此算法为不稳定的.在例5中,倒向算法(B )是数值稳定的, 而正向算法(A )是不稳定的.定义3 ⎩⎨⎧=-==-).,2,1(~1~;6321.0~)A (10 n I n I I n n ⎪⎩⎪⎨⎧=-==-);1,,8,9()1(1,0684.0)B (**1*9 n I n I I n n1.3.2 病态问题与条件数对一个数值问题本身, 如果输入数据有微小扰动(即误 差),引起输出数据(即问题解)相对误差很大,这就是病态问题.例如计算函数值 时, )(x f 若 有扰动,其 x *x x x -=∆相对误差为 , xx ∆函数值 的相对误差为*)(x f )(*)()(x f x f x f -,)()(/)(*)()(p C x f x f x x x x f x f x f ='≈∆-(3.3)称为计算函数值问题的条件数.p C 相对误差比值自变量相对误差一般不会太大,如果条件数 很大, p C 将引起函数值相对误差很大,出现这种情况的问题就是病态问题.()(*)(())()()f x f x f x f x x εε'-=≈根据误差传播公式例如, , n xx f =)(它表示相对误差可能放大 倍.n 如 , 10=n ,02.1*=x 自变量相对误差为 , %2函数值相对误差为 , %24 一般情况下,条件数 就认为是病态,越大 病态越严重.10≥p C p C 则有 )()(x f x f x C p '=,1n x nx x nn =⋅=-,1=x 若取 这时问题可以认为是病态的.10(1)1,(1.02) 1.02 1.24,f f ==≈(误差扩大到12倍!)⎩⎨⎧=+=+.0,1y x y x αα 解 当时,系数行列式为零,方程组无解,但当时,存在唯一解为 211α-=x 例6 线性方程组.12αα-=y 1=α1≠α 当 时,若输入数据有微小扰动(误差),则解的误差将会很大.1≈αα 例如,若取 ,则解 ;如果有误差0.001, 取 ,则解 ,误差 很大, 说明此时线性方程组是病态的.99.0=α25.50≈x α991.0*=α81.55*≈x 56.5*≈-x x 211lim 1αα→=∞-当 时, ,条件数很大,故问题是病态的. 211α-=x 实际上,由 是 的函数,由(3.3)式可求得 99.0=αα 需要注意的是,病态问题不是计算方法引起的,是数值 问题本身所固有的.因此,对数值问题首先要分析是否病态,病态问题要采取相应的数值方法,以减少误差的危害..12)()(22ααααα-='=x x C p 100=p C1.3.3 避免误差危害的若干原则数值计算中通常不采用数值不稳定算法,在设计算法时 还应尽量避免误差危害,防止有效数字损失。
原则一. 避免两相近数相减求 的小正根. 01162=+-x x 解 ,6381+=x 只有一位有效数字. *2x 6382-=x 则具有3位有效数字.若改用 例6382-=x ,06.094.78*2x ==-≈1863=+115.94≈≈(同样一张表,效果大不同!)(给出平方根表) 637.94=0.0627(分式有理化!)(优良算法设计的重要!)例 计算 (给出四位数学用表).)2cos 1(107︒-=A 由于 , 9994.02cos =)2cos 1(107 -=A 只有一位有效数字. 2sin2cos 12xx =-)2cos 1(107-=A 具有三位有效数字 (这里 ).0175.01sin = 则若利用.106)9994.01(1037⨯=-=272(sin 1)10=⨯⨯=直接计算 (二倍角公式!)36.1310⨯此例说明,可通过改变计算公式(算法)避免或减少有效数字的损失.类似地,如果 和 很接近时,由1x 2x .lg lg lg 2121x x x x =-用右边算式有效数字就不损失(虽然形式上似乎仅仅做了等价变形).1x x +-=也应该用有理化之后的右端算式代替左端.当很大时, x (避免相近数相减,防止损失有效数字!)1,1x x++一般情况,当 时,可用泰勒展开*)()(x f x f ≈+-''+-'=-2*)(2*)(*)*)((*)()(x x x f x x x f x f x f 取右端的有限项近似左端.如果无法改变算式,则采用增加有效位数进行运算; 在计算机上则采用双倍字长运算,但这要增加机器计算时间和多占内存单元. 我们更喜欢改良算法!原则二. 避免大数吃掉小数例2 利用公式∑∞=+-=+11)1()1ln(n nn n xx 的前 项和,可计算的近似值(令 ). N 若要精确到 ,需要对项求和,此时不但计 算量大,舍入误差的积累也很严重. 若改用 2ln 1=x 510-100000=N ),1253(211ln 1253++++++=-++n xx x x x x n 取 ,只要计算前10项之和,其截断误差便小于 . 1010-3/1=x (等价变形,巧用算法!)原则三. 构造适当算法,减少运算次数25x x原则四. 构造适当算法,减少运算次数31小练习1.2.3.(1). (2).4.小练习参考解答1.2.3.(1).(2).4.35。