Python 线性方程组求解的雅可比迭代法/高斯-赛德尔迭代法

Python 线性方程组求解的雅可比迭代法/高斯-赛德尔迭代法

代码

"""
求解线性方程组
    5*x_1 -   x_2 +   x_3 = 10
    2*x_1 - 8*x_2 -   x_3 = 11
    -x_1  +   x_2 + 4*x_3 = 3
初值为 x1 = x2 = x3 = 0
"""

"""雅可比迭代法"""
def jacobi_iteration():
    x1 = x2 = x3 = 0
    x1_next = (x2 - x3 + 10) / 5
    x2_next = (-2 * x1 + x3 + 11) / 8
    x3_next = (x1 - x2 + 3) / 4
    while abs(abs(x1) - abs(x1_next)) > 0.0001 or abs(abs(x2) - abs(x2_next)) > 0.0001 or abs(
            abs(x3) - abs(x3_next)) > 0.0001:
        x1 = x1_next
        x2 = x2_next
        x3 = x3_next
        x1_next = (x2 - x3 + 10) / 5
        x2_next = (-2 * x1 + x3 + 11) / 8
        x3_next = (x1 - x2 + 3) / 4
    print('x1:\n {0}  {1}'.format(x1, x1_next))
    print('x2:\n {0}  {1}'.format(x2, x2_next))
    print('x3:\n {0}  {1}\n'.format(x3, x3_next))


"""高斯-赛德尔迭代法"""
def Gauss_Seidel_iteration():
    x1 = x2 = x3 = 0
    x1_next = (x2 - x3 + 10) / 5
    x2_next = (-2 * x1_next + x3 + 11) / 8
    x3_next = (x1_next - x2_next + 3) / 4
    while abs(abs(x1) - abs(x1_next)) > 0.0001 or abs(abs(x2) - abs(x2_next)) > 0.0001 or abs(
            abs(x3) - abs(x3_next)) > 0.0001:
        x1 = x1_next
        x2 = x2_next
        x3 = x3_next
        x1_next = (x2 - x3 + 10) / 5
        x2_next = (-2 * x1_next + x3 + 11) / 8
        x3_next = (x1_next - x2_next + 3) / 4
    print('x1:\n {0}  {1}'.format(x1, x1_next))
    print('x2:\n {0}  {1}'.format(x2, x2_next))
    print('x3:\n {0}  {1}\n'.format(x3, x3_next))


if __name__ == '__main__':
    print('雅可比迭代法:')
    jacobi_iteration()

    print('高斯-赛德尔迭代法')
    Gauss_Seidel_iteration()

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

努力写代码的瀟

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值