当前位置:文档之家› 13选用算法时应遵循的原则

13选用算法时应遵循的原则


I1 11 0I0
I1* 110I0 *
I 1 I 1 * 1(I 0 0 I 0 * ) 1e (0 I 0 * )
计算方法
这就是说,若
I

0
I
* 0
的误差为
e
(
I
* 0
)
=
I0
-
I
* 0
,即
I0 I0 *e(I0 *),则误差的递推规律为
e (In * ) In In * 1(In 0 1 In * 1 ) ( 1)2 ( 0 In 2 In * 2 ) ( 1 )n 1n (I 0 0 I0 * )
计算方法
例: 计算 D0.000 05.014 03.0012 0.000 03.012 05.0135
解: 分子分母分别计算后相除(取9位小数)
A=0.0005×0.0143×0.0012=0.00000715×0.0012 =0.000000009(有舍入)
B=0.0003×0.0125×0.0135=0.00000375×0.0135 =0.000000051(有舍入)
计算方法
(3)绝对值太小的数不宜做除数 当分母为两个相近数相减时,会丧失有效数字
(分)子(分) 子 140 (分)子 0.145 0.16450.0 5001 这里分子的误差被扩大104倍,再如
3.1415314.51 0.001 若将分母变为0.0011,即分母只有0.0001的变化时,计 算结果却有了很大变化 3.1415285.95 0.0011
于是 P(x)bn ,这种多项式求值的算法称为秦 九韶算法,只做n次乘法和n次加法,程序实现简 单
计算方法
(5)选用数值稳定性好的公式,以控制舍入误 差的传播
对于一个数学问题的求解往往有多种数值方法 在选择数值方法时,要注意所用的数值方法不应将 计算过程中难以避免的误差放大的较快,造成计算 结果完全失真。
于是
e(I1 *)01e 0 (I9 *)12 0 e(I8 *) 11 0e 0(I0 *)
计算方法
计算
I
* 10
时的误差被扩大了
1010
倍,显然算法是数值不
稳定的。
如果将递推公式
In
1 1 n
0In1
变换一种形式
In1
1 10n
In 10
计算方法
准确的理论递推式
In1
1 In 10n 10
计算方法Βιβλιοθήκη n1 xn 0 x1d 0
x
1xn10xn110xn1
d
0
x10
x
1xn10xn1dx 110xn1dx
0 x10
0 x10
1 xn1dx10 1 xn1 dx
0
0 x 10
即In为
1 n
10I n1
In n1 10In1
(n1,2,..1.,)0
计算方法
则准确的理论递推式 实际运算的递推式 两式相减有
实际运算的递推式
In *1
1 In * 10n 10
从而有
In1In *11 10 (InIn *)
即 I0I0* 110(I1I1*)1102(I2I2*) (110n)n(InIn*)
计算方法
如果将前n项提出x,则有 p(x)=(anxn-1 an-1xn-2 … a1 )x a0
=((anxn-2an-1xn-3… a2)xa1)x a0 =(…(anx an-1)x…a2)x a1)x a0 写成递推公式
bkbk1xank (k1,2, ,n) b0an
计算方法
(4)简化计算步骤,减少运算次数
计算方法
x255=xx2x4x8x16x32x64x128
原先要做254次乘法现只需14次即可
又如计算多项式
p(x)=anxn an-1xn-1 … a1x a0 的值 若直接计算akxk,再逐项相加,一共要做 n+(n-1)+…+2+1=n(n+1)/2次乘法和n次加法
计算方法
例13 计算积分 In0 1xx n 1d 0x(n0,1,2, ,1)0
并估计误差。 解 容易得到递推公式
I00 1x 1 1d 0 x ln x ( 1)0 1 0 ln 1 .1
I00 1x 1 1d 0 x ln x (1)0 1 0ln 1 .1
(n1,2,..1.,)0
D=A/B=0.17647
真值为0.16948148…,所以D只准确到小数后一位
计算方法
a
b
c
D0.000 05 .014 03 .0012 0.000 03 .012 05 .0135
算法2。分成三组因子。每组只取六位小数计算 a=0.0005/0.0003=1.666667(有舍入)
b=0.0143/0.0125=1.144000 c=0.0012/0.0135=0.088889 (有舍入) D=a×b×c=1. 666667× 1.144000× 0.088889 =0.169482,准确到小数后5位。
相关主题