Language agnostic 函数的重复应用

Language agnostic 函数的重复应用,language-agnostic,math,Language Agnostic,Math,阅读问题让我思考:对于给定的函数f,我们如何知道这种形式的循环: while (x > 2) x = f(x) 是否会因任何值x而停止?是否有一些简单的标准 (事实上,f(x)2似乎没有帮助,因为序列可能会收敛) 具体地说,我们能为sqrt和log证明这一点吗?对于这些函数,证明ceil(f(x))2就足够了。你可以做一次迭代——得到一个整数,然后进行简单的归纳 对于一般情况,最好的办法可能是用它来证明这个属性。然而,正如白痴在评论中指出的那样,这在一般情况下是不可能的,而且在许多

阅读问题让我思考:对于给定的函数
f
,我们如何知道这种形式的循环:

while (x > 2)
   x = f(x)
是否会因任何值
x
而停止?是否有一些简单的标准

(事实上,
f(x)
对于
x>2
似乎没有帮助,因为序列可能会收敛)


具体地说,我们能为
sqrt
log
证明这一点吗?

对于这些函数,证明
ceil(f(x))2
就足够了。你可以做一次迭代——得到一个整数,然后进行简单的归纳

对于一般情况,最好的办法可能是用它来证明这个属性。然而,正如白痴在评论中指出的那样,这在一般情况下是不可能的,而且在许多情况下,很难找到正确的顺序

编辑,作为对阿姆农评论的回复:

如果你想使用有根据的归纳法,你必须定义另一个严格的顺序,这是有根据的。对于您提到的函数,这并不难:您可以选择
x
(f(x)2的事实似乎没有帮助,因为序列可能会收敛)

如果我们在这里谈论浮动,那不是真的。如果对于所有
x>n
f(x)
严格小于
x
,它将在某个点达到
n
(因为任意两个数字之间的浮点值数量有限)

当然,这意味着您需要使用浮点运算证明
f(x)
实际上小于
x
(即,从数学上证明它小于x是不够的,因为当差值不够时,
f(x)=x
对于浮点仍然是真的).

没有通用算法来确定函数
f
和变量
x
是否在该循环中结束。停顿问题可以归结为那个问题

对于
sqrt
log
,我们可以安全地这样做,因为我们碰巧知道这些函数的数学性质。比如说,
sqrt
接近1,
log
最终变成负值。因此,条件
x<2
在某个点必须为false


希望这能有所帮助。

有一个关于迭代序列何时收敛的一般定理。(收敛序列可能不会在有限的步数内停止,但它正在接近目标。通过在序列中走得足够远,可以尽可能接近目标。)


序列x,f(x),f(f(x))。。。如果f是压缩映射,则将收敛。也就是说,存在一个正常数k<1,对于一般情况下,对于所有x和y,f(x)-f(y)>p>,可以说,当遇到席时,环将终止。≤2.这并不意味着序列会收敛,甚至也不意味着它在2以下有界。这只意味着序列包含的值不大于2

也就是说,任何包含收敛到严格小于2的值的子序列的序列(最终)都将停止。序列xi+1=sqrt(xi)就是这种情况,因为x收敛到1。在yi+1=log(yi)的情况下,在R的元素未定义之前,它将包含小于2的值(虽然它在扩展复平面C*上定义得很好,但我认为它通常不会收敛,除非在可能存在的任何稳定点(即z=log(z))处)。最终,这意味着您需要对序列进行一些前期分析,以更好地了解其行为

< P>序列Xi收敛到Z点的标准检验是给出ε>0,n为所有i>n,即席席z<ε。


作为一个旁侧,考虑m中的一个特定点C在m中的测试是序列Zi+1=Zi2+C是否无界,每当有子子>2时都出现,M的一些元素可能收敛(如0),但许多不收敛(如-1)。.

当然。对于所有正数
x
,以下不等式成立:

 log(x) <= x - 1
对于所有正
x


如果你问这个结果是否适用于实际的程序,而不是数学上的,答案会有一点细微差别,但不会太多。基本上,许多语言实际上对
log
函数没有严格的精度要求,因此如果你的特定语言实现有一个绝对糟糕的数学库,那么这个问题就解决了属性可能无法保存。也就是说,它需要是一个非常非常糟糕的库;对于
log

的任何合理实现,此属性都可以保存。我建议阅读提供有用指针的内容。如果没有关于f的其他知识,什么都不能说。

为什么
f(x)
帮助?如果这个不等式适用于所有
x>=2
我认为很明显,循环最终会终止。它适用于
sqrt
log
@IVlad,这是不够的。例如,
f(x)=sqrt(x-2)+2
,该属性适用于每个
x>2
,但级数收敛到2,从未真正达到它。@IVlad:他说的是函数每一步都接近2,但从未真正达到它。如
f(x)=2+1/x
。当然,如果你使用浮点数
1/x
对于足够大的
x
,那么浮点数就不存在这样的序列。是的,我在考虑浮点数。是的,我有点忘记了浮点数。然后,有时候,需要任意精度的数字——这是不够的。此外,当考虑到非常小的数字时,浮点算法也有其特殊性,因此可能很难建立证明。问题不是关于实现这一点的算法方法。事实上,您可能会发现很难对函数
f
和t进行编码
sqrt(x) <= x/(2 sqrt(2)) + 1/sqrt(2)