实现log()和exp()函数的方法,并以此计算pow()

由于本人水平极度有限,所以所写的只是个人的想法,不可避免地存在错漏,如果有任何意见或批评,非常欢迎告诉我,emailpjy.studio@gmail.com

演示代码下载http://pjy.studio.googlepages.com/log_exp_pow.cpp      

如果不能正常查看文章,请点击下载文章

最近特然对如何自己写出log()函数十分感兴趣,于是就想探索一下其实现方法。

上次简单的分析了一下pow()函数的实现,在那里只是简单的运用了Taylor展开。鉴于自然对数函数log(),函数exp()和函数pow()有密切的关系,于是就有了一齐把这三个函数的实现方法都写出来的想法。而其中,实现log()函数是最关健和复杂的部分。为了与库函数分开,我自己写的这三个函数名命名为powPlnPexpP。以下是我的一些想法:

    一,运用Taylor展开

要实现lnP,应用Taylor展开是最一般的方法了。这里把lnP(t)转化为lnP(1+x),然后进行展开,由数学分析知识知道在0<t<=2的范围类,其展开式是收敛的,记 。这样就可以粗略计算lnP了,但实现时会发现,用Taylor展开计算的效果并不令人满意,这主要是指其收敛的速度不够快,当t接近012时,计算时间十分长。这样,我们就需要对   做出变换,以加快其收敛速度,这里,我用了Aitken外推数列的方法。

 

二,应用Aitken算法加速数列收敛

在实现lnP函数中,加速数列收敛的Aitken方法是整个过程的核心,因此,简单的介绍一下Aitken方法:

计算级数 的和 a ,记级数部分和为  ,如果此数列收敛慢,则有必要构造新数列
,使他更快地收敛到 a 。记  ,若   的收敛阶为1,即   c 为常数,于是
 
,解之有    ,于是,便得到 Aitken 外推数列
 
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值