目录

​1、概述​

​2、代码​

​3、结果 ​


1、概述

       这一经典思路是在雅可比迭代法思路上的一个创新点,有点作科研找创新点的感觉,​​雅可比迭代法​​我们在上一节课中讲过了,我们进行对比发现,高斯赛德尔迭代法明显比雅克比迭代法迭代速度快了很多,下面我们直接上代码。

2、代码

import numpy as np

# 高斯赛德尔迭代法
def Gauss_Seidel(n,A,B,x0,x,eps,k):
times = 1
while times < k:
for i in range(n):
temp = 0
temps = x0.copy()
for j in range(n):
if i != j:
temp += x0[j] * A[i][j]
x[i] = (B[i] - temp) / A[i][i]
x0[i] = x[i].copy()
error = max(abs(x - temps))
times += 1
if error < eps:
print("精确度等于{0}时,高斯赛德尔迭代法需要迭代{1}次收敛".format(eps,times))
return (x, times)
else:
x0 = x.copy()
print("在最大迭代次数内不收敛", "最大迭代次数后的结果为", x)
return None


def main():
n = 3
A = np.array([[5.0,2,1], [-1,4,2], [2,-3,10]])
B = np.array([-12.0,20,3])
x0 = np.array([1.0, 1, 1])
x = np.array([0.0, 0, 0])
eps = 10 ** (-4)
k = 100 # 最大迭代次数
Gs=Gauss_Seidel(n, A, B, x0, x, eps,k)
print(Gs)


if __name__ == '__main__':
main()

3、结果 

精确度等于0.0001时,高斯赛德尔迭代法需要迭代8次收敛
(array([-3.9999741 , 3.00004264, 2.00000761]), 8)

Process finished with exit code 0