求log()的实现方法
1个回答
展开全部
分类: 教育/科学 >> 科学技术
问题描述:
请问有谁知道实现自然对数函数log()的方法
我先把它按ln(t)=ln(1+x)泰勒展开,然后再用Aiken外推数列的方法构造新的级数,以加快收敛速度,但实验发现对于ln0.001等,t较小时,收敛依然十分慢,请教下究竟log()是怎么做的。
解析:
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)。有无数的方法可以做,效果最好了。
问题描述:
请问有谁知道实现自然对数函数log()的方法
我先把它按ln(t)=ln(1+x)泰勒展开,然后再用Aiken外推数列的方法构造新的级数,以加快收敛速度,但实验发现对于ln0.001等,t较小时,收敛依然十分慢,请教下究竟log()是怎么做的。
解析:
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)。有无数的方法可以做,效果最好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询