SICP:为什么这种基于递归的正弦近似有效?

时间:2017-10-01 01:37:14

标签: recursion trigonometry sicp

Here计算机程序的结构和解释'的问题和解决方案。练习1.15(see here)。我的问题是,我不知道这些公式的组合实际上是如何工作的:

enter image description here

enter image description here

表示小x弧度值。

我理解这样的想法,即弧度角越接近零,它越接近该角度的正弦。我见过很好的解释(麻省理工学院开放式课程,可汗学院)。我也弄清楚了

enter image description here

公式得出。但他们如何一起使用来得出sin(x)的答案? p函数似乎只是将每个递归传递的可变角度除以3,直到angle低于0.1然后在回来的路上,我们执行{{1}我们不得不除以p的次数。所以似乎

enter image description here

神奇地变得与

相同

enter image description here

通过递归申请。怎么样?我对递归理论并不十分精通。此外,如果这是以对数方式接近3,那么就好像我们总计了许多小0.1的整合。这似乎做了一些像Y-combinator一样模糊的东西 - 我也不太了解它。

另外,当我们看到递归步骤(递归)重复将x除以$ 3 $时,最终会告诉你这是对数吗?我的意思是,看起来它在每个部门都取得了巨大的数量级跳跃,但还有另一种分析方法可以称之为对数减少吗?

1 个答案:

答案 0 :(得分:2)

首先要指出的是,enter image description here并不完全准确,因为x只是一个近似值。正确的符号是 enter image description here。这看似有点挑剔,但很重要,因为这可以解释书中给出的正弦的练习和定义。

sin(x) = 3sin(x/3) - 4sin^3(x/3)enter image description here组合在一起的方法是在正弦过程的定义中。这个想法是,我们希望根据x的值返回近似值或第二个公式(sin(x) = 3sin(x/3) - 4sin^3(x/3))。

如果x“足够小”,那么我们只返回x作为sin(x)的近似值。但是,如果它不是“足够小”,我们将使用sin(x) = 3sin(x/3) - 4sin^3(x/3)。因为这是平等的,所以这显然很好。直到您注意到sin(x / 3)较小,因此可能可能“足够小”,这似乎没有必要。这就是为什么该过程是递归的,我们将继续这样做,直到sine的参数“足够小”为止。

您的困惑似乎在这里:

因此,看来enter image description here变得与enter image description here一样神奇。

情况并非如此。这有点棘手,因为(define (p x) (- (* 3 x) (* (4 (cube x))))不包含任何正弦,但是请记住,此定义中的x只是局部变量。但是,如果我们看一下正弦过程定义的最后一行,我们可以看到我们实际上正在调用(p (sin (/ angle 3.0))))),因此正弦位于p调用的参数中。

递归的步数是对数的,原因是调用p过程的次数大约是必须将角度除以3.0才能获得的次数小于0.1的值。如果角度为大数,则该值接近1。因此,我们将不得不调用p直到angle /(3.0 ^ n)<0.1近似于n,以使3.0 ^ n>近似于enter image description here