能控制,这与算法有关。 例5 一元二次方程 如用求根公式:
以及字长为8位的计算器求解有:
那么: 的值与精确解有天壤之别。若改用:
。
其精确解为
因此, 算法的选用很重要。
第四节 数值计
算中应注意的问题
1. 避免两个相近的数相减
两个相近的数相减,有效数字会大大损失。前面一个例子已说明问题,这里再举一例:
如用四位有效数字计算:
结果只有一位有效数字; 如改为:
有四位有效数字。新算法避免了两个相近数的相减。
2. 避免大数吃小数的现象
例如: a=1010 ,b=10, c=-a ,|a+c|<
b被大数吃掉了。如按(a+c)+b=0+b=b,b 就没有被吃掉。这也是构造算法时要注意的问题。
3. 避免分母的绝对值远小于分子的绝对值 由公式
故当|x2* |<<|x1* |, 舍入误差可能会增大。
4. 要简化计算,减少运算次数,提高效率 例如计算ln2,若用公式
-1 取x=1, 前n项部分和来计算ln2的近似值,截断误差为。如果利用级数 -1 来计算,当时,代入上面的展开式得 取前5项之和作为近似值,参数的截断误差为 显然,第二算法比第一算法有效。 又如计算多项式的值: 计算Pn(x)共需 如将Pn(x)写成: ,每取akxk有k次乘法运算,因此 次乘法和n次加法运算。 Pn(x)=(…((anx+an-1)x+an-2)x+…+a1)x+a0 用秦九韶算法:u0=an, uk=uk-1x + an-k,k=1,2,…,n 。最终Pn(x)=un,共需 n次乘法和n次加法运算。一般地要注意,能在循环外计算,就不要放在循环内计算。 5. 选用数值稳定性的算法 例:In=e-1 xnexdx ,n=0,1,2,… 用分部积分公式得递推式: In=1-nIn-1,I0=1-e-1 用四位有效数字计算: I0=0.6321 ,I1=1-I0=0.3679 ,I2=1-2I1=0.2642 I3=1-3I2=0.2074 ,I4=1-4I3=0.1704 I5=1-5I4=0.1480 ,I6=1-6I5=0.1120 I7=1-7I6=0.2160 ,I8=1-8I7=-0.7280 可以估计出: 故: 0.0460 于是I7与I8精确值已经面目全非,一位有效数字也没有。这是由于如果I0有误差e=0.5×10-4,不计中间再产生的舍入误差,该误差随着计算过程分别乘以2,3,…,7,8到时已经变成了8!e , 误差扩大了4万倍。因而该算法不是稳定的。 如果递推式改为,由I7=0.1124,逐步计算I6 ,I5 ,… 直到I0=0.6321。计算结果有四位有效数字,如果I7有误差e, 其传播到I0所引起的误差仅为 。故该算法是稳定的。 绪论与误差 1 误差和误差限 x*-ε*≤x ≤x*+ε*或 x = x* ±ε* ε*误差限 2 相对误差和相对误差限 3 有效数字 1) 有效数字 x*=±10m(a1+a2×10-1+ … + an×10-n+1) 其中ai(i=1,…,n)是0到9中的一个数字,a1≠0,m为整数,且 |e*|=|x*-x|≤ε=0.5×10m-n+1 2) 设近似值x*=±0.a1a2 …an ×10m, 有n位有效数字, a1≠0,则其相对误差限 . 反之,若近似值的相对误差限为