我正在重温SICP上的一些早期讲座。定点的概念对我来说有点混乱。定点程序:我应该这样考虑它,"它是找到给定函数的定点的方法。"给定f(2) = 2
?
为什么在this lecture中说明映射到y
的新函数x / y
是固定点?
答案 0 :(得分:2)
根据Fixed point (mathematics) on Wikipedia:
在数学中,函数的固定点(有时缩写为固定点,也称为不变点)是函数域的一个元素,由函数映射到自身。
正如您所写,f(2) = 2
表示2
是f
的固定点。
答案 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;函数f
,f(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)
为任何}定义em> n
,无论多大。巧合的是,是一个阶乘函数,定义没有使用递归。