查找函数的固定点

1 投票
1 回答
2872 浏览
提问于 2025-04-18 00:28

一个函数的固定点是指这个点满足 f(x)=x 的条件。

对于一个特定的函数,我需要通过先随便猜一个值,然后不断计算这个函数来找到固定点,也就是说:计算 f(x),然后再计算 f(f(x)),接着是 f(f(f(x))),一直这样下去,直到结果不再变化,变化的幅度小于一个很小的值 epsilon。

我需要写的这个函数接收几个输入:一个函数、一个随机猜测的值、一个很小的值 epsilon,还有一个迭代次数 n。这个函数应该计算出一个固定点的近似值。它会在两个数字之间的差小于 epsilon 时停止,或者当迭代次数达到 n 时停止。

输入和输出的例子:

    >>> fixed_point(lambda x:x**2, 1, n=5) 
1 #0 iterations needed, initial guess suffices 

>>> fixed_point(lambda x:x**2, 0.5, n=5) 
5.421010862427522e-20 #after 5 iterations 

>>> fixed_point(lambda x:x**2, 0.5, n=4) 
>>> #returns None 

>>> fixed_point(lambda x:x**2, 2, n=5) 
>>> #returns None, guesses were: 2, 4, 16, 256, 65536, 4294967296

我的代码只有在第一个例子中给出了正确的答案,我应该修复哪里呢?

def fixed_point(f, guess, epsilon=10**(-8), n=10):
itr=0
test=f(guess)
if (abs(test-guess)<epsilon):
    return(test)


while ((n>itr) and (abs(test-guess)>=epsilon)):
    itr+=1
    test=f(test)

    if ((abs(test-guess))<epsilon):

        return(test)
return(None)

1 个回答

2

你差一点就成功了!你只是没有“记住”你上一次的 guess,看看这个:

 def fixed_point(f, guess, epsilon=10**(-8), n=10):
      itr=0
      print "Guess:", guess
      test=f(guess)
      if (abs(test-guess)<epsilon):
          return(test)


      while ((n>itr) and (abs(test-guess)>=epsilon)):
          itr+=1
          guess = test
          test = f(test)
          print "Guess:",guess

          if ((abs(test-guess))<epsilon):
              return(test)

      return(None)


  print fixed_point(lambda x:x**2, 1, n=5)
  print fixed_point(lambda x:x**2, 0.5, n=5)
  print fixed_point(lambda x:x**2, 0.5, n=4)
  print fixed_point(lambda x:x**2, 2, n=5)

撰写回答