Ocaml定点实现

Ocaml定点实现,ocaml,fixed-point-iteration,Ocaml,Fixed Point Iteration,我试图弄清楚如何在Ocaml中实现定点迭代。也就是说,给定一个函数f和一个x,我想计算fffx的最终值。。。会的 例如,如果我的函数是x/2,x=50,我的答案应该是0 到目前为止,我已经 let rec computed_fixed_point eq f x = if (x == f x) then x else computed_fixed_point eq f (f x) 这适用于函数x/2,x=50,给

我试图弄清楚如何在Ocaml中实现定点迭代。也就是说,给定一个函数f和一个x,我想计算fffx的最终值。。。会的

例如,如果我的函数是x/2,x=50,我的答案应该是0

到目前为止,我已经

 let rec computed_fixed_point eq f x =
        if (x == f x) then 
            x
        else
            computed_fixed_point eq f (f x)
这适用于函数x/2,x=50,给我0,但对于无限大的函数或非0的函数,它似乎不起作用


另一个人能给我一些建议吗?谢谢

要理解这个问题的基本原理有点难。不是每个函数都有一个固定点。例如,乐趣x->x+1模式5。并非每个具有固定点的函数都会通过从不同的起点重复应用来达到固定点。我只是在谷歌上搜索了一下,像这样的固定点叫做吸引固定点

以下是一些评论:

您不应该使用==,它是物理相等运算符。您可能希望使用=,相等的值

但是,我看不出eq参数的用途。可能允许调用方指定要使用的等式。如果是这样,您应该使用它而不是==


理解这个问题的基本原理有点困难。不是每个函数都有一个固定点。例如,乐趣x->x+1模式5。并非每个具有固定点的函数都会通过从不同的起点重复应用来达到固定点。我只是在谷歌上搜索了一下,像这样的固定点叫做吸引固定点

以下是一些评论:

您不应该使用==,它是物理相等运算符。您可能希望使用=,相等的值

但是,我看不出eq参数的用途。可能允许调用方指定要使用的等式。如果是这样,您应该使用它而不是==


吹毛求疵:我相信当一些重复的应用程序可能会收敛到不动点时,不动点是有吸引力的,但这并不保证这种收敛会在固定的时间内达到极限,这实际上是这里的主要问题。通常的技巧是,在抽象的解释中,保证在有限时间内收敛就是将自己限制在有限大小的域内。谢谢,总是很高兴被纠正。我只是在谷歌上搜索了一下,以确保我的答案没有偏离。吹毛求疵:我认为当一些重复的应用程序可能会收敛到某个不动点时,该不动点是有吸引力的,但这并不保证这种收敛会在固定时间内达到极限,这实际上是这里的主要问题。通常的技巧是,在抽象的解释中,保证在有限时间内收敛就是将自己限制在有限大小的域内。谢谢,总是很高兴被纠正。我只是在谷歌上搜索了一下,以确保我的答案没有错。