数值分析课件 第1章 绪论

当初始值取为时, 用(1-11)递推的计算公式为 计算结果见表 1-1 的误差

是初始误差, 它对后面计算结果是有影响的。 表 1-0I(A) 用

列。

近似0I 产生的

679 0.6321

用(A)算) (用(B)算) (用(A)算) (用(B)算)

0.3679 5 6 0.1480 0.1120 0.1455 0.1268 2 3 4 0.2642 0.2074 0.1704 0.2643 0.2073 0.1708 7 8 9 0.2160 -0.7280 7.552 0.1121 0.1035 0.0684 从表中可以看到矛盾。 实际上, 有积分估值得 相

因此, 当n较大时, 用的。

这里的计算公式与每步计算都是正确的,那么是什么原因使计算结果错误呢? 主要就是初值

步计算的误差出现负值, 这与一切

(1-12)

(容易推得 ( 1)nE= E 导致第n步的误差扩大 ! n倍, 当n较大时, 误差将淹没真值, 因此用似

近似nI 显然是不正确

有误差0II, 由此引起以后各满足关系 由此看出: 误差

近nI 显然是不正确的, 这种递推公式不宜采用。

例如,8n = , 若401102E=, 则 808!2EE= 这就说明是数值不稳定的。

---------------------------------------------------------------最新资料推荐------------------------------------------------------

现在换一种计算方法。 由(1-12)取

完全不能近似8I 了。

它表明公式(A)9n = , 有 1911010I 我们粗略取19911()0.06842 1010eII+==, 然后将公式(1-11)倒过来算, 即由公式为

计算结果见表 1-1 的误 差 不 超

过1nEEn*9 E 较大, 但由于误差逐步缩小, 故可用*9I 算出*8*7*0

我们发现。

记E*0I 与*nI0I 的则410*nnI=,*0*!=,*0E 比*nE 缩小了 ! n 倍, 因此, 尽管*nI 近似

相nI 。

(B)

列。

反之, 当用方案(A)计算时, 尽管初值 当准确, 由于误差传播是逐步扩大的, 因而计算结果不可靠。 此例说明, 数值不稳定的算法是不能使用的。

在例 7 中, 算法(B)使数值稳定的, 而算法(A)是不稳定的。 数值不稳定现象属于误差危害现象, 如何防止误差危害下面将进一步讨论。

4 数值计算中应注意的几个问题 数值计算中首先要分清问题是否病态和算法是否数值稳定, 计算时还应尽量避免误差危害, 防止有效数字的损失, 下面给出若干原则:

1. 要避免除数绝对值远远小于被除数绝对值的除法。 因为 ( )( )ey故当 yx时, 舍入误差可能增大很多。

17 / 21

例 8 线性方程组 22.xxx+=+=

201900x=121999980.50000125,0.999995399999199999x=== 现在四位浮点十进制数(仿机器实际计算) 下用消去法求解, 上述方程写成

程, 则

出现用小的数除大的数, 得到 411100.100010

由此解出 87\\ 0, 10 0.1000 1,xx==显然

严重失真。

若反过来用第二个方程消去第一个方程中含66210 0.100010

由此求的相当好的近似解 111111210

若用(除第

一方程减第二方

的项, 则避免了大数被小数除, 得到 1111210 0.201910 0.100010

2. 要避免两相近数相减 两数之差ux=y 的相对误差为 ( )e x( )e y( )()rre ue xyxy== 当 x与 y很接近时, u的相对误差会很大, 有效数字位数将严重丢失。

例如,532.52y =都具有五位有效数字, 但只有两位有效数字。 这说明必须尽量避免出现这类运算。 最好是改变计算方法, 防止这种现象产生。 先举例说明。

例 9 求1610xx+ = 的根。

---------------------------------------------------------------最新资料推荐------------------------------------------------------

解 1863x = +, 8630.8 10 0.794 10x= *2x 只有一位有效数字。

若改用 1863863+具有 3 位有效数字。 例 10 计算10 (1A=表)。

532.65x =,0.13xy=2*220.006 10x== 1210.627 1015.94x= = 7cos2 )(用四位数学用 由于cos210 (1A=0.9994cos2 )=, 直接计算 710 (10.9994)736 10= =。

x只有一位有效数字, 若利用21cos2sin2x=,则 A具有三位有效数字(这里sin1此例说明, 可通过改变计算公式避免或减少有效数字的损失。

类似的如果则 727310 (1cos2 )2 (sin1 )= 106.13 10)。 === 0.01751x 和2x 很接近时,1122lglglgxxxx= 用右边算式有效数字就不损失。

当 x很大时, 111xxxx+ =+ + 都 用 右 边 算 式 代 替 左 边 。

一 般 情 况 , 当( )( )*f xf x时, 就用泰勒展开 ( )f x( )( )()( )(2)2****fxf xf

取右端的有限项近似左端。

如果无法改变算 式, 则采取增加有效位数进行运算; 在计算机上则采用双倍字长进行运算, 但是增加计算时间和多占内存单位。 3. 要防止大数吃掉 小数 在运算中参加运算的数有时数量级相差很大, 而计算机位数有限, 如不注意运算次序就可能出现大数

19 / 21

吃掉 小数的现象, 影响计算结果的可靠性。

例 11 在五位十进制计算机上, 计算 100052492ii=把运算的数写成规格化形式

, 其中0.10.9i 1000515.

由于计算机内计算时要对阶, 若取阶时0.000009 10示为机器零, 因此 5.2492 10A=0.9i =, 对5i =, 在五位的计算机中表55550.000009

(符号的。

这是由于运算中大数吃掉 小数造成的。 例 12 求二次方程根。

解 利用因式分解容易求出此方程的两个根为1210 ,1xx== , 但若用求根公式, 则得 9101(10x==表示机器中相等)。

结果显然是不可靠0.9i =299(101)100xx++= 的99291)4 10 2+ + 若用 8 位小数的计算机运算, 由于对阶, 有 9101 10+ 99299(1010 ,=1)4 10 0= , 结果显然是错误的。

10+x 这样求得为避免这种情形出现, 也可采用改变计算公式的方法。

如将式 9101(10x=912x92921)4 10 2+ + 改变成 9299292 10101(101)4 10 x=+ ++ 则有 92992 10+11010x== 此结果是精确的。 4 要用简化计算, 减少运算次数, 提高效率 求一个问题的数值解法有多种算法, 不同的算法需要不同的计算量, 如果能减少运算次数, 不但可节省计算机的计算时间, 还能减少舍入误差累积。 这是数值计算必须遵从的原则, 也是数值分析 要研究的重要内容。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4