Page 30 - 《软件学报》2020年第12期
P. 30

3696                                Journal of Software  软件学报 Vol.31, No.12, December 2020

             20:     D ⇐  AccurateEnough ({( , ) |1≤≤ n z
                                     y ε

                                                }, , ) ε ;  //z 为式(35)中对应等价表达式.
                                             i
                                        i
                                      i
             21: end if
         2.2   举例说明
             已知函数 f(x 1 ,x 2 )=sin(1000x 1 )+x 1 x 2 , Y =  (,y y =  )  ( , 2)π  ,误差限ε=0.1 .
                                                                  3
                                             1  2

             例 2.1:假设ε 1 =0.1 ,ε 2 =0.1 .这时,我们取 Y =     ( ,y y =     )  (3.14, 1.414) .判断由 ()f Y 能否获得一个 y,满足:
                           2
                                 3
                                                1  2
                                                |y−f(Y)|<ε                                   (36)
             首先,平均分配误差:令 sin(1000x 1 )与 x 1 x 2 的误差限均为:
                                                 ε′=ε/2                                      (37)
         然后,对于正弦函数来说,由算法 6 知,其自变量 1000x 1 的误差限应为ε″=ε′/2=ε/4;继而,由乘法的相关算法可推出
         x 1 的精度(或误差限)应为:
                                                         6
                                             ε″′=ε″/1000=0.1 /4                              (38)

         由于ε″′<ε 1 ,因此,由 Y 不能确保可以得出一个满足式(36)的 y.这样,建议 y   的精度ε 1 提高至式(38)中的值.
                                                                  1

             例 2.2:设ε 1 =0.1 ,ε 2 =0.1 .这时,取 Y =     ( ,y y =    2 )  (3.1415927,1.414) .判断由 ()f Y 能否获得一个 y,满足式(36).
                          7
                                3
                                            1
             由例 2.1 知, y   的精度已能满足 sin(1000x 1 )的精度要求.
                        1
             下面,我们分析ε 1 ,ε 2 是否能够满足式(37)中对 x 1 x 2 的精度要求.
                                                 +
                                                    3
                                                      +
                                                                     +
             由于 ε  (| y +   | ε  ) ε  +  (| y +  | ε   ) =  0.1 ×  7  (|1.414 | 0.1 ) 0.1 ×  3  (| 3.1415927 | 0.1 ) =  7  0.0031417343 ε >  ′ ,即计算
                  1  2   2   2  1  1

         值不满足不等式(12),因此,由 Y 不能保证可以得出一个满足式(36)的 y.
             另外,由于 ε  1 (| y +   2  | ε  2 ) ε  <  2 (| y +  1  | ε   1 ) ,因此,令 ε 2 (| y +  1 ) ε <  ′ / 2 ,即 ε <  ε  /(2 (| y×    1 | ε′  +  1 )) =  0.000079577... ,因
                                                     | ε
                                                    1
                                                                  2
                                       5
         此,我们建议ε 2 =δ(0.000079577…)=0.1 .

                         7
             例 2.3:设ε 1 =0.1 ,ε 2 =0.1 .这时,取 Y =     ( ,y y =     )  (3.1415927,1.41421) .由上例(即例 2.2)知:通过 ()f Y ,我们可以
                               5
                                           1  2
         获得一个值 y,满足式(36)中的条件.

             可以验证, fY =  ( )  4.4429182..., ( )fY  =  4.4428829... .从而, y =  f    ( )Y        ε  =  4.443 .它在满足 | y −  f  ( ) |Y <     ε 的同
         时,也满足不等式(36):|y−f(Y)|=|4.443−4.4428829…|=0.000117…<ε.
         3    循环迭代程序的可信计算算法
             对于式(3)来说,由 AccurateEnough 算法(即算法 0)可得:
             定理 3.1.  存在一个算法,对于任意的ε>0,可以获得 y n 的一个计算值 y   ,使得 | y −          y  | ε<  .

                                                                   n       n  n
             证明:下面使用归纳法进行证明.
             当 n=1 时,由于只是计算一个表达式的值,因此我们可以利用一些算法获得其误差可控的值.假设 n≤k 时结

         论也成立,即,由算法可以获得 y 1 ,y 2 ,…,y k 任意精度的值.再设 (,y y       2 ,..., y   k ) 是(y 1 ,y 2 ,…,y k )的一个计算值.这时,由
                                                            1
         AccurateEnough 算法知,我们可以判断其是否足够精确,以至可以利用它获得 f k+1 (y 1 ,y 2 ,…,y k )误差可控的值.若该
         值足够精确,那么意味着我们也能够获得 y k+1 =f k+1 (y 1 ,y 2 ,…,y k )给定精度的值.从而定理成立;否则,若该值不够精
         确,那么利用 AccurateEnough 算法,通过提高有关值的精度,总可以找到一个计算值,使得该值足够精确,以至可
         以获得 y k+1 =f k+1 (y 1 ,y 2 ,…,y k )给定精度的值.从而定理获证.证明完毕.                                □
             根据定理 3.1,我们可得下列主算法.它计算 y n =f n (y 1 ,y 2 ,…,y n−1 )的值.
             算法 11. Main( x    2  x   m , , ,..., ,f f 2  f ε ).
                          , ,...,x
                                        n
                                  1
                          1
             Require:m,{|1x   i  ≤≤  m } ,n,{y i |y 1 =f 1 (x 1 ,x 2 ,…,x m ),y i =f i (y 1 ,y 2 ,…,y i−1 ),2≤i≤n},ε>0;
                           i
             Ensure: y ≈     y  | , y −  y  | ε<   ;
                    n   n  n  n
             1:   l⇐1;  //初始化
                                l
             2:   extra_precision⇐0.1 ;  //初始化精度步长
             3:   j⇐1;  //初始化
   25   26   27   28   29   30   31   32   33   34   35