另外一种算pi值的方法(加快收敛)

另外一种算pi值的方法(加快收敛)

前面的方法计算30项只能精确到小数点后第3位数字,下面将它优化:

(x-1/2)^2+y^2=1/4

Go

y=(sqrt  (1/4 -  (x-1/2)^2 ) )

Go

y=(1/2* sqrt  (1 -  (2x-1)^2 ) )

当x取0,1/4时候,有如下关系成立:

这样有A=1*/2*1/2*pi/6 - 1/2*1/4*(sqrt 3)/4  (R=1/2)

pi=6* { A+ 1/2*1/4*(sqrt 3)/4}

 

A=1/4*{ x - 0.5/3*1!*{(x) }^3 +0.5*(0.5-1)/5*2!*{-(x/a) }^5 +0.5*(0.5-1)*(0.5-2)/7*3!*{-(x/a)^2}^7 } ... }

 

expr 为积分后的表达式。

 

(defun pow (n count)

(if  (>  count  0)

       (*  n 

           (pow    n

                   (1- count)))

       1))

 

(defun slayer (n count)

(if  (>  count  0)

       (*  n 

           (slayer (1- n)

                   (1- count)))

       1))

 

(defun  expr  (n  x)

(if (eq n  1)

        x

        (+   (expr (1- n) x)            

             (/   

                  (* (pow  -1   (1- n))

                     (pow  x  

                           (- (* 2 n)

                              1))

                     (slayer  0.5  

                           (1- n)))

                  (* (- (* 2 n)

                        1)

                     (slayer (1- n)    

                             (1- n)))))))

 

(defun  wrap (value)

(+  value

    (/  (sqrt 3)

        32)))

 

(* 24 

   (wrap (-  (* 0.25 (expr 30   (- 0.5 1 )))

             (* 0.25 (expr 30   (- 0 1 ))))))

 

这里计算到30项结果并没有变化,只是换了方式。

 

 

 

 

 

 


版权声明:本文为chenbingchenbing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。