验证newton二项式在指数为分数时的正确性
设形式为(1+0.1)^a,下面将讨论a为2/3和8/3时,直接计算法(采用以前用e做中间计算过程的方法)和newton直接展开,两者结果的比较;
?
?
下面写程序来证明:
(setq ?a ?2 )
(setq ?b ?(/ ?1.0 3))
(setq ?c ?0.1)
?
(defun pow (num count)
(if (or (> count 1) (eq ?count ?1) )
?? ? ?(* num?
?? ? ? ? (pow num?
?? ? ? ? ? ? ?(- count 1) ) )
?? ? ?1))
?
(defun slayer ( count)
(if (or (> count 1) (eq ?count ?1) )
?? ? ?(* count?
?? ? ? ? (slayer ?
?? ? ? ? ? ? ?(- count 1) ) )
?? ? ?1))
?
(defun slayerex (num count)
(if (or (> count 1) (eq ?count ?1) )
?? ? ?(* num?
?? ? ? ? (slayerex
?? ? ? ? ? ? ?(- num ?1) ?
?? ? ? ? ? ? ?(- count 1) ) )
?? ? ?1))
?
?
?
(defun ?newton (n value)
(if ?(eq ?n ?0)
?? ? ? ? ? 1.0
?? ? ? (+ ?(newton ?(1- n)
?? ? ? ? ? ? ? ? ? ?value)
?? ? ? ? ? (/ ?(* ?1.0
?? ? ? ? ? ? ? ? ? (pow ?value ?
?? ? ? ? ? ? ? ? ? ? ? ? n)
?? ? ? ? ? ? ? ? ? (slayerex ?(* ?a?
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?b)
?? ? ? ? ? ? ? ? ? ? ? ? ? ?n))
?? ? ? ? ? ? ? (slayer n)))))
?
?
?
(defun ?expr (n value)
(if (eq ?n 0)
?? ? ? 1.0
?? ? ?(+ ?(expr ?(1- n)
?? ? ? ? ? ? ? ? value)
?? ? ? ? ?(/ ? (* ?1.0 ?
?? ? ? ? ? ? ? ? ? (pow ?value
?? ? ? ? ? ? ? ? ? ? ? ? n))
?? ? ? ? ? ? ? (slayer n)))))
?
?
?
(defun ?formula (n value)
(expr ?n ?
?? ? ? (* ?(log ?(pow value
?? ? ? ? ? ? ? ? ? ? ?a))
?? ? ? ? ? ?b)))
?
(defun ?test (n)
(if (> n 0)
??(progn?
?? ? ? (print (newton ? n ?c))
?? ? ? 美国高防vps (print ?’compare)
?? ? ? (print (formula n ?(+ ?c 1))) ? ? ??
?? ? ? (test (- n 1)))
??(print ‘over)))
?
(test ?10)?
之所以能够这样做,是因为newton二项式中的指数分子值的变化没有n!形式的快,也就是说最终还是收敛的。
[35]> (test ?10)
?
1.0656023
COMPARE
1.0656023
1.0656023
COMPARE
1.0656023
1.0656023
COMPARE
1.0656023
1.0656023
COMPARE
1.0656023
1.0656023
COMPARE
1.0656023
1.0656023
COMPARE
1.0656023
1.0656021
COMPARE
1.0656023
?
下面将a的值变为8实验下:
(setq ?a ?8)
(test ?10)
[37]> (test ?10)
?
1.2893788
COMPARE
1.2893788
1.2893788
COMPARE
1.2893788
1.2893788
COMPARE
1.2893788
1.2893788
COMPARE
1.2893788
1.2893788
COMPARE
1.2893788
1.2893788
COMPARE
1.2893784
1.2893786
COMPARE
1.2893696
?
?
将C的值变为0.9有:
(setq ?c ?0.9)
(test ?10)
[44]> (test ?10)
?
5.537819
COMPARE
5.537861
5.537963
COMPARE
5.5378013
5.53771
COMPARE
5.5374537
5.538184
COMPARE
5.535627
5.5372124
COMPARE
5.527088
5.53948
COMPARE
5.4921665
5.533
COMPARE
5.369749
?
如果将c变为0.99,a变为32,需要用(test ?20)才能得到如下结果:
[53]> (test ?20)
?
1540.871
COMPARE
1540.8262
1540.871
COMPARE
1540.7415
1540.871
COMPARE
1540.5106
1540.871
COMPARE
1539.9132
1540.871
COMPARE
1538.4481
1540.871
COMPARE