查找函数的固定点
一个函数的固定点是指这个点满足 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)