三angular函数如何工作?

因此,在高中math,也许大学,我们被教导如何使用trig函数,他们做什么,他们解决什么样的问题。 但他们一直以黑匣子的forms呈现给我。 如果你需要正弦或余弦的东西,你打你的计算器上的罪或COSbutton,你就被设置。 这很好。

我想知道的是通常如何实现三angular函数。

首先,你必须做一些减less范围。 Trig函数是周期性的,所以您需要将参数减less到标准时间间隔。 对于初学者来说,你可以减lessangular度在0到360度之间。 但通过使用一些身份,你意识到你可以less得可怜。 如果计算0度和45度之间的angular度的正弦和余弦,则可以引导您计算所有angular度的所有三angular函数。

一旦你减less了你的论点,大多数芯片使用CORDICalgorithm来计算正弦和余弦。 你可能会听到有人说电脑使用泰勒系列。 这听起来很合理,但事实并非如此。 CORDICalgorithm更适合于高效的硬件实现。 ( 软件库可能使用泰勒级数,在不支持trig函数的硬件上说)。可能还有一些额外的处理,使用CORDICalgorithm获得相当好的答案,但是为了提高准确性而做了其他的事情。

上面有一些改进。 例如,对于非常小的angular度theta(以弧度表示),sin(theta)= theta以达到所有精度,所以简单地返回theta比使用其他algorithm更有效率。 所以实际上有很多特殊的逻辑来排除所有的性能和准确性。 具有较小市场的芯片可能不会进行尽可能多的优化工作。

编辑:杰克Ganssle在他的embedded式系统, “固件手册”一书中有一个体面的讨论。

仅供参考:如果您有准确性和性能限制,泰勒级数应用于数值目的的近似函数。 (为他们的微积分课程保存它们)。他们利用一个函数的分析性,例如所有的派生物都存在于这个点上。 它们不一定在利益区间内汇合。 通常他们在分布函数近似的精度方面做得很差,以便在评估点附近“完美”; 错误通常会随着远离而放大。 如果你有任何非连续导数(例如方波,三angular波和它们的积分)的函数,泰勒级数会给你错误的答案。

当使用最大度数为N的多项式来近似给定函数f(x)时,x0 <x <x1的最好的“简单”的解决scheme来自Chebyshev近似 ; 请参阅数值食谱以获得良好的讨论。 请注意,我所链接的Wolfram文章中的Tj(x)和Tk(x)使用了余弦和反余弦,这些都是多项式,实践中使用递推公式来获得系数。 再次,看数字食谱。

编辑:维基百科有一个关于近似理论的半正式的文章。 他们引用的一个来源(Hart,“计算机近似值”)已经绝版了(使用的副本往往很贵),但是却涉及到很多这方面的细节。 (Jack Ganssle在他的通讯The Embedded Muse的第39期中提到了这一点。)

编辑2:下面是关于sin(x)的Taylor和Chebyshev的一些有形的错误度量(见下文)。 一些重要的注意事项:

  1. 泰勒级数近似在给定范围内的最大误差远大于相同程度的Chebyshev近似的最大误差。 (对于大致相同的错误,你可以用Chebyshev减less一个项,这意味着更快的性能)
  2. 减less范围是一个巨大的胜利。 这是因为当近似的间隔较小时,高阶多项式的贡献收缩。
  3. 如果你不能摆脱范围缩小,你的系数需要更精确的存储。

不要误会我的意思:泰勒级数将适用于正弦/余弦(在范围-pi / 2到+ pi / 2范围内具有合理的精度;从技术上讲,在足够的条件下,可以达到所有实际input的任何期望的精度,但尝试使用泰勒级数来计算cos(100),除非使用任意精度算术,否则不能这样做)。 如果我用一个不科学的计算器卡在一个荒岛上,我需要计算正弦和余弦,我可能会使用泰勒级数,因为系数很容易记住。 但是真正的编写你自己的sin()或cos()函数的应用程序是非常罕见的,所以你最好使用一个有效的实现来达到期望的精度 – 泰勒级数不是

范围= -pi / 2到+ pi / 2,度数5(3个项目)

  • 泰勒:在4.5e-3附近的最大误差,f(x)= xx 3/6 + x 5/120
  • 切比雪夫:最大误差在7e-5左右,f(x)= 0.9996949x-0.1656700x 3 + 0.0075134x 5

范围= -pi / 2到+ pi / 2,度数7(4个项)

  • 泰勒:在1.5e-4附近的最大误差,f(x)= xx 3/6 + x 5 /120-x 7/5040
  • 切比雪夫:最大误差在6e-7左右,f(x)= 0.99999660x-0.16664824x 3 + 0.00830629x 5 -0.00018363x 7

范围= -pi / 4到+ pi / 4,度3(2个项)

  • 泰勒:在2.5e-3附近的最大误差,f(x)= xx 3/6
  • 切比雪夫:最大误差在1.5e-4左右,f(x)= 0.999x-0.1603x 3

范围= -pi / 4到+ pi / 4,度数5(3个项目)

  • 泰勒:在3.5e-5附近的最大误差,f(x)= xx 3/6 + x 5
  • 切比雪夫:最大误差在6e-7附近,f(x)= 0.999995x-0.1666016x 3 + 0.0081215x 5

范围= -pi / 4到+ pi / 4,度数7(4项)

  • 泰勒:3e-7左右的最大误差,f(x)= xx 3/6 + x 5 /120-x 7/5040
  • 切比雪夫:最大误差1.2e-9左右,f(x)= 0.999999986x-0.166666367x 3 + 0.008331584x 5 -0.000194621x 7

我相信他们是用泰勒级数或CORDIC来计算的。 一些大量使用trig函数(游戏,graphics)的应用程序在启动时会构build触发器表,以便查找值而不是重复计算它们。

查看关于trig函数的维基百科文章 。 有关在代码中实际实现它们的好地方是Numerical Recipes 。

我不是一个math家,但是我对“罪恶”,“宇宙”和“黄褐色”来自哪里的理解是,从某种意义上说,当你使用直angular三angular形时,他们就会被观察到。 如果您测量一组不同直angular三angular形的边长,并在图上绘制点,则可以得到sin,cos和tan。 正如哈珀·谢尔比(Harper Shelby)指出的那样,这些函数被简单地定义为直angular三angular形的属性。

通过理解这些比率如何与圆的几何形状相关,从而达到更高的理解度,这将导致弧度和所有的优点。 这就是维基百科条目中的所有内容。

通常对于计算机来说,幂级数表示用于计算正弦和余弦,这些用于其他触发函数。 将这些序列扩展到大约8个术语计算所需的值,以接近机器epsilon(可以保持的最小非零浮点数)的精度。

CORDIC方法由于是在硬件上实现的,所以速度更快,但主要用于embedded式系统而不是标准的计算机。

如果你要求更多的物理解释sin,cos和tan考虑它们与直angular三angular形的关系。 cos(lambda)的实际数值可以通过形成直angular三angular形而得到,其中一个angular度为λ,并且将与λ相邻的三angular形侧的长度除以斜边的长度。 对于罪的使用也同样如此。 切线用相反的一面除以相邻的一面。 记住这个经典memonic是SOHCAHTOA(发音socatoa)。