逐次逼近是一种通用方法,在算法的每次迭代中,我们都能找到对我们所寻求的答案的更接近的估计。一类逐次逼近算法使用固定点的思想。如果f(x)是一个数学函数,那么找到x使得f(x)= x给出f的固定点。
找到固定点的一种方法是从一些猜测开始(例如,猜测= 1.0),如果这还不够好,则使用f(猜测)的值作为下一个猜测。我们可以继续重复这个过程,直到我们得到一个在f(猜测)的epsilon内的猜测。
这是我的代码:
def fixedPoint(f, epsilon):
"""
f: a function of one argument that returns a float
epsilon: a small float
returns the best guess when that guess is less than epsilon
away from f(guess) or after 100 trials, whichever comes first.
"""
guess = 1.0
for i in range(100):
if abs(f(guess) - guess) < epsilon:
return guess
else:
guess = f(guess)
return guess
现在进一步......
def sqrt(a):
def tryit(x):
return 0.5 * (a/x + x)
return fixedPoint(tryit, 0.0001)
我想计算数字“a”的平方根,是函数f(x)= 0.5 *(a / x + x)的不动点。和完成。
(以上解决方案是正确的)
答案 0 :(得分:1)
逐次逼近是一种通用方法,在算法的每次迭代中,我们都能找到对我们所寻求的答案的更接近的估计。一类逐次逼近算法使用固定点的思想。如果f(x)是一个数学函数,那么找到x使得f(x)= x给出f的固定点。
找到固定点的一种方法是从一些猜测开始(例如,猜测= 1.0),如果这不够好,则使用f(猜测)的值作为下一个猜测。我们可以继续重复这个过程,直到我们得到一个在f(猜测)的epsilon内的猜测。
python中的示例:
def fixedPoint(f, epsilon):
"""
f: a function of one argument that returns a float
epsilon: a small float
returns the best guess when that guess is less than epsilon
away from f(guess) or after 100 trials, whichever comes first.
"""
guess = 1.0
for i in range(100):
if -epsilon < f(guess) - guess < epsilon:
return guess
else:
guess = f(guess)
return guess
进一步让函数f用于使用巴比伦方法找到平方根:
def sqrt(a):
def babylon(x):
def test(x):
return 0.5 * ((a / x) + x)
return test(x)
return fixedPoint(babylon, 0.0001)
答案 1 :(得分:0)
您可能需要查看optimization and root-finding中的scipy功能。
特别是scipy.optimize.fixed_point
。实际的源代码是here。