找到函数的固定点

时间:2014-03-29 18:13:03

标签: python function

函数的固定点是f(x)= x。

的点

对于一个特定的函数我应该通过随机猜测开始找到固定点,然后一次又一次地计算f,即:计算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 个答案:

答案 0 :(得分:1)

你几乎拥有它!你只是没有“记住”你的上一个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)