迭代过程是收敛的的充要条件是矩阵B收敛于0,矩阵B收敛于0的充要条件是矩阵B的谱半径小于1
于是在前述J,GS,和SOR算法中的main()函数中可以加入一项判别式,从而判断线性方程组迭代法是否能够算出解
例如在前述SOR算法的main()中,代码如下
import numpy as np
def judgement(A,B):
if np.linalg.det(A)==0:
print '矩阵奇异'
return 0
else:
A1 = np.linalg.eigvals(B)
if max(abs(A1))<1:
return 1
else:
print '矩阵不收敛'
return 0
def main(A,b,x0,e,w):
U=get_U(A)
D=get_D(A)
L=get_L(A,D,U)
B=get_B(D,L,U,w)
f=get_f(D,L,w,b)
_n_= judgement(A,B)
if _n_=1
n=0
ans=[]
ans.append(x1)
ans.append(x0)
ans1=[]
ans1.append(x1[0])
ans1.append(x0[0])
while abs(ans[-1][0][1]-ans[-2][0][1])>e:
n=n+1
x0=roll(B,f,x0)
ans.append(x0)
for i in ans:
ans1.append(i[0])
return ans1,len(ans1)-2
else:
return 'error'