函数的固定点是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)
答案 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)