测试一个e的大数幂级

来源:互联网 发布:阿帕奇 知乎 编辑:程序博客网 时间:2024/05/21 07:11

测试一个e的大数幂级

因为e^x=1+x^1*1/1!+x^2*1/2!+...+x^n*1/n!

下面的代码是测试当x取很大时候,n 在多大的时候才能保证等式的两边相等。

 

下面写程序来证明:

(defun pow (num count)

(if (or (> count 1) (eq  count  1) )

      (* num 

         (pow num 

              (- count 1) ) )

      1))

 

(defun slayerex (num count)

(if (or (> count 1) (eq  count  1) )

      (* num 

         (slayerex  

                 (1- num)

                 (- count 1) ) )

      1))

 

(defun slayer ( count)

(if (or (> count 1) (eq  count  1) )

      (* count 

         (slayer  

              (- count 1) ) )

      1))

 

 

 

(defun  expr  (x  n)

(if  (eq  n  0)

        1.0

     (+   (expr  x  

                 (1- n))

          (/    (pow  x  n)

                (slayer n )))))

 

(setq  e  (expr  1 

                 20))

 

(defun  formula  (n)

(pow  e  n))

 

 

 

 

(defun  test (n)

(if (> n 0)

  (progn 

       (print (expr   n  n))

       (print  'compare)

       (print  (formula  n))

       (test (- n 1)))

  (print 'over)))

 

(test  50) 

 

发现(print  (formula  n))比(print (expr   n  n))要大,同样从e^x的展开式中也可以看出,其中n应该是无穷大的,而这里的n为x,所以当x=n时,数列甚至都还是发散的,所以明显有以下公式成立:

e^n > 1+n^1*1/1!+n^2*1/2!+...+n^n*1/n!  (因为其中必须保证n^n*1/n!是收敛的时候与e^n才能化等号,但x也变为无穷大之后, 已经没有无穷大的n可以保证n^n*1/n!是收敛的)

将上式化简有:

e^n > n^n*1/n! 

Go

n!>(n/e)^n

GO

这样就可以得到算法分析中的重要公式:

(log n!)>(log  (n/e)^n )

GO

(log n!)>n *(log  (n/e) )

GO

(log n!)>n *(log n -1 )

Go

(log n!)>n *log n 

 

 

 

 

原创粉丝点击