from numpy import log as ln
def g(x):
return ln(4+x-x**2)
def FixedPoint(p0,tolerance):
p = g(p0)
abs_error = abs(p-p0)
p0 = p
while abs_error>=tolerance:
p = g(p0)
abs_error = abs(p-p0)
p0 = p
return p
starting_point = 2
tolerance = 10**-10
fixed_point = FixedPoint(starting_point,tolerance)
print('Fixed-point of g(x) = {0} is x = {1:.7f}'.format(formula,fixed_point))所以,我有一个定点求根算法来求ln(4+x-x^2)的根,我如何添加aitken序列程序来提高求ln(4+x-x^2)根的收敛速度。我在保持每次迭代的值时遇到了麻烦。
发布于 2019-11-05 20:25:47
我将通过以下方式减少定点迭代中的行数
def FixedPoint(p0,tolerance):
p1 = g(p0)
while abs(p1-p0)>=tolerance:
p0,p1 = p1,g(p1)
print(p0)
return p1对于给定的测试用例,这需要29次g评估
Aitken增量平方过程可以实现为
def FixedPointAitken(p0,tolerance):
while True:
p1=g(p0); p2=g(p1);
print(p0,p1,p2)
if abs(p1-p0)<tolerance: break
p0 = p0 - (p1-p0)**2/(p0+p2-2*p1)
return p0这需要5个步骤,对g进行15次评估才能达到目标精度。
https://stackoverflow.com/questions/58709213
复制相似问题