迭代法加速收敛技术

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))

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leetteel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值