2014-03-29 86 views
0

函數的固定點是f(x)= x的點。對於一個特定的函數,我應該從隨機猜測開始,然後一次又一次地計算f,即:計算f(x),f(f(x)),f(f (f(x))),... ,直到值不會超過epsilon。找到函數的固定點

我應該寫的函數作爲輸入:函數,隨機猜測,epsilon和n迭代次數。函數應該計算一個固定點的近似值。當兩個數字之間的差值小於ε時,或者當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

你已經差不多了!你只是沒有「記住」你的最後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) 
+0

嘿,我錯了。代碼*可以被修復,但問題依然存在:-) –