一种用自然对数开n次方根的方法
以前是用newton展开做过这方面的尝试:
现在换种方法
比如7^(1/3)=a
Go
log 7^(1/3)=log a
Go
1/3* (log 7) =log a
GO
a=e^{ 1/3* (log 7) }
其中log是系统函数,而e^x的值可以用展开法计算,不过我们在这里利用上次的成果间接计算e^x的值:
(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))
(setq material (* (log 7)
(/ 1
3)))
(defun expr (n)
(if (eq n 1)
1.0
(+
(* n
(expr (- n 1) ))
(* n
(pow material
(1- n))))))
(defun test (n)
(if (> n 0)
(progn
(print (/ (expr n) (slayer n)))
(print 'compare)
(print (pow (/ (expr n) (slayer n)) 3))
(test (- n 1)))
(print 'over)))
(test 10)
用这种方法解决了不能开除了sqrt外的高次方根的问题。并且采用了间接的方法,避免直接求e^(小数)的问题,因为在我们目前的pow函数中,不能处理幂为小数的情况。