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)