求a^x展开的欧拉方法
对于很小的w,设a^w=1+k*w,k可以理解为一个放大系数。
Go
a^x=(a^w)^(x/w)=(1+k*w)^(x/w)
Go
按Newton的方法展开
a^x=1+(x/w)*k*w/1!+(x/w)*(x/w-1)*(k*w)^2/2!+(x/w)*(x/w-1)*(x/w-2)*(k*w)^3/3!+....
Go
a^x=1+x*k/1!+(x)*(x-w)*(k)^2/2!+(x)*(x-w)*(x-2*w)*(k)^3/3!+....
GO
简化为
a^x=1+x*k/1!+(kx)^2/2!+(kx)^3/3!+....
在这里如果假设x为1,有a=1+k/1!+(k)^2/2!+(k)^3/3!+....
(上面这个式子也可以通过a^w=1+k*w,-->a=(1+k*w)^(1/w)获得 )
同样在这里设置放大系数也无穷的小,为1,获得结果为a=e=2.7182818,
同样也能够得出e=(1+1/n)^n,直接用牛顿公式
e=1+n*(1/n)/1!+n*(n-1)*(1/n)^2/2!+n*(n-1)*(n-2)*(1/n)^3/3!...
Go
e=1+1/1!+1/2!+1/3!...
下面有这样的测试程序:
(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 expr (n k)
(if (< n 0)
0
(+ (expr (- n 1)
k)
(/ (* 1.0 (pow k n))
(slayer n)))))
(expr 10 1),当k(小于1)取不同值的时候a的值也不一样
这样就有e^x=1+x/1!+(x)^2/2!+(x)^3/3!+....