print('-'*22, '不使用加速收敛技术', '-'*22)
err = 1
x = 1.5
k = 0
while err > 0.000000001:
k = k + 1
x0 = x
x = (3*x-1)**(1/3)
err = abs(x - x0)
if err < 0.000000001:
print('第{:<2}次迭代结果为{:.7},误差为{}'.format(k, x, err))
print('-'*22, '松弛加速法加速后', '-'*22)
err = 1
x = 1.5
k = 0
w = (1/3)*(3*x - 1)**(-2/3)
xk = []
while err > 0.000000001:
xk.append(x)
k = k + 1
x0 = x
x = ((3*x-1)**(1/3) - w*x)/(1-w)
err = abs(x - x0)
if err < 0.000000001:
print('第{:<2}次迭代结果为{:.7},误差为{}'.format(k, x, err))
print('-'*22, '艾特肯加速法加速后', '-'*22)
err = 1
x = 1.5
k = 0
while err > 0.000000001:
if k <= 1:
x0 = x
x = (3*x-1)**(1/3)
err = abs(x - x0)
else:
x0 = x
x = xk[k] - (xk[k]-xk[k-1])**2/(xk[k]-2*xk[k-1]+xk[k-2])
err = abs(x - x0)
k = k + 1
if err < 0.000000001:
print('第{:<2}次迭代结果为{:.7},误差为{}'.format(k, x, err))
err = 1
x = 1.5
k = 0
print('-'*22, '斯特芬森加速法加速后', '-'*22)
while err > 0.000000001:
k = k + 1
x0 = x
x1 = (3 * x0 - 1) ** (1 / 3)
x2 = (3 * x1 - 1) ** (1 / 3)
x = x2 - (x2 - x1)**2/(x2 - 2*x1 + x0)
err = abs(x - x0)
if err < 0.000000001:
print('第{:<2}次迭代结果为{:.7},误差为{}'.format(k, x, err))
迭代法加速收敛技术
最新推荐文章于 2023-04-26 12:19:33 发布