第一章1.3数值稳定性和要注意的若干原则1.3.3减少运算次数1.3.2避免有效数字的损失1.3.1数值方法的稳定性第一章1.3数值稳定性和要注意的若干原则学习目标:掌握数值运算中避免大误差产生的若干准则。第一章1.3.1数值方法的稳定性定义1.6对于某个数值计算方法,如果输入数据的误差在计算过程中迅速增长而得不到控制,则称该算法是数值不稳定的,否则是数值稳定的。更准确地说,假设输入数据的误差为,经n次运算后计算结果的误差为EnCn(C为与n无关的常数)时,就说误差是线性增长,当Enkn(k1为与n无关的常数)时,就说误差是指数增长.第一章如果算法的误差增长是线性的,则该算法是数值稳定的;如果算法的误差是指数增长的,则该算法是数值不稳定的.显然,误差的线性增长是不可避免的,而指数增长是必须避免的.举例说明如下。第一章例1计算数列1()3nnp解第一种方法是令p0=1,利用递推公式在五位数字计算机上可计算出11()3nnppP1=0.33333100P2=0.11111100P3=0.3703610-1P4=0.1234510-1…这里,1/3是用0.33333近似,误差限为50.510第一章经n步计算后的近似结果的误差限为15(0.33333)0.510nnEnn所以,误差是线性增长的,从而算法是稳定的.第二种方法是令p0=1,p1=1/3,利用递推公式1210()3nnnppp...误差是指数增长的,从而算法是不稳定的第一章当然,数值不稳定的方法一般在实际计算中不能采用。数值不稳定的现象属于误差危害现象。下面讨论误差危害现象的其他表现及如何避免问题。1.用递推关系进行计算时设法控制误差的传播用递推关系进行计算时必须注意误差的积累.1.3.2避免有效数字的损失的措施第一章例2计算积分值106,,1,0,5。ndxxxInn解由于要计算系列的积分值,我们先推导In的一个递推公式。由1010111,1555ndxxdxxxxIInnnnn可得下面两个递推算法。第一章算法1:。6,,2,1,511nInInn。1,,5,6,1511nInInn算法2:00,ln6ln5II直接计算得。1823.0*0I**,nnnnnEIIII记为的近似值.逆向递推公式如果我们用四位数字计算,得I0的近似值为第一章对算法1,有。01)5(5EEEnnn这个数已经大大超过了I6的大小,所以I6*连一位有效数字也没有了,误差掩盖了真值。40105.0E401022.0E34.05066EE按以上初始值I0的取法有事实上这样,我们得到第一章错误的原因?将的误差扩大到5倍。递推公式115nnIIn1nI0I若的绝对误差限2341234,,,5,5,5,5.IIII的绝对误差限00.1823216I44453100.1875I的绝对误差限4013其绝对误差限11155nnIIn改用:1nnII递推求时,的误差影响小。第一章对算法2,有如果我们能够给出I6的一个近似值,则可由算法2计算I6的近似值.并且,即使I6较大,得到的近似值的误差将较小.由于01611()55nEEE11001161)655(1)kkkxxdxIdxkk(可取Ik的一个近似值为*11126(1)5(1)kIkk。对k=6有*60.0262I按I0=0.1832和I6=0.0262,分别按算法1和2计算,计算结果如表1-1.第一章(四位)nI表1-1n)1(nI)2(nI00885.01823.01823.011823.00884.00884.020575.00580.00580.030458.00431.00431.040210.00344.00343.050950.00281.00285.063083.00262.00243.0用递推关系进行计算时必须注意误差的积累.其中In(1)为算法1的计算值,In(2)为算法2的计算值。易知,对于任何自然数n,都有0In1,并且In单调递减。可见,算法1是不稳定的,算法2是稳定的。第一章在数值计算中,参加运算的数有时数量级相差很大,而计算机位数有限,如不注意,“小数”的作用可能消失,即出现“大数”吃“小数”的现象。2.防止“大数”吃“小数”例3用三位十进制数字计算,10110021x0.10.4,1,2,100ii其中。第一章1414.01001011.0100101111x可见,计算的次序会产生很大的影响。这是因为用计算机计算时,在运算中要“对阶”,对阶引起了大数吃小数的现象。大数吃小数在有些情况下是允许的,但有些情况下则造成谬误。在数值计算中,两个相近数相减会使有效数字严重损失。解方法1:自左至右逐个相加因为在三位计算机上计算,所以后面所有的i都会被舍掉,得方法2:先将所有的i相加,再与101相加,这时101x第一章第一章例4求实系数二次方程的根,其中02cbxax240,0bacab。解考虑两种解法。算法1:aacbbx2422,1算法2:2121()4,2bsgnbbaccxxaax其中sgn表示取数的符号,即10(){10bsgnbb3.防止两接近的数相减第一章对算法1,若b24ac,则是不稳定的,否则是稳定的。这是因为前一种情况的分子有一个相近数相减,会大量损失有效数字,从而有一个结果的误差很大。算法2不存在这个问题,在任何情况下都是稳定的。因此称算法1是条件稳定的,算法2是无条件稳定的。第一章例如,对于方程262.101.0000xx用4位有效数字计算,结果如下:算法1:1262.08,0.02000xx算法2:1262.08,0.01611xx所以算法1不稳定,舍入误差对x2的影响大。1262.083892,0.016107237xx准确解是这里24bac第一章遇到两相近数相减的情形,可通过变换计算公式来避免或减少有效数字的损失。例如,我们有如下的变换公式:11221cossinsin1coslglglg111xxxxxxxxxxxx如果无法改变算法,则采用增加有效位数进行计算,或在计算上采用双精度运算但这要增加机器计算的时间和多占内存单元。第一章4.减少运算次数在数值计算中,要注意简化计算步骤,减少运算次数,这也是数值分析所要研究的重要内容。同样一个计算问题,如果能减少运算次数,不但可以节省计算机的计算时间,还能减少误差的积累。下面举例说明简化计算公式的重要性。例5给定x,计算多项式的值110()nnnnnPxaxaxa第一章0121}])([{)(aaaaxaxxxxPnnnn解考虑两种算法算法1:先求,1,2,...,,kkaxkn(1)2nnknnk=1这需要进行次乘法,再把各项加起来这需要次加法运算.才能得到一个多项式的值算法2:如果我们将多项式写成下面的形式则只需n次乘法和n次加法即可得到一个多项式的值,这就是著名的秦九韶算法,可描述为第一章1,1,20nnkkkuauuxaknn0,()nuPx最后有即为要计算的多项式的值.显然,第二种算法比第一种算法的计算次数大大减少,它不仅能够节省机器计算时间,而且有利于防止误差积累.第一章例611ln(1)(1)nnnxxn计算ln2.算法1.利用级数若要精确到105,要计算10万项求和。这一方面计算量很大,另一方面舍入误差的积累也十分严重。算法2.利用级数35211ln2(),13!5!(21)!nxxxxxxn取x=1/3,则只要计算前9项,截断误差便小于1010.第一章5.避免小除数、大乘数.因为()()()()()()121221()()()()()()()1221122()22()||()||(),||()||()(/),(0).||AAAAAAAAAAAAAAxxxxxxxxxxxxxx如果前式中|x1|很大或后式中|x2|0,计算结果的绝对误差可能很大.第一章第一章小结1了解数值分析的研究对象与特点;2了解误差来源与分类,会求有效数字;3会简单误差估计;4了解误差的定性分析及避免误差危害。