Python解线性方程组的迭代法(3)————逐次超松弛(SOR)迭代法

代码

import numpy as np


def sor(A, b, N, w):
    x = np.mat(np.zeros((A.shape[0], 1)))
    k = 0
    n = A.shape[0]
    xj = x.copy()
    while k <= N:
        for i in range(n):
            for j in range(n):
                x[i, 0] = (1 - w) * x[i, 0] + w * (b[i, 0] - A[i, 0:i]*x[0:i, 0] - A[i, i+1:n] * xj[i+1:n, 0])/A[i, i]
        if sum(abs(A*x - b)) < 10*-8:
            break
        k = k + 1
        xj = x.copy()
    if k == N:
        print('超过最大迭代次数')
    return x


if __name__ == "__main__":
    w = float(input('请输入松弛因子:'))
    A = np.mat([[10, -1, -2],
              [-1, 10, -2],
              [-1, -1, 5]])
    b = np.mat([[72], [83], [42]])
    print('求解结果:')
    print(sor(A, b, 1000, w))

求解结果如下:

在这里插入图片描述

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页