8
$\开始组$

上下文:我必须编写一个可以计算$\arctan(x)$一切都是真的x美元$误差小于$10^{-6}$。我能想到的唯一算法是使用泰勒级数$\arctan(x)$,这需要很多术语才能达到所需的准确性。通过简单的谷歌搜索,我找不到更好的方法,但我相信有更有效的算法来计算$\arctan美元$而不是泰勒级数。


我的问题是:有没有网站或书籍收集计算所有数学函数(如特殊函数、三角函数、超越函数等)的最著名算法。?如果没有这样的参考,那么如何找到数学函数的有效算法?

$\端组$
15
  • $\开始组$ 如果$x$很小,泰勒级数就有效。如果$x$较大,可以使用$\text{arccot}$的泰勒级数。如果$x$接近$1$,则可以使用以$1$为中心的泰勒级数。这应该可以正常工作,并且可以应用其他技巧。 $\端组$
    – 乔楚园
    评论 6月21日3:38
  • $\开始组$ 我最喜欢的书之一数值分析方法库建议使用Padé近似,它是多项式的比率。它的优点是可以拟合具有极点和零的函数。这对arctan来说并不重要,但对其他函数来说是重要的。即使是无害的$\frac1{x^2+1}$也会受益,因为它的极点偏离了实际线。该函数是它自己的Padé近似。 $\端组$ 评论 6月21日4:20
  • $\开始组$ A&S公司=阿布拉莫维茨和斯特根为这个和那个提供了一系列近似值。 $\端组$ 评论 6月21日6:06
  • $\开始组$ 密切相关的问题对此,我提供了相当详细的回答. $\端组$
    – 尼古法
    评论 6月21日17:38
  • 2
    $\开始组$ 也请查看en.wikipedia.org/wiki/CORDIC讨论了使用能力非常有限的CPU计算三角函数及其逆函数的巧妙算法。 $\端组$ 评论 6月21日21:10

4个答案4

重置为默认值
5
$\开始组$

你本可以从开始这个维基百科页面特别是,在“初等函数”中给出的最简单的方法已经足够好了,即泰勒级数和参数约简以及牛顿-拉夫森反演。关键是你可以计算$\exp美元$使用泰勒级数和变元归约,你也可以计算$\cos、\sin、\tan$使用$\exp美元$,你可以用牛顿-拉夫森计算出它们的所有倒数。

$\端组$
4
  • $\开始组$ 实际上,使用基于AGM(算术几何平均值)的算法(趋向于二次收敛)计算对数和反三角函数更有效,特别是当需要高精度时。然后使用Newton-Raphson计算exp和正向三角函数。请参阅我链接的卡尔森裁判。Borweins&Brent也写过AGM算法。 $\端组$
    – PM 2环
    评论 6月22日7:57
  • $\开始组$ @PM2Ring:这就是为什么我说“足够好”。初学者应该从简单的方法开始。。。 $\端组$ 评论 6月22日14:05
  • $\开始组$ 很公平。这需要相当复杂的数学来证明与AGM相关的算法实际上做了它们应该做的事情。OTOH,这些算法很容易实现,尤其是一种计算对数和反正切的算法假设你不介意计算几个平方根。 $\端组$
    – PM 2环
    评论 6月22日14:39
  • $\开始组$ @PM2Ring:当然,AGM很容易实现(只要我们使用足够的精度)!但你看,提问者说“如何找到..."... =) $\端组$ 评论 6月23日13:23
5
$\开始组$

这些是我所知道的关于这个主题的最好的书:

Jean-Michel Muller:“基本函数:算法和实现

Jean-Michel-Muller等人:《浮点运算手册》

