用一个for写的高斯-赛德尔迭代,怎么说呢,从传热学得来的灵感,总之就是非常爽,源代码如下
def my_Gauss(A,b,x0,max_iteration,epcl):
x=x0.copy()
n=len(x)
k=0
while k<max_iteration:
for i in range(n):
x[i] = 0
x[i] = (b[i]-np.sum(np.multiply(A[i,:],x)))/A[i,i]
if np.linalg.norm(x-x0)<epcl:
break
k=k+1
x0=x.copy()
else:
print('最大迭代次数过小')
return x
A=np.array([[10,3,1],[2,-10,3],[1,3,10]])
b=np.array([14,-5,14])
x0=np.array([0,0,0])
print(my_Gauss(A,b,x0,10000,0.00001))