求log()的实现方法

来源:百度知道 编辑:UC知道 时间:2024/05/12 20:40:08
请问有谁知道实现自然对数函数log()的方法
我先把它按ln(t)=ln(1+x)泰勒展开,然后再用Aiken外推数列的方法构造新的级数,以加快收敛速度,但实验发现对于ln0.001等,t较小时,收敛依然十分慢,请教下究竟log()是怎么做的。
注,用此方法求log,要求x的范围是-1<x<=1,即0<t<=2

3个建议:

1、如果坚持使用该方法,一种加快收敛的方法是让t接近1再求ln(t)。这里仅考虑t > 1的情况,如果t < 1,则ln(t) = -ln(1/t)。设e^x = t, 先求x的整数部分n,再求小数部分y。只要不断累乘e,直到刚好超过t,累乘的次数就是n+1。再用你说的泰勒展开求y,因为0 <= y < 1,所以收敛速度可以较快。

2、实际上,当y接近1时,收敛速度还是不快,因为ln2 = 1 - 1/2 + 1/3 - 1/4 + ...。建议求解方程e^x = t。用牛顿法,迭代公式是x1 = x0 - 1 + t/e^x0。其中e^x0可以用泰勒展开近似,结合1中的建议,无需展开多项。我试了一下,效果不错。

3、上面的方法都很麻烦,直接做积分最简单了。1/x在1到t上的积分就是ln(t)。有无数的方法可以做,效果最好了。