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

赵世忠  等:循环迭代程序的一种可信计算算法                                                           3693


                     y
             Require: {( , ) | yε i    i  =   y    ,1≤≤  } n ,f 1 (x 1 ,x 2 ,…,x n ),f 2 (x 1 ,x 2 ,…,x n ),f(y 1 ,y 2 ,…,y n )≠0,ε>0;
                                     i
                      i
                               i
                                   i ε
             Ensure:返回一个 4 元组 D =  (, , ,y k ε 0  enough ) .若 enough=true,则|y−f 1 (Y)/f 2 (Y)|<ε;否则,当 enough=false 时, y
                                                                                                k
         的精度ε k 不能满足计算的要求,其精度需要提高至ε 0 .

             1:   Calculate and Judge ({( , ) |1y ε i  ≤≤  n }, ,0.1)f 1  ;
                                            i
                        _
                            _
                                     i
             2:   z ⇐  1  | f   1  | 0.1+  ;
             3:   ε 2 ⇐0.1;
                        _
                                            i
                            _

             4:   Calculate and Judge ({( , ) |1y ε  ≤≤  n }, f  , )ε  ;
                                     i  i         2  2
             5:   while  (| f    |≤  2 ε×  )   do;
                        2      2
             6:      ε 2 ⇐0.1×ε 2 ;
             7:      Calculate and Judge ({( , ) |1y ε  ≤≤  n }, f  , )ε  ;
                              _
                                              i
                          _

                                       i  i         2  2
             8:   end while
             9:   while  (| 4 z×  1 ×  ε 2  | | f ×≥     2  (| f    2  | ε  2 ) ε −  ×  |)   do
             10:     ε 2 ⇐0.1×ε 2 ;

                          _
                                              i
             11:     Calculate and Judge ({( , ) |1y ε i  ≤≤ n }, f 2 , )ε 2  ;
                              _
                                       i
             12: end while

                        _
                            _
             13:  Calculate and Judge ({( , ) |1y ε i  i  n }, , (|f δ ≤≤  1  f   2  | / 4 ε  ×  )) ;
                                     i
             14:  y ⇐       f  / f       ;
                      1  2 ε / 2
             15: return (y,0,0,true);
             (3)  正弦函数

             定理 2.5.  若命题 2.2 成立,那么存在一个算法,对于 Y 的一个计算值 Y 与ε,或者能够判定,利用此计算值可
         以获得一个值 y,使得:
                                              |y−sin(f(Y))|<ε                                (27)
         成立,或者可以获得一个更为精确的计算值,使得利用此新的计算值,可以获得一个满足式(27)的 y.

             证明:首先,对于误差限ε/2 来说,由假设知,我们或者可以判定,利用 Y 可以获得一个值 z,满足:
                                               |z−f(Y)|<ε/2                                  (28)
         或者可以获得一个更为精确的计算值,利用该计算值可以获得满足式(28)的一个 z.
             若式(28)成立,则有:
                        | sin(z)  ε/2 −sin(f(Y))|≤| sin(z)  ε/2 −sin(z)|+|sin(z)−sin(f(Y))|<ε/2+|z−f(Y)|<ε  (29)
         这样,只要令 y= sin(z)  ε/2 ,则有式(27)成立.

             若式(28)不成立,那么我们可以获得一个更为精确的计算值 Y ,利用它可以获得一个新的 z,满足式(28).这
         样,式(29)也成立.因此,新的 z 的函数值 sin(z)  ε/2 使得式(27)成立.证明完毕.                                   □
             算法 6. AccurateEnough_Sin( {( , ) |1y ε i  ≤≤ n }, ( , ,...,f x x 2  x n ),ε ).

                                             i
                                                     1
                                      i
                     y
             Require: {( , ) | yε i    i  =   y    i ε ,1≤≤  } n ,f(x 1 ,x 2 ,…,x n ),ε>0;
                                     i
                      i
                               i

             Ensure:返回一个 4 元组 D =  (, , ,y k ε 0  enough ) .若 enough=true,则|y−sin(f(y 1 ,y 2 ,…,y n ))|<ε;否则,当 enough=false
         时, y   的精度ε k 不能满足计算的要求,其精度需要提高至ε 0 .
             k

                        _
                                            i
             1:   Calculate and Judge ({( , ) |1y ε i  ≤≤  n }, , / 2)f ε  ;
                            _
                                     i
             2:   y ⇐    sin( )f       ε /2  ;
             3:   return (y,0,0,true);
             (4)  反正切函数
                              2
             由于 arctan(x)′=1/(1+x )≤1,因此类似于正弦函数的算法 6,我们有下列算法 7.
             算法 7. AccurateEnough_ArcTan( {( , ) |1y ε i  ≤≤  n }, ( , ,...,f x x 2  x n ),ε ).

                                                i
                                                        1
                                         i
   22   23   24   25   26   27   28   29   30   31   32