$\端组$
1
$\开始组$

  • 数字配方:科学计算的艺术作者:William H.Press、Saul A.Teukolsky、William T.Vetterling和Brian P.Flannery:是数值方法和算法的指南,包括计算许多数学函数的方法和算法。

  • 数学函数手册作者:米尔顿·阿布拉莫维茨(Milton Abramowitz)和艾琳·阿斯特根(Irene A.Stegun)(以下简称阿布拉莫维茨和斯特根):是一本经典的参考书,包含大量关于数学函数的信息,包括详细的描述、属性和计算它们的算法。

  • 带公式、图形和数学表的数学函数手册作者:Frank W.J.Olver、Daniel W.Lozier、Ronald F.Boisvert和Charles W.Clark(或NIST数学函数手册)这是阿布拉莫维茨和斯特根著作的更新版本,提供了有关数学函数和现代数值计算方法的广泛信息。

  • 特殊功能由George E.Andrews、Richard Askey和Ranjan Roy编写,其中涵盖了广泛的特殊函数,提供了理论背景和计算技术。

  • 特殊函数的计算作者Shanjie Zhang和Jin Jianming,他们特别关注特殊函数的计算,并提供了详细的算法和实际实现。

其他来源:


CORDIC公司:

为了高效计算阿卡坦(),您可以使用CORDIC:

导入数学定义arctan(x,y,it=20):atan_table=[math.atan(2**(-i)),对于范围(it)中的i)]z=0.0功率2=1.0对于范围(it)中的i:如果y>0:xx=x+y/功率2yy=y-x/pow_2z+=atan_table[i]其他:xx=x-y/pow_2yy=y+x/功率2z-=数据表[i]x、 y=xx,yy功率2*=2.0返回zx、 y=1.0,0.5res=_arctan(x,y)打印(f“arctan({y}/{x})={res}”)

打印

弧(0.5/1.0)=0.4636494681826186
新贡献者
用户24714692是此网站的新贡献者。请注意要求澄清、评论和回答。查看我们的行为准则.
$\端组$
1
  • 1
    $\开始组$ 代码不正确。弧(1/2)=0.463。。。 $\端组$
    – 量子阱
    评论 6月22日4:42
1
$\开始组$

如果您想生成自己的近似值$\tan^{-1}(x)$,你只是专注于$x\ in\ left(0,1\ right)$自从$$\tan美元^{-1}(x)+\tan^{-1}\left(\frac{1}{x}\right)=\frac\pi 2$$

优于泰勒级数,考虑美元[2n+1,2n]$Padé近似值$P_n$哪个写$$P_n=x\分形{1+\sum_{k=1}^na_n\,x^{2n}}{1+\sum_{k=1}^nb_n\,x^{2n}}$$例如$$P_2=x\,\压裂{1+\压裂{7}{9} x个^2+\压裂{64}{345}x^4}{1+\压裂{10}{9} x个^2+\压裂{5}{21}x^4}$$其错误是$\压裂{64}{43659}x^{11}$; 最大误差在上限$\压裂{\pi}{4}-\裂缝{436}{555}=1.87422\乘以10^{-4}$.为了给出准确度的概念,下表报告了无限范数$$\Phi_n=\int_0^1\big(\tan^{-1}(x)-P_n\big)^2\,dx$$以及最大误差$$\剩余(\开始{数组}{ccc}n&\Phi_n&\text{最大错误}\\1&3.45766乘以10^{-6}&6.26850乘以10^}-3}\\2&2.06378乘以10^{-9}&1.87422乘以10^}-4}\\3&1.36438\乘以10^{-12}&5.56331\乘以10^}-6}\\4&9.55466乘以10^{-16}&1.64573乘以10^}-7}\\5&6.94592乘以10^{-19}&4.86014乘以10^}-9}\\6&5.18365乘以10^{-22}&1.43393乘以10^}-10}\\7和3.94436乘以10^{-25}和4.22828乘以10^}-12}\\8&3.04669乘以10^{-28}&1.24678乘以10^}-13}\\\结束{数组}\右侧)$$

就计算机资源而言,使用霍纳方法(只需对$x^2美元$).

例如$$P_4=x\,\压裂{\左(\左(\frac{16384 x^2}{3828825}+\压裂{1289}{7735}\右)x^2+\frac{83}{85}\right)x^2+\frac{91}{51}\right)x^2+1}{\left(\left(\frac{63 x^2}{2431}+\frac{84}{221}\right)x^2+\frac{126}{85}\right)x^2+\压裂{36}{17}\右)x^2+1}$$

另一个不容忽视的方面是,所有系数$(a_n,b_n)$是正数(减法不会丢失准确性)。

$\端组$

你必须登录来回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.