介绍
Jacobi迭代法是一种常见的用于求解线性方程组的方法,Jacobi迭代法同时也存在着局限性,并不是所有的线性方程组都能用Jacobi迭代法进行求解。在求解某些线性方程组中,Jacobi迭代法是不收敛的,即发散。
代码
# 定义迭代次数和容忍误差
times0 = 1000
tol = 1e-7
def Jacobi(A, b, x):
n = len(b)
times = 0
er = 1000
# 初始解
x0 = [0 for i in range(0, n)]
while (times < times0) and (er > tol):
for i in range(0, n):
sigma = 0
for j in range(0, n):
if (i == j):
continue
sigma += A[i][j] * x0[j]
x[i] = (b[i] - sigma) / A[i][i]
# 计算当前误差
er = max(abs(a - b) for a, b in zip(x, x0))
# 若当前误差小于容忍误差,则结束方法并返回当前解
if (er < tol):
return x
x0 = x.copy()
times += 1
print("在最大迭代次数内不收敛")
# 示例
# 系数矩阵
A = [[1, 2, -2], [1, 1, 1], [2, 2, 1]]
# 右端向量
b = [1, 1, 1]
# 解向量
x = [0 for i in range(0, len(b))]
# 求解线性方程组
x = Jacobi(A, b, x)
print("Jabobi迭代法求解结果如下:\n", x)