Scheme 什么是定点?

Scheme 什么是定点?,scheme,numerical-methods,sicp,fixpoint-combinators,fixed-point-iteration,Scheme,Numerical Methods,Sicp,Fixpoint Combinators,Fixed Point Iteration,我正在重播早些时候的一些讲座。定点的概念让我有点困惑。定点过程:我应该这样考虑吗,“这是找到给定函数的定点的方法。”那么给定的f(2)=2 另外,为什么在中说明映射到x/y的新函数y是一个固定点?根据: 在数学中,函数的不动点(有时简称为不动点,也称为不变点)是函数域中由函数映射到自身的元素 因此,正如您所写,f(2)=2表示2是一个固定点,而f说明了什么是固定点,但这仍然留下了问题的另一部分: 另外,为什么映射到x/y的新函数y是一个固定点 讲师在你提到的那一点上讲得很快,但我认为他实际上是这

我正在重播早些时候的一些讲座。定点的概念让我有点困惑。定点过程:我应该这样考虑吗,“这是找到给定函数的定点的方法。”那么给定的
f(2)=2

另外,为什么在中说明映射到
x/y
的新函数
y
是一个固定点?

根据:

在数学中,函数的不动点(有时简称为不动点,也称为不变点)是函数域中由函数映射到自身的元素

因此,正如您所写,
f(2)=2
表示
2
是一个固定点,而
f

说明了什么是固定点,但这仍然留下了问题的另一部分:

另外,为什么映射到x/y的新函数y是一个固定点

讲师在你提到的那一点上讲得很快,但我认为他实际上是这么说的√x是多个函数的不动点,这是一个明显的函数√x是一个不动点

y↦x/y

√x=x/√x


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

当您在迭代函数中得到与上次相同的结果时。要理解这一点,请想象一个已知序列的正常函数:

想象一下函数
f(x)=2^(n+1)-1
。它被称为梅森序列,你应该给它一个从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
,因此只有没有固定点的函数将永远循环。

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

首先,简单的定义是:点
x
是函数
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
关键的部分不是等待无限的评估链结束(永远不会结束),而是有一个记录评估步骤进展的惰性列表。然后,我们的价值观——无限列表——被逐步定义:首先,它根本没有定义;然后定义了它的第一个(head)元素,其余的仍然没有定义;然后定义了它的前两个元素;等:
[1.0,13.0,7.4615383,5.406027,5.0152473,5.000023,5.0,5.0,5.0,5.0…]

正如数值收敛到某个数字,越来越接近“最终”值(永远无法达到,但距离越来越小),结果的无限列表也会收敛到其最终值,即定义了所有元素的完全定义的无限列表(当然,这是一个不可能的壮举),在定义上越来越接近最终值(简单地说,它的元素一个接一个地定义,但数学家喜欢它的复杂性)


与函数类似。如果
g(h,n)=n1;else->n*h(h,n-1)
g(error)
是一个只为
n<2
定义的一个参数的(当前)函数,与任何其他参数一样,它将发散(导致错误)。但是
g(error)
是为所有
n<3
定义的;
g(error))
-对于所有的
n<4
,等等。同样,我们有一个越来越明确的值的级数……因此级数的极限,即“极限值”,函数
g
的不动点是这样一个函数
f
,即
f=g(f)
它是为任何
n
定义的,不管多大。它巧合地是一个阶乘函数,定义时没有使用递归。

因此,如果我计算x/y的不动点,我将使用新的x/y值,并将其重新添加到我的不动点过程中。它最终将变为0?这就是为什么它是f