什么是定点?

时间:2014-08-18 14:15:39

标签: scheme numerical-methods sicp fixed-point combinators

我正在重温SICP上的一些早期讲座。定点的概念对我来说有点混乱。定点程序:我应该这样考虑它,"它是找到给定函数的定点的方法。"给定f(2) = 2

为什么在this lecture中说明映射到y的新函数x / y是固定点?

4 个答案:

答案 0 :(得分:2)

根据Fixed point (mathematics) on Wikipedia

  

在数学中,函数的固定点(有时缩写为固定点,也称为不变点)是函数域的一个元素,由函数映射到自身。

正如您所写,f(2) = 2表示2f的固定点。

答案 1 :(得分:2)

Just Ethier's answer解决了固定点的问题,但这仍然是问题的另一部分:

  

为什么新函数y映射到x / y是一个固定点?

讲师在你提到的那一点上发言很快,但我认为他实际上说√x是多个函数的固定点,并且√x是一个固定点的明显函数是< / p>

y↦x / y

因为

√x= x /√x

但是,用于计算不动点的给定过程不适用于此函数,因为其内部过程iter循环初始值并且函数应用于初始值。因此,新/旧值的顺序是(1,2),(2,1),(1,2),......

答案 2 :(得分:1)

当您在迭代函数中获得与上次相同的结果时。要掌握这一点,想象一下已知序列的正常函数:

想象一下函数f(x) = 2^(n+1)-1。它被称为Mersenne序列,您应该从0开始为它提供一个索引,它使序列1, 3, 7, 15, 31, ...(基本上它比2的每个幂小1)

现在,您可以通过将函数更改为迭代来生成相同的序列。迭代版本为f(x) = 2x + 1。现在x不再是索引了,而是之前的结果。您从0开始并获得1, 3, 7, 15, 31, ...

现在这个函数没有固定点,因为应用它的结果总是大于它的参数。我们可以说它爆炸了。

回答你的第一个问题。在SICP视频中,他们谈论的是平方根。 n的平方根是迭代函数f(x) = n/x的固定点,因为sqrt(x^2) = x它不映射到其他函数。

一般的定点函数就像它们对定点的定义一样,就是你迭代一个函数,直到你输入函数的值与下一个计算出的数相等(或足够接近)。

现在我们看到我们找不到Mersenne的一个固定点,我们知道我们需要平均阻尼n/x才能使它收敛但是有些函数实际上会收敛,就像f(x) = x/4 + 1收敛一样到3/2。请注意,即使您要平均衰减它仍然会变为3/2,所以只有没有固定点的函数才会永远循环。

答案 3 :(得分:1)

这是我的两分钱。它确实令人困惑。

首先,简单的定义:点x是&#34;固定点&#34;函数ff(x) == x

换句话说,x = f(x)

以上有什么意义吗?似乎不太可能。毕竟,它使用了定义的值。

x不一定是一个简单的数字。它可以是函数,也可以是惰性无限列表,f可以具有部分定义它的效果。然后,通过反复评估

x = f(x) = f( f(x)) = f( f( f(x))) = f( f( f( f(x)))) = ....

越来越多地定义了这个值。现在这个 提醒我们通过迭代计算计算f(y) = (y + n/y)/2的固定点的数字示例,

n=25; f(1.0)=13.0; f(13.0)=7.4615383; f(7.4615383)=5.406027;
      f(5.406027)=5.0152473, f(5.0152473)=5.0152473; f(5.0152473)=5.0

关键部分不是要等到无限的评估链结束(它永远不会),而是要有一个记录评估步骤进展的惰性列表。然后,我们的值无限列表正在逐步定义:首先它是未定义的;然后定义它的第一个(头部)元素,其余部分仍然不是;然后定义了它的两个第一个元素;等等:[1.0,13.0,7.4615383,5.406027,5.0152473,5.000023,5.0,5.0,5.0 ...]

正如数值汇总到某个数字一样,越来越接近&#34;最终&#34;价值(永远不会达到,但距离变得越来越小),无限的结果列表也会收敛到它的最终价值,即定义了所有元素的完全定义的无限列表(当然,这是一个不可能的壮举) ,在定义中越来越接近最终值(简单地说,将其元素逐个定义,但数学家喜欢它复杂化)。

与功能相似。如果g(h,n) = n<2 -> 1 ; else -> n*h(h,n-1)g(error)是仅为n < 2定义的一个参数的(curried)函数,对于任何其他参数,它将发散(导致错误)。但g( g(error))是为所有n < 3定义的; g( g( g(error))) - 适用于所有n < 4,等等。我们的价值进展越来越多定义 ...因此,这种进展的极限,&#34 ;最终值&#34;,函数g不动点f函数,f = g(f)任何 n,无论多大。巧合的是,是一个阶乘函数,定义没有使用递归。