重复应用功能

时间:2010-06-27 11:18:41

标签: language-agnostic math

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

while (x > 2)
   x = f(x)

会停止任何值x吗?有一些简单的标准吗?

f(x) < x的{​​{1}}似乎没有帮助,因为该系列可能会收敛。)

具体来说,我们可以为x > 2sqrt

证明这一点

7 个答案:

答案 0 :(得分:5)

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

对于一般情况,最好的想法是使用well-founded induction来证明这个属性。然而,正如Moron在评论中指出的那样,在一般情况下这可能是不可能的,在许多情况下,正确的排序很难找​​到。

编辑,回复Amnon的评论:

如果你想使用有根据的归纳法,你必须定义另一个严格的命令,这是有根据的。如果您提到的功能并不难:您可以x << y当{且仅ceil(x) < ceil(y) <<,其中sqrt是此新订单的符号。当然,这个顺序对于大于2的数字是有充分根据的,并且log和{{1}}都在减少 - 所以你可以应用有根据的归纳。

当然,在一般情况下,这样的订单更难以找到。这在某种程度上也与Hoare logic中的完全正确性断言有关,您需要在每个循环结构上保证类似的义务。

答案 1 :(得分:3)

当迭代序列收敛时,有一个一般定理。 (收敛序列可能不会在有限数量的步骤中停止,但它越来越接近目标。你可以通过在序列中走得足够远而尽可能接近目标。)

如果f是收缩映射,则序列x,f(x),f(f(x)),...将收敛。即,存在正常数k&lt;这样,对于所有x和y,| f(x) - f(y)| &lt; = k | x-y |。

答案 2 :(得分:2)

  

(对于x> 2的f(x)&lt; x似乎没有帮助,因为该系列可能会收敛)。

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

当然这意味着您需要使用浮点运算证明f(x)实际上小于x(即证明它小于x在数学上是不够的,因为那时f(x) = x当差异不足时,浮动可能仍然是真的。)

答案 3 :(得分:2)

没有通用算法来确定函数f和变量x是否会在该循环中结束。暂停问题可以解决这个问题。

对于sqrtlog,我们可以安全地做到这一点,因为我们碰巧知道这些函数的数学属性。比如,sqrt接近1,log最终变为负数。所以条件x < 2在某些时候必须是假的。

希望有所帮助。

答案 4 :(得分:1)

在一般情况下,所有可以说的是,当遇到x i ≤2时,循环将终止。这并不意味着序列会收敛,也不意味着它被限制在2以下。它只意味着序列包含一个不大于2的值。

也就是说,任何包含收敛到严格小于2的值的子序列的序列将(最终)停止。这就是序列x i + 1 = sqrt(x i )的情况,因为x收敛于1.在y i + 1 <的情况下/ sub> = log(y i ),在为 R 的元素变为未定义之前,它将包含一个小于2的值(尽管它在扩展复平面上定义良好) , C * ,但我不认为它会一般收敛,除了可能存在的任何稳定点(即z = log(z))。最终这意味着你需要对序列进行一些前期分析,以更好地理解其行为。

将序列x i 收敛到点z的标准测试是给出ε&gt;在0中,存在n,使得对于所有i> n,| x i - z | &LT; ε。

另外,请考虑Mandelbrot Set M 。对 M 中元素的 C 中特定点c的测试是序列z i + 1 = z i < / sub> 2 + c是无界的,只要有| z i |就会出现这种情况。 &GT; 2. M 的某些元素可能会收敛(例如0),但很多元素不会收敛(例如-1)。

答案 5 :(得分:1)

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

 log(x) <= x - 1

(这是真实分析的一个非常基本的结果;它足以观察log的二阶导数对于所有正x总是负的,所以函数是向下凹的,并且{ {1}}与x-1处的函数相切。从此基本上可以看出,您的x = 1循环必须在第一个while步骤中终止 - 尽管实际上它终止的速度远远快于此。

类似的论点将确定ceil(x) - 2的结果;具体来说,您可以使用以下事实:

f(x) = sqrt(x)

所有正面sqrt(x) <= x/(2 sqrt(2)) + 1/sqrt(2)

如果你问这个结果是否适用于实际程序,而不是数学上,答案会有点细微差别,但并不多。基本上,许多语言实际上对x函数没有硬性准确度要求,因此如果您的特定语言实现具有绝对可怕的数学库,则此属性可能无法保持。也就是说,它需要是一个非常非常糟糕的库;该属性适用于log的任何合理实施。

答案 6 :(得分:0)

我建议阅读提供有用指针的this wikipedia entry。没有关于f的额外知识,没有什么可说的。